20200915のLinuxに関する記事は8件です。

Amazon Linux2(CentOS)をGUI化する

Amazon Linux2(CentOS)をGUI化する

今回はAmazon Linux2(CentOS 7)で、Mateをインストールし、GUI化してみます。ただGUI化するだけでは味気ないので、Google Chromeをインストールしてネットサーフィンできるようにしたいと思います。
またコマンド操作ではなくWindowsっぽくGoogle chromeでインターネットへアクセスしてWebサイトを閲覧できるようにしていきたいと思います。

今回のゴール

以下の画像みたいに利用できるようにする。
yahooトップ画面.png

前提環境

  • 利用するEC2 AMIはAmazon Linux2 (CentOS)
  • EC2はクライアント端末(自宅のWindows 10)からSSHおよびVNCでアクセスできるようにセキュリティグループを設定
  • VNCソフトはtigerVNCを利用
  • デスクトップ環境はMATE(読み:マテ)をインストールして利用
  • VNCクライアントにUltraVNC viewerをインストールする
  • VNCログインに利用するユーザはec2-user

手順

  1. EC2 をデプロイし、SSHで接続できる環境を構築する
  2. EC2 にGUI化ソフト(MATE),tigerVNC(VNCソフト),Google chromeのパッケージをインストールする
  3. クライアント端末にUltra VNC viewer をインストールする
  4. クライアント端末からEC2にVNC接続を行う

実際にやってみた

1.については詳しい記事がたくさんありますので、割愛します。それでは2.から始めていきます。
まずSSHでEC2に接続して、ユーザはec2-userで進めていきます。

# MATEパッケージをインストールします。
sudo amazon-linux-extras install mate-desktop1.x

# MATE をデフォルトのデスクトップとして定義します。またすべてのユーザーに対して MATE を定義します。
sudo bash -c 'echo PREFERRED=/usr/bin/mate-session > /etc/sysconfig/desktop'

# TigerVNC をインストールします。
sudo yum install tigervnc-server

# ec2-userに対して6~8 文字の VNC 固有のパスワードを設定します。
vncpasswd
表示専用のパスワードを入力するかどうかを確認するメッセージが表示されたら、「n」を押します。

# 表示番号 1 で VNC サーバーを起動します。
vncserver :1 

# デフォルトで作成されているvncserverのsystemd ユニットをコピーして、別に新しい systemd ユニットを作成します。
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service

# 新しいユニット内のすべての <USER>という記載を 実際に利用するユーザ(ec2-user) に置き換えます。
sudo sed -i 's/<USER>/ec2-user/' /etc/systemd/system/vncserver@.service

# systemd マネージャー設定を再ロードします。
sudo systemctl daemon-reload

# サービスを有効にします。
sudo systemctl enable vncserver@:1

#サービスを起動します。
sudo systemctl start vncserver@:1

これでGUI化の設定は環境です。ただこのままだと英語表記だし、Google chromeがインストールされていないのでデスクトップ環境の日本語化とGoogle chromeのインストールを行います。

# まず のデスクトップ環境の日本語化設定を行います。日本語入ができるようにIME ibus と日本語のフォントのgoogle-noto-sans-japanese-fontsをインストールします。

sudo yum install ibus-kkc
sudo yum install google-noto-sans-japanese-fonts    

# ibusの設定をbashrcに記載します。
vi ~/.bashrc

# ファイルの最後に以下を追加して、ファイルを保存します。
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
ibus-daemon -drx

# ロケールの設定を変更します。
sudo localectl set-locale LANG=ja_JP.UTF-8

# 設定変更反映のため再起動させます。
reboot

これで日本語は完了です。続いてGoogle Chrome パッケージをインストールしていきます。
ここから先はroot権限のあるユーザでコマンドを実行してください。

#リポジトリファイルを作成します。 
sudo vi /etc/yum.repos.d/google-chrome.repo

# ファイル内容は以下を記述します。 
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

# yum をアップデートします
sudo yum update

# パッケージをインストールしていきます。
sudo yum install google-chrome-stable

# 正しくインストールできたか確認します。
google-chrome --version
バージョンが表示されればOKです。

これでEC2側で行う設定は全て完了です。あとはクライアント端末にVNC viewerをインストールして、アクセスしてみましょう。

