パスワードレスSSHの意味とは

パスワードレスSSHの意味とは

UNIX ユーザーが SSH 経由でサーバーにアクセスし、公開キー ログインのみを許可したい場合、このリストに追加する必要がある他の項目はありますか?

  1. サーバー上のファイルpubkey loginを許可します。sshd_config
  2. デフォルトパスワードに関する考慮事項、例:「!」または「*」

答え1

どの SSH サーバーを要求しているか、また Unix システム (のセット) が何であるかを伝えておけばよかったと思います。

!または(それらのエントリを読むために使用) に*表示される場合は、パスワードではありません。/etc/passwd/etc/shadowgetent

これらは、アカウントにパスワードがあるかどうか、およびロックされているかどうかを示すマーカーです。

これは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完全に禁止するように設定することも常に推奨します( )。ただし、このより安全な設定には、ディスクがいっぱいで、権限のないメンバーがディスクに書き込むことができない(予約されたスペースがあるため) という小さな欠点があります。したがって、結果は人によって異なります。rootPermitRootLogin nosudoroot

さらに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経由のアクセスのみでPasswordAuthenticationnosshd_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 で接続しようとしたときに、パスワード プロンプトが表示されますが、入力できません。

関連情報