UNIXユーザーがSSHを介してサーバーにアクセスし、公開鍵ログインのみを許可したい場合は、このリストに追加するときに考慮すべき他の項目がありますか?
- サーバーにファイルを許可します
pubkey login
。sshd_config
- 基本パスワードに関する注意事項。「!」または「*」
答え1
どのSSHサーバーとどのUnixシステムセットが必要かを教えてください。
!
または(この項目を読み取るために使用されます)、その項目を表示するときと*
パスワードはありません。/etc/passwd
/etc/shadow
getent
アカウントにパスワードがあるかロックされているかを示すフラグ。
これは、PAM の構成とバージョンとディストリビューションによって異なる重要な違いです。Linuxを使用している場合。ロックされているとログインできないようですが、古いシステムではすぐに動作する可能性があります(少なくとも私の経験ではそうでした)。
(スーパーユーザーとして)passwd -l <name>
アカウントをロックしたり(!
)passwd -d <name>
アカウントからパスワードを削除したり(*
)、2つを組み合わせて既存のパスワードを削除したりできますpasswd -dl <name>
。
私は言っていませんが、/etc/ssh/sshd_config
OpenSSH(パスは異なる場合があります)の関連ガイドラインが次のとおりです。
HostKey ...
サーバーにはRSA2またはDSAのホストキーが必要です(より近代的な実装には2つの楕円曲線実装も追加されています)。 RSA1は、すべての一般的なSSHサーバー実装で長く使用されていません。
それから:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
また、私は常にSSH()を介してログインを設定し/etc/sudoers
て完全に無効にすることをお勧めします。ただし、このより安全な設定には、ディスクがいっぱいになり、権限のないメンバーがディスクに書き込めない場合(予約済みスペースのため)、小さな欠点がある可能性があります。だからYMMV。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を設定する(
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>
:)。
パスワードアクセスをロックする前に、公開鍵で正常に認証できることをもう一度確認してください。 /homeパーティションがネットワークマウント(または常に利用できない可能性がある他のパーティション)にないことを確認してください。公開鍵にアクセスできないため、サーバーにアクセスできないよりも悪いことはありません。システムがヘッドレスの場合は、緊急時にコンソールにすばやく直接アクセスできる方法(KVM、仮想コンソール、クラッシュカートなど)があることを確認してください。
その場合は、sudo アクセス権のあるすべてのアカウントに対してパスワードを設定し、sudo ユーザーにパスワードの提供を要求するように設定することを検討します。他のすべてが上記のように設定されていても、このパスワードを使用してサーバーにログインすることはできませんが、コマンドプロンプトに座って「bad(tm)」を実行している人にいくつかの追加の保護を提供します。
答え4
rcommand
LinuxではなくUNIX(HP UX)システムの場合は、sshdアカウントの下のpam.confに追加する必要があります。
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
そうしないと、システムにSSHで接続しようとするとパスワードプロンプトが表示されますが、これは表示されません。