以下サイトからUltraVNC viewerをインストールしてします。
窓の社

Ultra VNC viewerを起動し
["ELastic IPアドレス":5901] という形式で入力し、登録したPWを入力します。
Veiwer_ログイン.png

vnc_ログイン後画面.png
こんな感じで表示されればOKです。
次にGoogle Chromeを起動します。
google_アクセス.png

無事ネットサーフィンできそうです。
これで設定は完了です。

最後に

メモリ1GBでもサクサク動きます(笑)。Linuxってやっぱり軽いですね!
諸事情あって、直接PCからネットワークサーフィンできないときとかに便利かもです。

参考にしたWebサイト

Amazon Linux2 にGUIデスクトップ環境(MATE)をインストールする手順
CentOS7×Chromeでスクレイピング環境を構築するチュートリアル
AWS公式

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS(NetworkManager)でMACアドレスで接続制限をしているWIFIに接続するには。

遭遇した問題

試験用に(閉じた)無線LANを用意しようとして、一般的な無線LANアクセスポイントを用意し、WiFiのSSIDは非公開とした。 LinuxのDHCPサーバを用意して、あらかじめ登録したhardware address (MAC address)のみにIPアドレスを割り振るようにした。

そこにLinux(CentOS)のマシンでWiFi経由でDHCPで接続しようとした。
1. まず、接続させたいLinuxマシンで、ifconfigとかip addr等でDHCPクライアントのMACアドレスを調べる。
2. クライアントのMACアドレスに対して、IPアドレス等を割り振るようにDHCPサーバを設定する。(ステルスSSIDに対する接続設定は、この記事を参考にした)
3. クライアントマシンで、無線LANの設定(SSID,WPA2パスフレーズ等)を設定して接続する

という手順を取ったが、3でDHCPサーバーからIPアドレス等が割り振られず、接続に失敗した。

原因

原因は、NetworkManagerのデフォルトでMACアドレスのランダム化が有効になっていたからであった。DHCPクライアントから適当なMACアドレスを使ってDHCPサーバに問い合わせるので、DHCPサーバは無効なリクエストとみなして完全無視していた。

解決策

この環境はテストのためのネットワークで外界に全く出ないので、MACアドレスを収集されるリスクは少ないので、MACアドレスのランダム化を無効にした。

実行例

参考にした記事にあるステルスSSIDへの接続方法も含めた実行例は下記. [[コネクション名]], [[インターフェース名]], [[接続先SSID]], [[WPA2パスフレーズ]]は実際に合わせる必要がある。

実行例
# nmcli c add type wifi con-name [[wlan0a]] ifname [[wlan0]] ssid [[ACTUAL-SSID-NAME]]
# nmcli con modify [[wlan0a]] wifi-sec.key-mgmt wpa-psk
# nmcli con modify [[wlan0a]] wifi-sec.psk [[ACTUAL-WPA2-PASSPHASE]]
# nmcli con modify [[wlan0a]] wifi.mac-address-randomization never
# nmcli con up [[wlan0a]]
# nmcli con show [[wlan0a]]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

オフラインで読むためにウェブサイト全体をダウンロード

どのWebサイトをダウンロードしますか?

しかし、覚えておいてください。サイトが大きいほど、ダウンロードも大きくなります。 Qiitaのような巨大なサイトをダウンロードすることはお勧めしません。使用するすべてのメディアファイルを保存するには数千MBが必要になるためです。

ダウンロードするのに最適なサイトは、テキストが多く画像が少ないサイト、および定期的に新しいページを追加したり変更したりしないサイトです。静的な情報サイト、オンライン電子ブックサイト、ダウンした場合に備えてアーカイブしたいサイトが理想的です。

オフラインで読むために個々のWebページを保存するのは簡単ですが、Webサイト全体をダウンロードしたい場合はどうでしょうか。まあ、それはあなたが思っているより簡単です!オフラインで読むためにWebサイトをダウンロードするために使用でき つの便利なツールを以下に示します。

Wgetは、HTTPおよびFTPプロトコルを介してあらゆる種類のファイルを取得できるコマンドラインユーティリティです。 WebサイトはHTTP経由で提供され、ほとんどのWebメディアファイルはHTTPまたはFTP経由でアクセスできるため、WgetはWebサイトをリッピングするための優れたツールになります。

