Ubuntu 18.04.3 服务器slapd
正在运行,LDAP 身份验证已配置libnss-ldapd
和libpam-ldapd
软件包(全部在同一台机器上)。useradd
使用相同的用户名、不同的数字 UID 和不同的密码在 LDAP 数据库中创建了一个本地用户和一个用户。使用此用户名通过 SSH 登录每个两个密码中的任意一个,在每种情况下,本地用户都将登录。后者是可以预料的,因为使用files ldap
中的顺序nsswitch.conf
。但是,我担心 LDAP 中存储的密码会授予本地用户访问权限。当我使用 锁定本地用户时,这甚至有效passwd --lock
。
所描述的行为是预期的吗,或者我配置了错误的东西?
passwd
作为一种可能的解决方案,我将和group
中的顺序更改nsswitch.conf
为ldap files
。现在,只有 LDAP 密码有效,并将使用存储在 LDAP 中的 UID 登录。对passwd
和使用此顺序是个好主意吗group
?
附录:这是另一个想法,使用 order files ldap
。最终,我想防止使用 LDAP 凭据以本地用户身份通过 SSH 登录。最简单的方法是确保没有用户名冲突。出于实际目的,可以通过在 LDAP 用户名前加上一些字符串来实现,这样就极不可能出现这样的用户名作为本地用户(我的本地用户大多是系统用户)。但是,我的用户(人员)更喜欢没有这种前缀的用户名。但他们并不关心他们的组名。因此,我创建了名称不太可能与本地组冲突的组。然后我将所有 LDAP 用户放入其中一个组中。最后,我使用MatchGroup
in 来sshd_config
只允许这些组通过 SSH 进入机器(除了 root 和其他几个组,我明确确保它们不用作 LDAP 中的用户名)。
需要注意的是,我的本地用户集很小,而且大部分都是固定的;但随着时间的推移,仍可能会发生微小的变化,例如当更新软件包或安装新软件包时。因此,仅提供 LDAP 中禁止使用的用户名列表而不采取进一步措施是不可行的。
附录2:使用 LDAP 服务器对用户进行身份验证的客户端(运行 Debian)也存在同样的问题。如果有一个本地用户(在客户端上)和一个同名的 LDAP 用户,我们可以以当地的用户使用存储在 LDAP 中的凭据!天哪。幸运的是,前面附录中描述的技巧也可以在这里使用。在这里实现这一点的方法是pam_listfile
。
附录3:特别注意 LDAP 中的补充组。可能会出现这样的情况:用户使用passwd
客户端上存储的 UID 和 GID 登录,但使用 LDAP 中提供的补充组。是的,这越来越疯狂了。因此,pam_listfile
上面提到的解决方法应始终考虑主要组。
总的来说,我认为这是一个 Bug。