/etc/ssh/sshd_config
私は私を除くすべてのユーザーのSSHアクセスをブロックする方法を見つけようとして、先週の間頭を傷つけました。
私の目標は、私を除くすべてのユーザーがSSHを介したログインを無効にし、2fa +パスワードまたはキーベースの認証を介して自分のアカウントにアクセスできるようにすることです。現在後半まで完了しましたが、私を除くすべてのユーザーをブロックする方法がわかりません。私は私の仕事で働きたい大使をすでに持っていますsshd_config
。
AllowUsers me
DenyUsers *
ただし、別のユーザーアカウント(たとえばfred
)でsshを試みると、まだ使用するように求められますPassword:
。また、私の上部に次の行を追加しようとしました/etc/pam.d/sshd
。
auth required pam_succeed_if.so user ingroup ssh
そして私はグループで唯一の人ですssh
。
私を除くすべてのユーザーのSSHアクセスを防ぐために、私は何を間違っていますか?私は2FAが機能する方法なので、PAMを使用する必要があります。
答え1
sshをブロックしてsshのみを使用すると、ログインaccess.conf
は機能しません。ただし、pam_access
他の構成ファイルを使用して実行できます。
まず、pam_accessを使用するようにPAMを設定する必要があります。おそらく基本的にはそうではありません。 PAM構成には構成ファイルを介してaccount required pam_access.so
行を含める必要があり、sshd構成にその行を含めることができます。sshd
password-auth
Fedora では、authselect
pam_access を使用するように PAM 設定を有効にすることができます。
sudo authselect enable-feature with-pamaccess
access.conf
この時点で、次の行を使用するとアクセスがブロックされる可能性があると考えられます。
-:username:sshd
これは防止しませんユーザー名サービス利用時にアクセスが免除されますsshd
。その理由は、pam_access マンページの次の内容によるものです。
...またはPAMサービス名(はいの場合)オフラインログイン。
sshはネットワークログインなので(PAMのRHOST
フィールドが定義されている)、サービス名は使用されません。リモートホスト名、IPアドレス、ネットグループなどを使用してください。
PAMサービス名はインターネットからのログインにのみ使用されるため、このマンページは完全に正確ではありません。そしてttyではない。コンソールログインプロンプト、デスクトップグリーティング、sudo実行時などのローカルログインは、サービス名の代わりに関連するttyまたはXディスプレイを使用します。
実際、サービス名はatdやcrondなどのバックグラウンドログインにのみ使用されます。したがって、access.confの他のエントリでsshをフィルタリングする方法がないため、この方法でsshをブロックすることはできません。
長い話を短く
以下を使用すると、SSHだけでなく他のすべてのサービスを使用してすべてのリモートログインを制限できます。
+:username:LOCAL
-:username:ALL
SSHにのみ適用するには、SSHDに別のaccess.confファイルを使用するようにPAMを構成する必要があります。/etc/pam.d/sshd
次を含む行の直前に、次の行を追加しますaccount include password-auth
。
account required pam_access.so accessfile=/etc/security/access-sshd.conf
次に、/etc/security/access-sshd.conf
SSH ログインにのみ適用されるアクセス制御を作成します。例:
# Don't allow user 'username' access
-:username:ALL
# Only allow user 'trusted' access and no one else
-:ALL EXCEPT trusted:ALL
# Only allow user 'username' when they are coming from localhost
+:username:127.0.0.1 ::1
-:username:ALL
localhost
数値の代わりにIPv4とIPv6アドレスを使用すると機能しますが、私には機能しません。