Wget

Windows、Mac、Linuxで利用できます。

Wgetは通常、単一のファイルをダウンロードするために使用されますが、最初のページから見つかったすべてのページとファイルを再帰的にダウンロードするために使用できます。

wget -r -p https://www.joeyoder.com

ただし、一部のサイトでは、Webサイトをリッピングすると大量の帯域幅が消費される可能性があるため、実行しようとしていることを検出して防止する場合があります。これを回避するには、ユーザーエージェント文字列を使用して、Webブラウザーになりすますことができます。

wget -r -p -U Mozilla https://www.joeyoder.com

丁寧になりたい場合は、ダウンロード速度を制限し(Webサーバーの帯域幅を占有しないように)、ダウンロードとダウンロードの間で一時停止する必要があります(要求が多すぎてWebサーバーに負荷がかかりすぎないようにするため)。

wget -r -p -U Mozilla --wait = 10 --limit-rate = 35K https://www.joeyoder.com

Wgetは、ほとんどのUnixベースのシステムにバンドルされています。 Macでは、1つのHomebrewコマンドを使用してWgetをインストールできます:brew install wget(MacでHomebrewを設定する方法)。 Windowsでは、代わりにこの移植バージョンを使用する必要があります。

その他の

WebCopy

Windowsでのみ使用できます。

CyotekのWebCopyはWebサイトのURLを取得し、リンク、ページ、メディアをスキャンします。ページを見つけると、Webサイト全体が見つかるまで、より多くのリンク、ページ、メディアを再帰的に探します。次に、構成オプションを使用して、オフラインでダウンロードするパーツを決定できます。

WebCopyの興味深い点は、それぞれが独自の設定と構成を持つ複数の「プロジェクト」をセットアップできることです。これにより、多くの異なるサイトをいつでも簡単に再ダウンロードできます。

1つのプロジェクトで多くのWebサイトをコピーできるため、それらを整理された計画で使用します(例:ハイテクサイトをコピーするための「ハイテク」プロジェクト)。
WebCopyでWebサイト全体をダウンロードする方法

アプリをインストールして起動します。
[ファイル]> [新規]に移動して、新しいプロジェクトを作成します。
URLを[Webサイト]フィールドに入力します。
[フォルダを保存]フィールドを、サイトを保存する場所に変更します。
[プロジェクト]> [ルール]をいじってみてください(WebCopyルールの詳細をご覧ください)。
[ファイル]> [名前を付けて保存]に移動して、プロジェクトを保存します。
ツールバーの「ウェブサイトをコピー」をクリックして、プロセスを開始します。

コピーが完了すると、[結果]タブを使用して、個々のページやメディアファイルのステータスを確認できます。 [エラー]タブには発生した問題が表示され、[スキップ]タブにはダウンロードされなかったファイルが表示されます。

ただし、最も重要なのはサイトマップで、WebCopyによって検出されたWebサイトの完全なディレクトリ構造を示します。

Webサイトをオフラインで表示するには、ファイルエクスプローラーを開き、指定した保存フォルダーに移動します。選択したブラウザーでindex.html(または場合によってはindex.htm)を開いて、ブラウジングを開始します。

HTTrack

WinHTTRackでオフラインで読むためにWebページを取得する

Windows、Linux、Androidで利用できます。

HTTrackはWebCopyよりも知名度が高く、オープンソースであり、Windows以外のプラットフォームでも利用できるため、間違いなく優れていますが、インターフェイスは少し扱いに​​くく、多くのことが望まれます。しかし、それはうまく機能するので、それがあなたをそっとさせないでください。

WebCopyと同様に、プロジェクトベースのアプローチを使用して、複数のWebサイトをコピーし、すべてを整理しておくことができます。ダウンロードを一時停止および再開したり、古いファイルと新しいファイルを再ダウンロードしてコピーしたWebサイトを更新したりできます。
HTTrackでウェブサイトをダウンロードする方法

