我有openldap
( phpldapadmin
) 将所有用户同步到 Linux Debian 服务器,如果我尝试将 LDAP 用户添加为 Linux 用户,我会收到错误用户已存在(我知道它无效)
aabuhasna@qa:/$ who am i
aabuhasna pts/1 2016-06-16 03:38 (XXXXX)
aabuhasna@qa:/$ sudo adduser aabuhasna
[sudo] password for aabuhasna:
adduser: The user `aabuhasna' already exists.
aabuhasna@qa:/$ cat /etc/passwd |grep aabuhasna
aabuhasna@qa:/$
如果openldap
用户没有/bin/bash
,那么loginshell
他根本无法登录到任何服务器,我的问题是我希望用户只能使用他的 LDAP 信息访问三台服务器,
我的问题:
- 我可以将用户添加到
/etc/passwd
作为让他登录的解决方法吗?如果可以,请建议正确的添加方法。 - 如果选项一无效(将用户添加到
/etc/passwd
),是否有一个文件可以更改以使此用途例外。
答案1
我知道有两种方法可以实现您想要实现的目标。第一种是在每个单独的服务器上使用该pam_access
模块来允许/禁止基于每个用户的访问。第二种是使用pam_check_host_attr
中的指令/etc/pam_ldap.conf
,在所有服务器上启用此功能,然后为用户应该能够登录的每个服务器创建与给定用户 ID 关联的属性:值对。
例如,在主机名“gargoyle”上启用此功能后,如果我希望用户ben
能够登录该主机,则必须将属性/值对“host:gargoyle”添加到ben
的 LDAP 条目中。
答案2
约翰的回答会起作用。
或者,或配置filter
中的语句允许您通过随机 LDAP 过滤器过滤用户;例如,nss_ldap
nslcd
filter passwd (|(uidNumber=1234)(gidNumber=1234))
此示例将仅定义当前计算机上具有 uid 或 gid '1234' 的用户。您可以在此处使用任何有效的 LDAP 过滤器。与约翰的解决方案的不同之处在于,这样,过滤掉的用户甚至不会存在于该服务器上(即,getent passwd
对于这些用户将不返回任何内容)。