我有一个工作AD / Linux / LDAP / KRB5目录和身份validation设置,只有一个小问题。 当一个账户被禁用时,SSH公钥authentication仍然允许用户login。
很明显,kerberos客户端可以识别一个禁用的帐户,因为kinit和kpasswd返回“客户端凭证已经被撤销”,没有进一步的密码/交互。
是否可以configurationPAM(在sshd_config中使用“UsePAM yes”)禁止login已禁用的帐户,其中身份validation是由publickey完成的? 这似乎不工作:
account [default=bad success=ok user_unknown=ignore] pam_krb5.so
请不要在你的答案中引入winbind – 我们不使用它。
我已经在其他地方读过其他人要求SSH“固定”,以便locking的帐户不能通过SSHlogin。 (参见Debian bug 219377)这个请求被作为一个补丁拒绝了,“因为它打破了一些用户的期望(被用户passwd -l只locking了密码)”。 (请参阅Debian错误389183)例如,有些人希望能够从密码loginlocking帐户,但仍允许SSH密钥访问。
PAM不会拒绝SSH密钥authentication给刚刚被locking的帐户(例如,由于密码尝试无效,因为SSH密钥authentication的目的不在于密码字段(通常是locking帐户的地方))。
我知道密码哈希项在pam_authenicate()时被隐式检查,而不是在pam_acct_mgmt()时检查。 pam_unix.so pam_sm_acct_mgmt()根本不检查密码哈希,并且在公共密钥身份validation期间不调用pam_authenticate()。
如果您的目的是能够集中禁用login帐户,还有其他可能的解决方法,包括:
更改loginshell。
(重新)移动他们的authorized_keys文件。
拒绝访问的另一个select可能是在sshd_config中使用DenyGroups或AllowGroups。 (然后将用户添加到“sshdeny”组,或从“sshlogin”组中删除它们以禁用它们login。)(请阅读: https ://help.ubuntu.com/8.04/serverguide/user-management .html )
从http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL我读:“问题是pam_unix只检查阴影条目的到期date,而不是密码散列字段的内容。 如果这是真的,会过期的帐户,而不是locking它做你所需要的?
你的问题的答案可能是“是的, 如果你禁用他们的地方以外的密码字段”
做了更多的功课,并回答我自己的问题。
在RedHat的pam_krb5( pam_krb5-2.3.14-1/src/acct.c )中,除非模块参与authentication阶段,否则pam_sm_acct_mgmt()函数根据模块configuration返回PAM_IGNORE或PAM_USER_UNKNOWN。 因此,它会要求更改pam_krb5代码来做我想做的事情。
JohnGH的回答是一个很好的解决办法。 使用“代理”属性来expression相同的含义,如打破shell或添加到“禁用用户”组。
另一个解决方法(部分testing)是过去设置帐户到期date,并使用诸如pam_unix之类的模块来使帐户检查失败。 这使用LDAP,而不是KRB5,但查询相同的集中pipe理的用户目录。
基于SSH密钥的authentication独立于PAM。 您有以下解决scheme:
如果你想通过Kerberos使用无密码login,你必须确保:
kinit -k host/server1.example.com@DOMAIN 你sshd被configuration为使用gssapi:
KerberosAuthentication是GSSAPIAuthentication是GSSAPICleanupCredentials是UsePAM否
你使用像PuTTY v0.61或更新的kerberized ssh客户端。