アプリをインストールして起動します。
[次へ]をクリックして、新しいプロジェクトの作成を開始します。
プロジェクトに名前、カテゴリ、ベースパスを付け、[次へ]をクリックします。
[アクション用にWebサイトをダウンロード]を選択し、各WebサイトのURLを[Webアドレス]ボックスに1行に1つずつ入力します。 URLをTXTファイルに保存してインポートすることもできます。これは、後で同じサイトを再ダウンロードするときに便利です。次へをクリックします。
必要に応じてパラメータを調整し、[完了]をクリックします。

すべてがダウンロードされたら、ファイルがダウンロードされた場所に移動し、ブラウザーでindex.htmlまたはindex.htmを開くことにより、通常どおりサイトを閲覧できます。

English Language Command Reference Download entire website offline

Wget

Available for Windows, Mac, and Linux.

While Wget is typically used to download single files, it can be used to recursively download all pages and files that are found through an initial page:

wget -r -p https://www.joeyoder.com

However, some sites may detect and prevent what you're trying to do because ripping a website can cost them a lot of bandwidth. To get around this, you can disguise yourself as a web browser with a user agent string:

wget -r -p -U Mozilla https://www.joeyoder.com

If you want to be polite, you should also limit your download speed (so you don't hog the web server's bandwidth) and pause between each download (so you don't overwhelm the web server with too many requests):

wget -r -p -U Mozilla --wait=10 --limit-rate=35K https://www.joeyoder.com

Wget comes bundled with most Unix-based systems. On Mac, you can install Wget using a single Homebrew command: brew install wget (how to set up Homebrew on Mac). On Windows, you'll need to use this ported version instead.

Other

WebCopy

Available for Windows only.

WebCopy by Cyotek takes a website URL and scans it for links, pages, and media. As it finds pages, it recursively looks for more links, pages, and media until the whole website is discovered. Then you can use the configuration options to decide which parts to download offline.

The interesting thing about WebCopy is you can set up multiple "projects" that each have their own settings and configurations. This makes it easy to re-download many different sites whenever you want, each one in the same exact way every time.

One project can copy many websites, so use them with an organized plan (e.g. a "Tech" project for copying tech sites).
How to Download an Entire Website With WebCopy

Install and launch the app.
Navigate to File > New to create a new project.
Type the URL into the Website field.
Change the Save folder field to where you want the site saved.
Play around with Project > Rules… (learn more about WebCopy Rules).
Navigate to File > Save As… to save the project.
Click Copy Website in the toolbar to start the process.

Once the copying is done, you can use the Results tab to see the status of each individual page and/or media file. The Errors tab shows any problems that may have occurred and the Skipped tab shows files that weren't downloaded.

But most important is the Sitemap, which shows the full directory structure of the website as discovered by WebCopy.

To view the website offline, open File Explorer and navigate to the save folder you designated. Open the index.html (or sometimes index.htm) in your browser of choice to start browsing.

HTTrack

Grab a webpage for offline reading with WinHTTRack

Available for Windows, Linux, and Android.

HTTrack is more known than WebCopy, and is arguably better because it's open source and available on platforms other than Windows, but the interface is a bit clunky and leaves much to be desired. However, it works well so don't let that turn you away.

Like WebCopy, it uses a project-based approach that lets you copy multiple websites and keep them all organized. You can pause and resume downloads, and you can update copied websites by re-downloading old and new files.
How to Download a Website With HTTrack

Install and launch the app.
Click Next to begin creating a new project.
Give the project a name, category, base path, then click Next.
Select Download web site(s) for Action, then type each website's URL in the Web Addresses box, one URL per line. You can also store URLs in a TXT file and import it, which is convenient when you want to re-download the same sites later. Click Next.
Adjust parameters if you want, then click Finish.

Once everything is downloaded, you can browse the site like normal by going to where the files were downloaded and opening the index.html or index.htm in a browser.

credit to original Author

Joel Lee (1604 Articles Published)

ソースに直接日本語
https://tinyurl.com/website-backup-wget-japanese

元の作者へのクレジット

ジョエル・リー(1604の記事が公開されています)

ソースに直接日本語
https://tinyurl.com/website-backup-wget-japanese

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Piで無線LANイーサネットコンバータ兼簡易ルータを作る

TL;DR

  • Raspberry Piの無線LAN(wlan0)と有線LAN(eth0)を使ってルータを構築します.
  • wlan0をWAN側として上流の無線APと接続し,eth0をLAN側として配下のPCらにIPアドレスを配布します.
    • イメージ的にはルータ機能付きの無線LAN中継機です.

構築環境

  • 無線AP:DHCPによるアドレス配布が行われる既存の無線APを想定しています.
  • Raspberry Pi:無線APとWiFi接続しDHCPサーバからアドレスを取得しています(wlan0).LAN側(eth0)で192.168.21.0/24のIPセグメントを設定し,LAN配下のPCにDHCPでアドレスを配布しています.ゲートウェイとして機能させ,LAN側(eth0)から受け取ったリクエストをWAN側(wlan0)にフォワードします.
  • PC:イーサネットでRaspberry Piと接続し,DHCPによるIPアドレスを取得しています.

2020-09-15_blockdiag (2).png

Raspberry Piは,Raspberry Pi 2を利用しています.無線LAN接続のためにUSB無線アダプタを利用していますが,後継機ならば標準搭載なので必要ありません.2はイーサネット接続が100BASE-Tなので,可能ならば最新の4をおすすめします.OSはRaspbian Liteをインストールしています.

構築

Raspberry Piの初期セットアップは省略します.具体的にはsshdとか初期ユーザとかです.
本稿ではvimを使っていますが,なんでもいいです.

既に記載されていますが,無線LAN側をwlan0,有線LAN側をeth0に設定しています(デフォルト).

無線設定(wlan0)

wpa_supplicantを使って無線接続設定を行います.SSIDはテキトーに検索するなりしてください.

sudo iw dev wlan0 scan | grep SSID

以下のコマンドでwpa_supplicant.confにネットワーク設定を追記します.

sudo sh -c 'wpa_passphrase <SSID> <Passphrase> >> /etc/wpa_supplicant/wpa_supplicant.conf'

生パスワードがコメントアウトで記載されているため,確認後に削除することをおすすめします.

/etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="SSID"
        #psk="Passphrase" # 消す
        psk=xxxxxxxxxxx
}

