セットアップ
先日、ラズパイでもCentOSを動かしたいと思ってセットアップをしました(記事はこちら)が、安定性に難ありだということが分かったので素直にRaspberry Pi OSでセットアップをします。取り上げるのはSSH通信とVNCビュアーでの接続を行い、ファイアウォールを構築するまでです。
まずはOSイメージのインストール
Raspberry Pi imagerを使用します。選択するのは「Raspberry Pi OS(other)」内にある「Raspberry Pi OS Full(32bit)」です。Fullにした理由は、はじめに標準でインストールした場合にVNCの接続がうまく行きませんでした。悩むのが面倒だったのでFullで再セットアップしました。microSDへの書き込みはネットワーク環境が弱いせいか2時間以上かかったように思います。
ラズパイの初回起動
OSイメージを書き込んだmicroSDをラズパイにセットし、キーボード、ディスプレイ、マウスを接続します。有線LANを使用する場合はそれも接続しておきます。電源を入れてしばらく待つと、GUIにて地域の設定、ネットワーク設定等を行う画面が出てくるので指示に従って設定します。設定後、OSとアプリのアップデートを促す画面が出るため指示通りに行います(20分くらいかかりました)。アップデート後は再起動が必要なので、画面の指示通りに再起動まで行います。
SSH通信とVNCの下準備
遠隔での操作を可能にするためにSSH通信を設定します。設定変更していない状態では起動時に"pi"というユーザーで自動ログインしています。GUIにて"設定">"Raspberry Piの設定"を選択します。通常はスーパーユーザーの権限が必要な作業ですがデフォルトで"pi"はその権限があります。
設定画面が開くと、"システム"タブにて"パスワード変更"をクリックして"pi"のパスワード設定を行います。次に自動ログインは"無効"にしておきます。
次に"インターフェイス"タブにて"SSH"と"VNC"を有効にします。
次にVNCサーバーの初期設定をしておきます。"VNCマーク"を右クリックして"Option...”を選択します。"Authentication"を"VNC password"に変更して"Apply"を選択するとパスワードを求められるのでVNC用のパスワードを設定します。設定後OKで閉じます。
次にネットワークを固定IP設定に変更します。GUIのネットワーク接続マークを右クリックし出てきたメニューの中で"Wireless&Wired Network Settings"を選択します。
※DHCP無しで運用する場合のみ設定。DHCPサーバー側でMACアドレスを登録し、固定IPを割り振る場合は設定不要
インターフェイスを選択し"Automatically configure empty options"のチェックを外し、"Disable IPv6"にチェックを入れます。任意のアドレスを入力します。適用を押して設定完了です。
試しにターミナルソフトからログインしてみます。TeraTarmを開いて、ホスト名にIPアドレスを入力し、ポートは"22"のままで接続します。ユーザーのログイン画面が出てきたらユーザー名"pi"で設定したパスワードでログインできます。接続が拒否された場合は設定ミスがあります。
SSHでのログインに成功したら、GUI側はログアウトしておきます。以降の作業はSSH通信で遠隔にて設定していきます。
ユーザー・パスワード設定
初回起動時は"pi"というユーザーでログインしていますが、セキュリティ上良くないのでパスワード設定と新規ユーザー設定を行います。まず、ターミナルを開きrootパスワードを設定します。
pi@raspberrypi:~ $ sudo passwd root #rootパスワード変更
次に新しいユーザーを作成します。新ユーザーの権限は"pi"のものをコピーします。
pi@raspberrypi:~ $ sudo adduser hoge #hogeユーザーを作成 ##パスワード等色々入力## pi@raspberrypi:~ $ groups pi #piユーザーの権限確認 pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio lpadmin pi@raspberrypi:~ $ sudo usermod -G pi,adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,lpadmin hoge #hogeの権限設定 pi@raspberrypi:~ $ sudo cp -r /home/pi/* /home/hoge #piのホームディレクトリをhogeにコピー
以上で"pi"での作業は終了です。"exit"して"pi"をログアウトします。
次に新しく作成した"hoge"ユーザーでログインして"pi"のユーザー名変更を行います。ログイン後はとりあえずrootになって作業を行います。
hoge@raspberrypi:~ $ su root #rootになる root@raspberrypi:~ # usermod -l hoge_pi pi #piをhoge_piに変更 root@raspberrypi:~ # usermod -d /home/hoge_pi -m hoge_pi #hoge_piのホームディレクトリ変更 root@raspberrypi:~ # groupmod -n hoge_pi pi #piグループ名をhoge_piに変更 root@raspberrypi:~ # groupmod -g sudo hoge #hogeをsudoに追加 root@raspberrypi:~ # exit #rootでの作業終了
次にsshの設定を変更します。hoge_pi(旧pi)ユーザーとrootログインは禁止にします。
hoge@raspberrypi:~ $ sudo vim /etc/ssh/sshd_config ... PermitRootLogin no #追加 rootログイン禁止 ... PasswordAuthentication yes #変更 パスワードログイン許可 ... DenyUsers ALL #追加 全ユーザーログイン禁止 AllowUsers hoge_pi #追加 hoge_piユーザー許可
これで再起動(sudo systemctl restart sshでも可)すればhoge_piユーザー以外はssh接続が拒否されます。
VNCサーバーの設定
特に用途は無いので殺しておいても良い機能ですが、一応設定しておきます。下準備の段階で接続自体は行えるはずですが、デフォルト設定ではラズパイ側にディスプレイ接続をしなければ画面表示が出来ないので、これを変更します。
hoge@raspberrypi:~ $ sudo vi /boot/config.txt ... hdmi_force_hotplug=1 #コメントアウト削除 ...
これで再起動後にVNCビュアーで接続すると、画面表示が出来るはずです。
ファイアウォールの設定
Raspberry Pi OSはデフォルトではファイアウォールが入ってないので追加しセキュリティ対策をしておきます。とりあえずローカルエリアからのみSSHとVNCを接続可能とします。
ufwをインストール
hoge@raspberrypi:~ $ sudo apt install ufw #ufwをインストール hoge@raspberrypi:~ $ sudo ufw default deny #デフォルト設定を拒否にする hoge@raspberrypi:~ $ sudo ufw allow from 192.168.***.0/24 to any port 22 #22番ポートはローカルエリアのみ許可 hoge@raspberrypi:~ $ sudo ufw allow from 192.168.***.0/24 to any port #5900番ポートはローカルエリアのみ許可 hoge@raspberrypi:~ $ sudo ufw status numbered #設定を確認 [sudo] hoge のパスワード: Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 192.168.***.0/24 [ 2] 5900 ALLOW IN 192.168.***.0/24 hoge@raspberrypi:~ $ sudo ufw reload #設定に問題が無ければ変更を反映