web-dev-qa-db-ja.com

CentOS 7 SSHおよび2FA(ESETセキュア認証)

CentOS7での2要素認証を機能させるのに行き詰まっています。具体的には、SSHとOTPを介した認証。

誰かがこれを手伝ってくれたらとてもありがたいです。 :)

編集:以下のログからわかるように、pamモジュールはRADIUS-Serverに認証を要求し、サーバーはコード11で応答するため、pam-moduleはユーザーにOTPを要求しますが、代わりにモジュールは「認証に失敗しました」とだけ表示します。だから、クライアントが問題になるはずですよね?

これは、アカウント「[email protected]」でSSH経由でログインしようとしたログです。

sshd[3652]: pam_radius_auth: Got user name [email protected]
sshd[3652]: pam_radius_auth: ignore last_pass, force_Prompt set
sshd[3652]: pam_radius_auth: Sending RADIUS request code 1
sshd[3652]: pam_radius_auth: DEBUG: getservbyname(radius, udp) returned 0x7fa56490e1c0.
sshd[3652]: pam_radius_auth: Got RADIUS response code 11
sshd[3652]: pam_radius_auth: authentication failed
sshd[3652]: pam_sepermit(sshd:auth): Parsing config file:     /etc/security/sepermit.conf
sshd[3652]: pam_sepermit(sshd:auth): Enforcing mode, access will be allowed on match
sshd[3652]: pam_sepermit(sshd:auth): sepermit_match returned: -1
sshd[3652]: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.31 [email protected]
sshd[3652]: Failed password for [email protected] from 10.0.0.31 port 57962 ssh2
sshd[3652]: Connection closed by 10.0.0.31 [preauth]

以下は構成情報とセットアップ情報に従います

テスト環境は、私の会社のインフラストラクチャによって提供されます。私たちは主にWindowsクライアントを使用し、WindowsサーバーとLinuxサーバーのほぼ同じシェアを使用しています。

Win-Server: Windows Server 2016 x64

  • Active Directory:Test.local
  • ESETセキュア認証(RADIUSサーバー)
    • クライアントとの共有秘密:test345
    • オプション「RADIUSのアクセスチャレンジ機能を使用する」が有効になっている

Linux-クライアント/サーバー: CentOS 7.3 x64

  • レルム経由でDomainTest.localに参加しました
  • ADアカウントとOTP-2FAを使用したローカルログインはいつでも可能
  • /etc/pam.d/sshdでpam_radius_auth.soがrequiredに設定されていない場合(つまり2FAがない場合)にのみ、任意のアカウントでSSHログインが可能です。

構成 Linuxの-クライアント/サーバー:

  • RADIUS-ServerとShared-Secretが/ etc/raddb/serverに追加されました
  • pam_radius_auth.soは/ usr/lib64/security /にあります
  • auth requiredpam_radius_auth.soが/etc/pam.d/sshdおよび/etc/pam.d/loginに追加されました

/ etc/pam.d/login

#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       substack     system-auth
auth       include      postlogin
auth       sufficient   pam_radius_auth.so
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

/ etc/pam.d/sshd

#%PAM-1.0
auth       required     pam_radius_auth.so    debug
auth       required pam_sepermit.so      debug
auth       substack     password-auth      debug
auth       include      postlogin     debug
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

/ etc/raddb/server

# server[:port] shared_secret      timeout (s)
10.0.0.1        test345            5
2
pomf

私は自分でこの問題を解決することができました。

どうやら変更するのは/etc/pam.d/sshdのpam-modulesの順序だけだったようです。

auth sufficient pam_radius_auth.soは、pam_sepermit.soより下でpassword-authより上である必要があります。

実際、/etc/pam.d/loginのモジュールの順序も正しくありませんでした。

auth sufficient pam_radius_auth.soの行はpam_securetty.soの下でsystem-authの上にある必要があります。

これがファイルの外観です。

/ etc/pam.d/login

#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth       sufficient   pam_radius_auth.so
auth       substack     system-auth
auth       include      postlogin
# auth       sufficient   pam_radius_auth.so
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    include      postlogin
-session   optional     pam_ck_connector.so

/ etc/pam.d/sshd

#%PAM-1.0
auth       required pam_sepermit.so
auth       sufficient   pam_radius_auth.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare
0
pomf