wpa_supplicantで無線APに接続してください.systemd経由で起動できる気がします.特段設定せずに繋がったので,環境によるかもしれません.APからDHCPでIPアドレスが取得できていればよいです.

sudo systemctl start wpa_supplicant.service
sudo systemctl enable wpa_supplicant.service

有線設定(eth0)

eth0側でIPセグメントを設定します.
Raspberry Piには192.168.21.1を割り当てています.

/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.21.1/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=0.0.0.0
static domain_name_servers=0.0.0.0

IPマスカレード設定

LAN側(eth0)からのパケットをWAN側(wlan0)に流すよう設定します.設定後は反映のために一度再起動してください.
ここでは簡易的に設定していますが,本番利用の際にはセキュリティ等を考慮した適切な設定を検討してください.

/etc/rc.local
# 追記する
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

exit 0

DHCPサーバのインストールと設定

DHCPサーバを構築します.以下のソフトウェアをインストールします.

sudo apt install -y isc-dhcp-server dnsmasq

コンフィグを設定します.不要な設定をコメントアウトし,必要な設定のコメントアウトを外します.
その後,DHCP配布するアドレスの設定をしてください.今回は192.168.21.2から192.168.21.99までの範囲でアドレスを配布します.

/etc/dhcp/dhcpd.conf
#option domain-name "example.org"; #コメントアウトする
#option domain-name-servers ns1.example.org, ns2.example.org; #コメントアウトする

authoritative; #コメントアウトを外す

# 追記する
subnet 192.168.21.0 netmask 255.255.255.0 {
        range 192.168.21.2 192.168.21.99;
        option routers 192.168.21.1;
        option domain-name-servers 192.168.21.1;
        option broadcast-address 192.168.21.255;
        ignore declines;
}

インターフェースと紐づけます.LAN側(eth0)のインターフェースを記載してください.

/etc/default/isc-dhcp-server
INTERFACESv4="eth0"
#INTERFACESv6=""

DHCPサーバを起動してください.eth0側がリンクアップしていないと起動に失敗する気がします.この時点でRaspberry PiとPCを接続しておくとよいです.

sudo systemctl start isc-dhcp-server.service
sudo systemctl enable isc-dhcp-server.service

