VPNサーバ構築(3) Raspberry Piのユーザ名変更と公開鍵認証の設定
初期設定の流れ
初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)
- 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。
- 2段階目ではインターネットに接続し、ファイアフォールの設定やパッケージの自動更新設定、メール通知設定、LINE通知設定などを行う。
前回の記事で、第1段階目のOSのインストール、Wi-FiやBluetooth、IPv6機能の無効化は完了しているため、本記事では第1段階目の続きとして、ユーザ名の変更と公開鍵認証の設定を行う。
ユーザ名を変更する
初期設定のユーザ名 piのまま使用することはセキュリティ上良くないといわれているため、ユーザ名を変更する。piとしてログインしたままpiのユーザ名を変更することはできないため、一時的にユーザを追加する。
sudo useradd -M tmp
tmpユーザでsudoを使用するためにtmpユーザをsudoグループに追加し、パスワードを設定する。
sudo gpasswd -a tmp sudo
sudo passwd tmp
ここで一旦piユーザからログアウトし、
exit
tmpユーザでssh接続する。
ssh -l tmp 192.168.77.3
piユーザのユーザ名を任意の名前(ここではexample)に変更し、またホームディレクトリもユーザ名に合わせて変更する。
sudo usermod -l example pi
sudo usermod -d /home/example -m example
さらにpiグループをexampleグループに変更し、ログアウトする。
sudo groupmod -n example pi
exit
これでpiユーザからexampleユーザへの変更が完了した。exampleユーザでssh接続し、変更のために使用したtmpユーザを削除する。
sudo userdel -r tmp
最後に、このままではexampleユーザのパスワードがデフォルトのままのため、任意のものに変更する。
sudo passwd example
sshを公開鍵認証に変更
よりセキュリティを向上させるため、sshの認証方式をパスワード認証から公開鍵認証へと変更する。
秘密鍵と公開鍵の作成
鍵の作成はssh接続元のPC上(今回はWindows 10)で行う。誤ってRaspberry Pi上で作成してしまった場合は、鍵(id_rsaとid_rsa.pub)を削除する。
コマンドプロンプトで下記を実行する。
ssh-keygen -t rsa -b 4096
鍵の生成場所を聞かれるが、そのままEnterでデフォルトを選択する。
Enter file in which to save the key (C:\Users\[ユーザ名]\.ssh\id_rsa):
パスワードの設定を求められるため好きなパスワードを入力。これで上記フォルダにid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成される。
公開鍵をRaspberry Piに送信
今回はsshを利用し鍵をRaspberry Piに送信する。そのため、この作業は鍵を生成したPCとRaspberry Piが同一ネットワーク上にいる必要がある。
まず、Raspberry Pi上でホームディレクトリの直下に.sshフォルダを作成する。(sudo mkdirとすると権利関係でうまくいかないらしい。。)
mkdir ~/.ssh
次に鍵を生成したPC上で、生成された公開鍵があるディレクトリに移動し、下記コマンドを実施してssh通信で鍵を送信する。
cd C:\Users\[ユーザ名]\.ssh
scp -P [ポート番号] id_rsa.pub [Raspberry Piのユーザ名]@[Raspberry PiのIPアドレス]:/home/[Raspberry Piのユーザ名]/.ssh
# 例) scp -P 22 id_rsa.pub example@192.168.77.3:/home/example/.ssh
公開鍵のパーミッションを変更
Raspberry Pi上で下記コマンドを実行し、公開鍵の内容をauthorized_keysに追記する。
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
authorized_keysのパーミッションを600に、.sshフォルダのパーミッションを700に変更する。過去に他のPCから本Raspberry Piに接続したことがある場合は本作業は不要。
chmod 600 authorized_keys
chmod 700 ~/.ssh
そして公開鍵のファイルはもう不要であるため削除する。
rm ~/.ssh/id_rsa.pub
公開鍵認証での接続を確認
接続元PCで下記コマンドを実行し、公開鍵認証で接続できることを確認する。
ssh [Raspberry Piのユーザ名]@[Raspberry PiのIP] -i [秘密鍵のパス] -p [ポート番号]
# 例) ssh example@192.168.77.3 -i C:\Users\[ユーザ名]\.ssh\id_rsa -p 22
sshのセキュリティ設定
sshのデフォルトの設定では外部からの攻撃に遭うリスクが高いため、一部の設定を変更する。
sshd_configを開き、コメントアウトされている項目はアンコメントして、下記のように設定する。
sudo vi /etc/ssh/sshd_config
ポート番号を変更する。デフォルトのままだと攻撃の可能性や頻度が高い(らしい)。
Port 55555
# 49152番から65535番の範囲で任意の値
rootログインを禁止する。
PermitRootLogin no
公開鍵認証を利用する。
PubkeyAuthentication yes
パスワード認証を禁止する。
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
ここで一旦、再起動
sudo reboot
IPアドレス設定の変更
初期設定の第2段階でインターネットに接続された環境に接続し、PPPoEで通信を行うためにIPアドレスの設定を行う。事前にPPPoE用のルータでRaspberry Pi用の固定IPアドレス(192.168.1.2)を準備しておく。
下記のコマンドでdhcpcd.confを開き、
sudo vi /etc/dhcpcd.conf
下記の設定を追記する。
interface eth0
static ip_address=192.168.1.2/24
static routers=192.168.1.11
static domain_name_servers=192.168.1.1
Raspberry Piのシャットダウン
ここまで設定出来たらRaspberry Piをシャットダウンし、VPNサーバ構築(1)で構築したネットワーク環境に接続する。
sudo shutdown -h now
参考
Discussion