pamを使用してユーザーがSSHアクセスを防ぐ方法は?

pamを使用してユーザーがSSHアクセスを防ぐ方法は?

/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構成にその行を含めることができます。sshdpassword-auth

Fedora では、authselectpam_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.confSSH ログインにのみ適用されるアクセス制御を作成します。例:

# 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アドレスを使用すると機能しますが、私には機能しません。

関連情報