CH-J Server ManagerSSH によるサーバー管理
メニュー
すべてのガイドと記事 →

SSHユーザーとrootアクセス:Linuxでの安全な設定

管理者アカウントを作成し、鍵を登録してsudoをテストしてからrootログインを制限し、自分が接続できなくなる事態を防ぎます。

目的と作業の順序

管理者は自分専用のアカウントに鍵でログインし、必要に応じてsudoを使うべきです。誰が何をしたかの記録が残り、パスワードの推測も抑えられるためです。順序が重要です。まず新しいアクセス方法を使えるようにしてテストし、rootの制限は最後に行います。問題が起きた場合に備え、プロバイダーのコンソールを利用できる状態にしておいてください。

アカウントを作成して鍵を登録する

アカウントを作成し、その公開鍵を追加して、権限を厳密に設定します。他のユーザーが書き込める鍵ファイルはsshdに無視されるためです。秘密鍵をサーバーにコピーしてはいけません。Red Hat系のシステムでは、sudoグループの代わりにwheelグループを使います。

sudo adduser admin1
sudo usermod -aG sudo admin1
sudo install -d -m 700 -o admin1 -g admin1 /home/admin1/.ssh
sudo install -m 600 -o admin1 -g admin1 ~/admin1.pub /home/admin1/.ssh/authorized_keys

別のウィンドウからテストする

現在のセッションを開いたまま、別のターミナルから新しいログインをテストします。グループに所属しているだけではsudoが使える証拠にはなりません。可否を決めるのはsudoersのルールです。sudo -lで確認してください。

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 admin1@server.example
sudo -l
sudo -v

rootログインを制限する

PermitRootLogin prohibit-passwordはrootのログインを鍵による認証に限定し、noはSSH経由のrootログインを完全に禁止します。変更は専用のファイルに記述し、配置先は /etc/ssh/sshd_config.d. とします。ほとんどのオプションでsshdは最初に見つかった値を使うため、先に読み込まれるファイルが優先されることがあります。そのため、ファイルを読むだけで済ませず、sshd -Tで実際に有効な値を確認してください。古いセッションを閉じる前に、新しいログインをテストします。

echo 'PermitRootLogin no' | sudo tee /etc/ssh/sshd_config.d/50-root.conf
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -iE '^(permitrootlogin|passwordauthentication) '

パスワードログインと避けるべき設定

PasswordAuthenticationを無効にするのは、必要なすべてのアカウントで鍵をテストしてからにしてください。複数人で1つのアカウントを共有すると、他の人に影響を与えずに1人だけのアクセスを取り消せなくなるため、共有は避けます。アカウント全体でsudoをパスワード不要にすると、鍵が盗まれただけで完全な制御を奪われることにもなります。

CH-J Server Managerでのアカウント管理

Usersモジュールは、接続中のSSHセッションを通じてアカウント、グループ、SSH鍵、SSHアクセスを管理します。sudoersの変更やNOPASSWDの設定は一切行わず、sudo -lの結果から実際のsudoの状態を報告します。rootアカウントは削除できません。rootのパスワードログインを許可するには追加の確認が必要で、推奨される選択肢は鍵のみです。SSHアクセスの変更はsshd -Tと新しいSSHログインで検証され、確認に失敗した場合や自分が接続できなくなる場合は、以前の設定が自動的に復元されます。sudoが使えない場合、このモジュールは読み取り専用です。

詳しいドキュメント

OpenSSH: sshd_config →

man: sudoers →

生体認証によるロック解除とセキュリティ →