
UNIX ユーザーが SSH 経由でサーバーにアクセスし、公開キー ログインのみを許可したい場合、このリストに追加する必要がある他の項目はありますか?
- サーバー上のファイル
pubkey login
を許可します。sshd_config
- デフォルトパスワードに関する考慮事項、例:「!」または「*」
答え1
どの SSH サーバーを要求しているか、また Unix システム (のセット) が何であるかを伝えておけばよかったと思います。
!
または(それらのエントリを読むために使用) に*
表示される場合は、パスワードではありません。/etc/passwd
/etc/shadow
getent
これらは、アカウントにパスワードがあるかどうか、およびロックされているかどうかを示すマーカーです。
これはPAMとディストリビューションの設定とバージョンによって重要な区別となります。Linuxをお使いの場合ロックされている場合、ログインが許可される可能性は低くなりますが、一方で、古いシステムではそのまま使用できる可能性があります (少なくとも私の経験では)。
スーパーユーザーとして、 を使用しpasswd -l <name>
てアカウントをロック ( !
) したり、passwd -d <name>
アカウントからパスワードを削除 ( *
) したりできます。また、両方を組み合わせて、既存のパスワードが確実に削除されるようにすることもできますpasswd -dl <name>
。
/etc/ssh/sshd_config
明記されていませんが、OpenSSH を想定すると、 (パスは異なる場合があります)の関連ディレクティブは次のとおりです。
HostKey ...
サーバーにはホスト キー、または RSA2 か DSA のいずれかが必要です (最新の実装では 2 つの楕円曲線実装も追加されます)。RSA1 は、すべての一般的な SSH サーバー実装で長い間使用されなくなりました。
それから:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
また、 SSH 経由のログインを/etc/sudoers
完全に禁止するように設定することも常に推奨します( )。ただし、このより安全な設定には、ディスクがいっぱいで、権限のないメンバーがディスクに書き込むことができない(予約されたスペースがあるため) という小さな欠点があります。したがって、結果は人によって異なります。root
PermitRootLogin no
sudo
root
さらに2つのアドバイス
SSHアクセスを制限するグループを割り当てる
グループssh-users
(または任意の名前) を作成し、 でそれぞれのディレクティブを設定します。上記の情報に基づいて選択したポリシーに従って、 がそのグループのメンバーであるかどうかをsshd_config
確認します。root
AllowGroups ssh-users
ユーザーを制限するグループを割り当てるのみSFTP アクセス
次に、ユーザーが逃げることができず、特定の機能が無効になっていることsshd_config
を確認します。/home
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
結論
したがって、Linux の場合は、PAM を考慮事項として追加する必要があります。
また、エージェント転送を許可するか、ユーザーに任せるかを指定します。
最後に、ポートまたは X11 接続の転送を許可するかどうかも重要です。特にポートは、ユーザーがサーバーをプロキシとして使用できるようにするため、望ましくない場合があります。
このMatch
ディレクティブを使用すると、ユーザーがどこから接続しているかを制限できます (ファイアウォールまたは TCP ラッパーでもこれを行うことができます)。
ユーザーにキーの管理を許可しますか、それともそれを抽象化してユーザーが直接アクセスauthorized_keys
できないようにしますか?
確かに他にも側面はありますが、それらは主に、より細かいレベルの詳細であり、前述の点のバリエーションです。
答え2
パスワードの複雑さに関するポリシーを考慮して、ユーザーが望むものなら何でも構いません。SSH経由のアクセスのみでPasswordAuthentication
、no
sshd_config
、パスワードは関係ありません。また、shadow
!
は暗号化されたパスワードなので、との値*
はパスワード- ただし、文字列は有効な暗号化値ではないため、パスワードベースのログインはできません。
答え3
OpenSSH を搭載した RHEL/CentOS に似たものを実行していると仮定すると、パスワードレスにするときに通常行うことは次のとおりです。
- sshd_config を pubkey 認証のみを受け入れるように設定する (
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - 既存のすべてのユーザーに無効なパスワードを設定します (
chpasswd -e 'pubkey!!' <username>
) - 既存のすべてのユーザーのパスワード有効期限を削除します (
chage -M -1 <username>
) - sudoを使用する場合は、すべてのユーザー指定がNOPASSWDとしてマークされていることを確認してください(例
%wheel ALL=(ALL) NOPASSWD: ALL
:) - ユーザー作成プロセスがこれらの要件を満たすことを確認します(例
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
:)
パスワード アクセスをロックアウトする前に、pubkey 経由で正常に認証できることを二重に確認してください。/home パーティションがネットワーク マウント (または常に利用できるとは限らないその他の場所) 上にないことを確認してください。pubkey にアクセスできないためにサーバーにアクセスできなくなることほど悪いことはありません。システムがヘッドレスの場合は、緊急時にコンソールに直接アクセスする方法 (KVM、仮想コンソール、クラッシュ カートなど) があることを確認してください。
とはいえ、完全な sudo アクセスを持つすべてのユーザーのアカウントにパスワードを設定し、それらのユーザーにパスワードを要求するように sudoers を構成することを検討します。他のすべてが上記のように構成されている場合、ユーザーは依然としてこのパスワードでサーバーにログインすることはできませんが、コマンド プロンプトで「悪いこと」を行うユーザーに対して、少しだけ追加の保護が得られます。
答え4
rcommand
これが Linux ではなく UNIX (HP UX) マシンである場合は、 sshd アカウントで pam.conf に追加する必要があります。
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
そうしないと、マシンに SSH で接続しようとしたときに、パスワード プロンプトが表示されますが、入力できません。