ダイキのアプリ開発ナレッジ

アプリ開発のナレッジを掲載します

Raspberry Pi 4 Model B 初期設定(リモート接続~セキュリティ強化まで)

ラズパイの初期導入、特にセキュリティ周りは毎回どうやっていたか忘れるので、手順を残しておきたいと思います


手順概要


参考記事

初心者向!Raspberry Pi 最低限のセキュリティ設定【所要時間 30分】 - Qiita
ラズパイでやらなければいけない4つのセキュリティ対策! - Qiita
RaspberryPi 3 デフォルトユーザpiの変更 | そう備忘録
Raspberry Piに安全にSSHログインできる公開鍵認証の設定方法 - HomeThink



1. OSインストール

Raspbianをインストールします。
Raspbianを書き込んだmicroSDをラズパイに差し込んで電源を入れれば自動的にインストールが始まります

※このあたりは公式サイトや他のブログの良い記事がたくさん解説してくれているので、割愛します
公式のセットアップ手順
Setting up your Raspberry Pi - Introduction | Raspberry Pi Projects


なお、私は公式サイトからRaspbian(Raspbian Buster with desktop and recommended software Version:February 2020)をダウンロードして、balenaEtcherでmicroSDに書き込む方法を使いました


2. インストール直後の設定

インストールが成功するとRaspbianのデスクトップが表示され、同時に「Welcome to Raspberry Pi」画面が出現します

案内に従って、「ロケーションの設定」と「パスワードの設定」と「ソフトウェアアップデート」をします。

※これらの設定は後からでも出来ます
※最低限パスワードは設定しましょう

たまに、「モニターの枠黒くなってない? 修正しよっか?」みたいな案内も出てくるので、当てはまる場合はチェックボックスにチェックを入れます。

Wi-Fiの設定」もありますが、有線でつないでいる場合は不要です

ラズベリーパイはWi-Fiのパスワードを平文で保持するので、個人的には有線でつないだ方がいいと思っています

設定が終了すると再起動が促されるので、お好みで再起動する


