🖥

VPNサーバ構築(3) Raspberry Piのユーザ名変更と公開鍵認証の設定

2021/08/10に公開

初期設定の流れ

初期設定は2段階に分けて行っている。(セキュリティ的に意味があるのか正直分からないが。)

  • 1段階目ではインターネットに接続せず、Wi-FiやBluetooth、IPv6の無効化、ログイン関連の設定(ユーザ名の変更、sshの公開鍵認証の設定)を行う。

https://zenn.dev/kumatani/articles/vpn-2-settingupraspberrypi

  • 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

ポート番号を変更する。デフォルトのままだと攻撃の可能性や頻度が高い(らしい)。

/etc/ssh/sshd_config
Port 55555 
# 49152番から65535番の範囲で任意の値

rootログインを禁止する。

/etc/ssh/sshd_config
PermitRootLogin no

公開鍵認証を利用する。

/etc/ssh/sshd_config
PubkeyAuthentication yes

パスワード認証を禁止する。

/etc/ssh/sshd_config
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

下記の設定を追記する。

/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

参考

https://jyn.jp/raspbian-setup/
https://qiita.com/HeRo/items/c1c30d7267faeb304538
https://makezine.jp/blog/2017/09/secure-your-raspberry-pi-against-attackers.html
https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc

Discussion