LAN配下のPCにアドレスが割り振られて,インターネット接続可能なら成功です.お疲れ様でした.

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リポジトリ用いたパッケージのインストール方法

パッケージインストールコマンド

serverにパッケージをインストールする方法は2種類あります。
一つはyumコマンドを用いるやり方で、もう一つはrpmコマンドを用いた方法です。
①yum使用
yumは.repoの中にあるリポジトリの中経由でパッケージをインストールします。

# yum install [パッケージ名]

②rpm使用

# rpm -ivh [パッケージ名] 
 ※ivhはパッケージの進捗みながら新規でインストールする時
# rpm -Uvh [パッケージ名]
 ※Uvhはパッケージのバージョンアップを実施する時

リポジトリとは

パッケージをインストールする時に使用するもので、箱のようなものです。
yumでインストールする時の仕組が以下に記載されているので、
参考にしてください。

参考リンク:yum installで学ぶ!yumの仕組み

https://tech-blog.rakus.co.jp/entry/2017/12/14/105052

リポジトリを作成してインストールしたい時

上記のような仕組でパッケージを普段インストールしているが、
外部接続が出来ない時やリポジトリが存在しない時などはyumでインストール出来ないのでリポジトリから作成する必要があります。
以下リポジトリの作成方法です。

具体的なリポジトリ作成手順

①cdromとしてマウント場所を作成する

# mkdir -p /mnt/cdrom

②マウントする

# mount /dev/cdrom /mnt/cdrom

③.repoファイルを作成する

# vi /etc/yum.repo.d/local_dvd.repo

[local_dvd]
name=RHEL7 test
baseurl=file:///mnt/cdrom/
enabled=1
gpgcheck=0
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-RHEL7

④.repoが登録されていることを確認する

# yum repolist all

⑤レポジトリをマウントする

# mount -t iso9660 /dev/cdrom /media

⑥yumでパッケージをインストールする

# yum install [パッケージ名]

以上がインストール時の流れでした。
参考にさせていただいたものは以下に記載します。
最後までご覧くださり、ありがとうございました!

引用

ローカルメディアなどyumのリポジトリとして登録

https://shimi-dai.com/register-yum-with-localmedia/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EBSボリューム追加方法

前提条件

環境:Amazon Linux AMI release 2015.09
やりたいこと:バックアップボリュームへ50GB追加

EBSボリュームを追加するには?

AWSコンソールで追加して追加したボリュームを割り当てると良い。

具体的な手順

①teratermで対象環境へログインしroot権限になる

# sudo -s

②以下コマンドで現状のボリュームを把握する

# lsblk
# df -h

③AWSコンソール上で対象仮想マシンのボリュームを変更する

④teratermで対象環境へ再度ログインし、root権限になる

# sudo -s

⑤サイズ変更を実施する

# resize2fs /dev/xvda 
            [変更するボリューム名]

⑥サイズが変更されたことを確認する

# lsblk
# df -h

以上がEBSのボリューム拡張方法でした。

お役に立てれば幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

sudoは止めよう!

はじめに

sudoとはrootでない一般ユーザーがsu commandを実行しなくても1 commandだけroot権限で実行できる便利なcommandです。
しかし危険です。理由を説明してsudoを無効にする方法。sudoを無効にした場合代替オペレーションを解説します。

sudoの挙動について理解し、範囲を限定して設定している方には馬の耳に念仏なので読み飛ばしてください。

2段階認証方式

Loginにはpasswordが必要です。sshできるLinuxマシンはpasswd一枚で外界から保護されてます。でもpasswdはとっても脆弱です。どんなpasswdを設定しようと現代の技術をもってすれば必ずクラックされます。
しかし2段階認証ではどうでしょう。passwdをクラックしてから実際にログインして、もう一度別のパスワードでsuしなければいけない認証です。
建物の入り口のカギを開け、更に制御室の入り口にもドアがあって別の鍵がかかっている状態を想像するとわかりやすいと思います。

root loginを禁止する

security確保するため大抵は外部からrootがssh loginできないように設定します。

/etc/ssh/sshd_config:
PermitRootLogin no

の設定がそれです。

ドア一枚に戻す

よくできたシステムですね。でも考えてもて下さい、sudoを実行するときrootのpasswdは必要ですか?要りませんね。