3. リモート接続ラズパイ側設定(SSHVNC

今後ラズパイをリモートで操作するために、ラズベリーパイの設定をいじります
リモートで操作する予定なんてないよとかいう方は適宜読み飛ばしてください

3.1 リモート接続準備

「Menu > 設定 > Raspberry Pi の設定」を選択します

「システム」タブのブートをCLIに変更
「システム」タブの自動ログインを無効
GUIを起動しているとメモリを消費するらしいです
f:id:shinseidaiki:20200510200904p:plain

「インターフェース」タブのSSHVNCを有効にします
f:id:shinseidaiki:20200510200934p:plain

3.2 xrdpのインストール

今回VNCにおいて、クライアント側はWindowsリモートデスクトップ接続を使用するつもりなので、必要なアプリケーションをラズパイ側にインストールします
※どうやらVNCは平文で、RDPは暗号で通信を行っているようなので、ラズパイのGUIをリモート操作したい場合はリモートデスクトップに軍配が上がるといえそうですね

まず、ターミナルを開きます

とりあえず、おまじない

sudo apt-get update 
sudo apt-get upgrade

xrdpのインストール

sudo apt-get install xrdp 

これでWindowsリモートデスクトップ接続ができるようになります

その後、リモート接続するためにifconfig等でipアドレスを調べて控えておく

ifconfig

Windows端末からラズパイにリモートデスクトップ接続確認をして、操作が出来ればOK
f:id:shinseidaiki:20200510204108p:plain

※ちなみに、Raspberry Pi の設定においてScreen Bankingを有効にしないと接続に成功しても操作を受け付けなくなる(フリーズする)ようです。私はここでかなり悩みました

一度、再起動して。次はユーザー設定を行っていきます


4. ユーザー設定

ここからの設定はリモート端末からラズパイを操作している前提で話します

rootユーザーやpiユーザーは初期のユーザー名とパスワードが公開されちゃっているのでデフォルト状態で放っておくのは脆弱性のカタマリといえるでしょう

他の記事を見る限り、この対処法としては、rootユーザーはリモート端末から操作できないユーザーにして、piユーザーはユーザー名を変更するというのが一般的のようです。

なので、この記事でもその方針で行きます

まず、TeraTermなど適当なソフトウェアを使用して、クライアント側からラズパイにSSHで接続します


4-1. rootユーザー設定
rootユーザーはパスワードが設定されていないので、設定します

sudo passwd root


SSHでのrootのログインを禁止するために、/etc/ssh/sshd_configを編集します

sudo nano /etc/ssh/sshd_config

で、編集画面を開き、

PermitRootLogin no

を追記して、保存します。rootユーザーに関しては以上です。

4-2. 仮ユーザー設定

他のユーザーでないとユーザー名は変更できないようなので、仮ユーザーtmpを作成します

sudo adduser tmp

パスワードとその他情報の設定を促されるので入力します


tmpユーザーに管理者権限を付与

sudo gpasswd -a tmp sudo

tmpがsudoグループに追加されたのを確認して、再起動

sudo reboot

※piユーザーの自動ログインを無効にしていない場合は無効にします

4-3. ユーザー名変更

再起動後、tmpユーザーでログインします

whoコマンドでログインユーザーを確認すると

who

ユーザー名 接続端末 ログイン時刻(接続端末IP)
tmp pts/0 yyyy-MM-dd hh:mm (192.168.x.xx)
が表示されるので、ユーザー名にpiユーザーがいないことを確認します

piユーザがいないことが確認出来たら、ユーザー名を変更します
※newpiは任意のユーザー名

sudo usermod -l newpi pi

tmpユーザーはsudoが初めてなので、sudo初回実行時のメッセージが出て来ると思います
よく読んでからパスワードを入力しましょう

ユーザーのホームディレクトリはまだ pi のままなので変更します

sudo usermod -d /home/newpi -m newpi

グループもpiからnewpiに変更します

sudo groupmod -n newpi pi

これでpiユーザーの変更が出来ました

後は再起動して、tmpユーザーを削除すればユーザー設定は完了です

4-4. 仮ユーザーの削除

tmpユーザーを残したままだと問題があるので、削除します

再起動後、newpiでログインします

userdelコマンドでホームディレクトリごとユーザーを削除します

sudo userdel -r tmp

※ところで -r はホームディレクトリだけじゃなくメールスループも削除するオプションのようですね

これでユーザー設定は完了です


5. ネットワーク設定

基本的にラズパイはリモートでいじることが多いのでネットワークの設定を強化します


5.1 IPアドレスの固定(非推奨)
デフォルトだと動的にIPアドレスが変更されるので、IPを固定すると便利だったりします
※動的IPでも変更までの期間がわりと長いので、固定する必要性は微妙だったりもします

固定IPを割り当てる場合は/etc/dhcpcd.confを編集する

sudo nano /etc/dhcpcd.conf

で設定ファイルを開き、以下を追記する(有線の場合)

interface eth0
static ip_address=192.168.x.xx/24
static routers=192.168.x.x
static domain_name_servers=192.168.x.x

再起動後、固定したIPでつながればOK
※無線の場合はinterface eth0をinterface wlan0に変更

5.1 ホスト名の設定

IPアドレス剥き出しだと管理上煩雑になるので、ホスト名でアクセスできるようにします
といっても設定はかなり簡単です。
GUIであれば「Menu > 設定 > Raspberry Pi の設定」
CUIであれば 「raspi-config > 2 NetWork Options > N1 Hostname」 で設定できます

初期のホスト名は raspberrypiとなっているので、好きな名前に書き換える


GUIでの設定の様子
f:id:shinseidaiki:20200524215308p:plain

CUIでの設定
f:id:shinseidaiki:20200524215640p:plain

再起動後、設定が反映されるので、ホスト名を使ってアクセスできるか確かめる

リモートデスクトップ接続でのアクセス確認
f:id:shinseidaiki:20200524220350p:plain

他の記事だと .local をケツに付ける必要があると書いているものがありますが、
今は .local 抜きでも接続できるようになっているみたいですね

5.2. 公開鍵認証

SSHは公開鍵認証の仕組みがあるので、決まった端末からしかラズパイに接続出来ないようにしてセキュリティを上げることにします

秘密鍵と公開鍵はいろいろな方法があるようですが、今回はTeraTermの機能で作ることにします。

[クライアント側操作]
①クライアントで起動しているTeraTermのメニューより 設定 > SSH鍵生成 を選択

RSAとビット数が2048であることを確認し、生成ボタンをクリック

パスフレーズを登録する(ユーザーパスワードとは別物であることに注意)

④公開鍵と秘密鍵をそれぞれクライアント端末の任意の場所に保存
秘密鍵は大事に保管すること

[サーバー側操作]
⑤ホームディレクトリに /.ssh ディレクトリの作成し、パーミッションを変更

cd ~/
mkdir .ssh
chmod 700 .ssh

⑥公開鍵の内容を公開鍵認証ファイルを作成して追記します
※他の端末からラズパイが受け取る公開鍵のデータは authorized_keys という名称のファイルで一括保管する仕様になっているみたいです

nano ~/.ssh/authorized_keys

クライアント側で保存している公開鍵ファイル”id_rsa.pub”をテキストエディタで開き、上記コマンドで開いた画面にコピー&ペーストします
TeraTerm上で右クリックすると貼り付けられます

⑦公開鍵認証ファイルのパーミッションを変更します

chmod 600 ~/.ssh/authorized_keys

公開鍵認証でラズパイに接続確認して、接続できればOK

TeraTermにおいて公開鍵認証でSSHする方法
SSH認証画面において、パスフレーズは③で設定したものを入力
認証方式: RSA/DSA/ECDSA/ED25519鍵を使う を選択
秘密鍵の格納場所を選択

5.3 パスワード認証無効化&ポート番号変更

最後の仕上げとして、秘密鍵を持っている端末しかSSH接続が出来なくなるようにパスワード認証を無効化します

また、ポート番号をデフォルトの22から別の値に変更することでよりセキュリティを強化します

/etc/ssh/sshd_configの設定をいじります

sudo nano /etc/ssh/sshd_config

上記コマンドで開いた画面において以下を追記します

#ポート番号の変更
Port xxxxx (xxxxxには0~65535番目の任意の数値)

#鍵認証の有効化
PubkeyAuthentication yes

#パスワード認証を無効化
PasswordAuthentication no

変更が終わったら、SSHを再起動

sudo service ssh restart

設定が反映されていればOK。

以上でラズパイの初期設定は終わりです


終わりに

とりあえず、これで一通りの設定は完了です

次は、microSDが壊れた時のためのバックアップをとりたいと思います


メモ

リモートデスクトップ接続するにはScreen Bankingを有効にしないといけない