OpenSSHの脆弱性が新たに発表されました。これは放置しておくと SSH を受け付ける全てのサーバーを乗っ取る事ができてしまう脆弱性で、「regreSSHion」と名付けられています。過去対応されたバグが戻ってしまったということで、すこぶる上手いネーミングですね。
そこでさまざまなサーバのSSHの状態を調べていたのですが、ふと、Proxmoxの環境はESXiと違ってデフォルトでSSHが開いていたなと思い出し現状を確認したところ、特に制限が入ってなかったので、SSHを制限することにしました。
rootユーザでのSSHの制限は以下の方向で行うことにします。
- 一般アカウントの作成
- 一般アカウントでのSSHを鍵認証のみにする
- rootユーザのSSHの無効化
ベースとなるProxmox VEはDebian 12にインストールされています。素に近い環境でしたので、そもそもrootユーザ以外のアカウントが存在しません。そこで、最初に一般アカウントを作成します。
1
2
3
4
5
6
7
8
9
10
| # 一般アカウントの作成
# ホームディレクトリを作成しユーザを作成する
mkdir /home/<USERNAME>
useradd <USERNAME> -d /home/<USERNAME>
# パスワードを設定する
passwd <USERNAME>
# ホームディレクトリを作成したユーザで操作可能にする
chown <USERNAME>:<USERNAME> /home/<USERNAME>
|
この状態で、作成した一般アカウントでSSHが可能です。SSHができるか試してみても良いかもしれません。今回は、事前に払い出した鍵認証のみとし、パスワード認証をさせないことにします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 一般アカウントにスイッチし鍵認証のための設定を行う
su - <USERNAME>
## 以下、一般アカウント
# 一般アカウントのSSH用のディレクトリを作成する
mkdir .ssh
chmod 700 .ssh
# SSHのディレクトリを作成したので、ローカル端末から作業するためにログアウトする
exit
# ローカルホストから鍵を転送する
ssh-copy-id <USERNAME>@<server_ip>
|
SSHができない場合、.ssh
ディレクトリとauthorized_keys
ファイルのパーミッションを正しく設定してないことが大半。
ssh-copy-idはauthorized_keys
を正しく設定してくれるため、scpやcpを利用するよりも簡単なので推奨。
次に、鍵認証するためのSSHの設定変更を行う。
1
2
3
4
5
| # rootユーザにスイッチしてSSHの設定変更を行う
su -
vi /etc/ssh/sshd_config
|
以下の行のコメントをはずして有効化する。
1
2
| #PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
|
AuthorizedKeysFileに.ssh/authorized_keys2
が存在していたため、(なんだこれは?と思い)今回は削除しておいた。
あとで調べる。
2024/07/07 調べたので追記。
昨日、Proxmoxのsshを制限していたときに、authorized_keys2という見慣れないものを見つけたので調べてみた。
1
2
3
4
5
6
| # 編集した設定ファイルのテストを行う。
# 設定ファイルに間違いがなければ何も表示されない
sshd -t
# 誤りがなければ、SSHを再起動する
service sshd restart
|
鍵が転送できたためここで鍵認証ができるかを確かめておく。今後、パスワード認証を塞いだときに、正しく鍵認証ができていないと、再びログインできなくなってしまうためである。
1
2
3
4
5
6
7
8
9
|
# ローカルホストから、秘密鍵を使ったログインを確認する
# ssh-agentに秘密鍵を登録する
# agent登録時に秘密鍵のパスワードを入力する
ssh-add ~/.ssh/id_rsa
# 登録している秘密鍵を利用してログインを行う。パスワードが聞かれなければOK
ssh <USERNAME>@<server_ip>
|
確認ができたら、最後にrootユーザSSHとパスワードでのSSHを無効化する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # rootユーザにスイッチしてSSHの設定変更を行う
su -
vi /etc/ssh/sshd_config
### ここから sshd_config の中身
# 以下の行をnoに変更する(デフォルトがyes)
PermitRootLogin no
PasswordAuthentication no
### ここまで sshd_config
# 設定の確認を行う
sshd -t
# 誤りがなければ、SSHを再起動する
service sshd restart
|
ローカルに秘密鍵はあるけれど、公開鍵がない!という時の公開鍵の作り方
1
| ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
|
以上!。
そういえば、ハッキングラボの作り方が全面改訂されていた。全面改訂ということなので、ちょっと興味ある・・・。