/etc/sudoers.d/*
/etc/sudoers

に書いてあるuserはpasswdなしにsudoを実行できます。
2重だった入り口のドアを1枚はずしてしまったのと同じです。sudoersの設定は、PermitRootLogin yesにしておくのと同程度、systemを弱くしてしまいます。

安全対策

2重ドアに戻すのは簡単です。sudoersに一人もユーザーを設定しなければよいのです。
そんなことしたら
「マシン管理ができない!」
悲鳴が聞こえそうですね。
私がunixを覚えたころ、sudoはありませんでした。sudoは後からできた危険極まりない悪commandで、なくてもsystem管理には何ら支障はありません。

sudoをはずす手段

まずroot passwdを変えます。sudoだけ使っていればroot passwdを知らないってこともあるのではないでしょうか?

sudo passwd root

sudo最後のお仕事です。まさか"1234"なんて設定しませんよね。しっかり8文字以上英文字記号数字の混じったのをお願いします。金庫の鍵なんです。

su
cd /etc/sudoers.d
rm *

マシン管理の代替オペレーション

今既にやりました。

su
Password: <root_pass>

と、rootになる必要があるときだけrootになればよいのです。

その他のトラップ

マシンの初期設定は簡単に塞げる危険な罠があります。

  • pi, demo, guest, test, nanoといった簡単に推測できるuserは消した方が良いです。
  • ftp, sshdのような存在は必要だが、loginしないuserは
su
vipw
ftp:x:1005:1005:,,,:/home/ftp:/bin/false

のようにlogin shellを/bin/falseに設定します。

終わりに

流行の小さなSBCでも、あまり流行ってない小さな小さなSBCでも、ネットに繋いだらクラッカーはやってきます。
小さいから対策も小さくて済む『わけがない!』のです。しっかり対策してください。

Raspberry Pi入門本を見て驚きました。
どれもがpiでloginしてsudoで設定をしているのです。
最初にすべきはたとえわからなくたって

sudo passwd root
su
adduser your_name
deluser pi

です。
そのままネットワークにつなげられるデバイスです。
ネットワークセキュリティを考えて著作していただきたい。
初心者は書いてある通りに操作するのです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux: IPアドレスを固定したいときに見る Netplan設定ガイド

趣味でLinuxを触るだけの筆者がターミナルからIPアドレスを固定しようとしたら、思いのほか苦戦したために書きました。

今回筆者はWi-Fi環境で設定をしましたが、有線接続との違いにも配慮しています。

注意点

  • 筆者にネットワークまわりの知識は一切ありません。そのためこの記事にも重大な誤りや欠陥があるかもしれません。
  • 筆者の環境はZorin OS 15.3です。Ubuntuベースであり共通点が多いOSなので、おそらくUbuntuでも同じように設定できると思います。が、検証はしていません。
  • GUIからも比較的簡単に設定出来ます。参考リンク 1
    • 今回はコマンドを用いて設定しています。
  • 上にも書きましたがWi-Fi環境での設定ファイルの書き方がメインになります。有線での詳しい設定方法は参考リンク 4,6がおすすめです。

手順

  1. ネットワーク設定の確認
  2. 設定ファイルの作成
  3. 設定の適用

1. ネットワーク設定の確認

IPアドレスを固定するための準備です。

1-1. IPアドレス・インターフェース名を調べる
1-2. デフォルトゲートウェイのアドレスを調べる
1-3. DNSアドレスを調べる

1-1. IPアドレス・インターフェース名を調べる

どんなIPアドレスに固定するか。わかりやすいのがいいでしょう。他の機器で使われていないものであればなんでもいいです。
今どんなIPアドレスかは次のコマンドで確認出来ます。

$ ip address

どのインターフェースが使われているかも確認しましょう。(見分け方はよくわからないです.. 他より行数が多いやつかも..)

ちなみに特定のインターフェースだけに出力をしぼることもできます。

$ ip address show インターフェース名

1-2. デフォルトゲートウェイのアドレスを調べる

ip routeで確認できます。grepでdefaultのものだけを出力するには以下のとおりです。

$ ip route | grep default

1-3. DNSアドレスを調べる

/etc/resolv.confを直接参照しろという記述もみかけますがこれは間違いだそうです。そもそもこのファイルはsystemd-resolvedにより生成されるファイルであり、詳細がしりたいときはsystemd-resolved --statusを使うらしいです。参考2

$ systemd-resolved --status

上で調べたインターフェースの項目中のDNS Serversにある数値が目的のアドレスです。

2. 設定ファイルの作成

/etc/netplan/に作成します。ファイル名は99_config.yamlです。既存のXX_config.yamlを編集するのは非推奨だそうです。参考3,4

/etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  wifis:
    インターフェース名:
      dhcp4: no
      dhcp6: no
      addresses:
        - 192.168.XXX.XXX/24
      gateway4: 192.168.XXX.XXX
      nameservers:
        addresses:
          - 192.168.XXX.XXX
      access-points:
        "accessPoint1":
          password: "password"
        "accessPoint2":
          password: "password"

NetplanはバックエンドにnetworkdとNetwork Managerの2つをサポートしているそうです。調べているときはnetworkdを使っているサイトが多かったですが、もしNetwork Managerをつかう場合はrenderer: NetworkManagerのようにします。

4行目をwifis:としていますが有線接続の場合はethernets:としてください。

インターフェース名は1-1. IPアドレス・インターフェース名を調べるのものにしてください。

9行目- 192.168.XXX.XXX/24は固定したいIPアドレスにしてください。

10行目gateway4: 192.168.XXX.XXX1-2. デフォルトゲートウェイのアドレスを調べるのものにしてください。

13行目nameservers:>addresses:- 192.168.XXX.XXX1-3. DNSアドレスを調べるのものにしてください。

14行目access-points:以降はWi-Fi接続だけの設定になります。注意点としてアクセスポイント名(SSID)とパスワードはダブルクオーテーションで囲みましょう。アクセスポイントは1つでも3つ以上でも大丈夫です。

3. 設定の適用

いきなり設定を適用するのは怖いのでnetplanのtryコマンドを使いましょう。一時的に設定を適用したあと、Enterキーが押されなければ120秒で自動的にもとの設定に戻してくれます。--timeoutオプションで任意の秒数に変更できます。参考5

$ sudo netplan try --timeout 180

この間にネットワーク接続をし直してからネットの検索などでちゃんとつながるか試しましょう。また実際にIPアドレスが固定されているか別ターミナルを立ち上げてip addressで確認するのもいいでしょう。

もし成功していたらEnterキーを押して完了です!

タイムアウトしてしまってもapplyコマンドで適用できます。

$ sudo netplan apply

最後に

そもそも筆者はネットワークの知識がなさすぎて用語を調べるところからでしたが、検索にヒットするWebサイトが古かったり、サイトごとに方法がバラついていたためにとても苦労しました。まず"Netplanを使う"というところまでたどり着くのにも時間がかかりました。
最初に99_config.yamlを書いたときはtryコマンドを知らず、そのままapplyしてしまいました。結果繋がらなくなり絶望しました... 記述ミスがあったのですが最初は気づかず、設定ファイルを移動したりPC再起動したり焦っていろいろやりました。ミスを修正してからもすぐには直らず「明日OSを入れ直すしかない...」と落ち込んだのがこれを書く前夜のことです。今朝になってPCを起動してみたらWi-Fiが繋がっていた(IPアドレスの固定は出来ていませんでしたが)のは嬉しかったですが理由がわからずひたすら困惑しました。
その後Netplanの公式(参考6)をみて設定したところ固定に成功しました。やっぱ公式は偉大ですね。
有線やもっと複雑なネット環境の方には参考4と一緒におすすめします。

拙い記事ですが最後まで読んでいただきありがとうございました。

参考リンク

  1. Ubuntu 18.04 LTSで固定IPアドレスを設定する方法【デスクトップ編】
  2. networking - What DNS servers am I using? - Unix & Linux Stack Exchange
  3. 【Ubuntu】 /etc/netplan/50-cloud-init.yamlを編集するの止めろ - Qiita
  4. Network - Configuration | Server documentation | Ubuntu
  5. Ubuntu 20.04 LTSで固定IPアドレスの設定 - Qiita
  6. Netplan | Backend-agnostic network configuration in YAML
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む