我正在针对 Samba 4 AD 实施 LDAP 身份验证,以便管理员登录我们的 Linux 服务器。
我成功配置了 PAM,libpam-ldapd
并libnss_ldapd
自动创建了用户的主目录。我现在面临的问题是,用户将其映射的 sambagidNumber
作为主要组,而该组在本地根本不存在。当前情况是/home
目录如下所示(注意用户主要组):
drwxr-xr-x 2 user 1005 4096 Okt 13 16:01 user/
问题是sssd
它需要域加入 Samba 4 AD,现在不是这样,将来也不会是这样。由于我们有数百个 Ganeti VM,其中大多数都非常关键!
允许管理员(特定 AD 组的成员)和拥有签名 SSH 公钥的管理员登录这些计算机。
我要求的是根据用户重命名组并在本地自动创建这些组。我在某处读到应该可以使用wbinfo
和来重命名它们rip map
。但我不知道该怎么做。在本地创建组是次要的,因为我将创建一个管理组并将它们全部添加到其中。
主要问题是:
如何将用户主要组从 重命名gidNumber
为uid
?
多谢。
答案1
我找到了答案,只是没有时间发布。以下是针对 samba 4 AD 实现用户密码验证的完整方法:
- 安装 libnss-ldapd
- 获取 samba 4 AD 的证书并将其添加到您的 CA
- 更新 ca 证书
- 使用 ldapsearch 检查连接
- pam-auth-update 并选择应使用 LDAP 的服务
- 如果需要,请在登录时使用创建主页
打开
/etc/nslcd.conf
并修改如下:# /etc/nslcd.conf # nslcd configuration file. See nslcd.conf(5) # for details. # The user and group nslcd should run as. uid nslcd gid nslcd # The location at which the LDAP server(s) should be reachable. uri ldaps://dc.example.com:636/ # The search base that will be used for all queries. base DC=example,DC=com # The LDAP protocol version to use. #ldap_version 3 # The DN to bind with for normal lookups. #binddn nslcd binddn CN=binduser,CN=Users,DC=example,DC=com bindpw yourpassword # The DN used for password modifications by root. #rootpwmoddn cn=admin,dc=example,dc=com # SSL options #ssl start_tls #tls_reqcert never ssl on tls_cacertfile /etc/ssl/certs/ca.pem #tls_cacertfile /etc/ssl/certs/ca-certificates.crt # The search scope. scope sub filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*)) map passwd uid sAMAccountName map passwd homeDirectory unixHomeDirectory map passwd gecos displayName filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*)) map shadow uid sAMAccountName map shadow shadowLastChange pwdLastSet filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*)) map group cn sAMAccountName map group gidNumber uidNumber map group memberUid sAMAccountName
测试登录,你会看到:
user@test [Home]:~$ ll /home/ drwxr-xr-x 3 user user 4096 May 20 01:41 user/ user@test [Home]:~$ user@test [Home]:~$ user@test [Home]:~$ ll /home/user/ total 28 drwxr-xr-x 3 user user 4096 May 20 01:41 ./ drwxr-xr-x 4 root root 4096 May 19 23:35 ../ -rw-r--r-- 1 user user 220 May 19 23:35 .bash_logout -rw-r--r-- 1 user user 3771 May 19 23:35 .bashrc drwx------ 2 user user 4096 May 19 23:35 .cache/ -rw-r--r-- 1 user user 655 May 19 23:35 .profile -rw------- 1 user user 568 May 20 01:41 .viminfo
对于公钥身份验证,要么将所有用户的公钥复制到所有服务器和每个新用户,这很难实现并且很容易出错,要么只对所有用户的 ssh 公钥和所有主机的公钥进行签名,这听起来也很困难。我创建了一个用户 CA 和主机 CA,并将它们部署到所有服务器,并使用 puppet 签署了所有主机公钥,用户应该负责签署他们的密钥,也许将用户 CA 放在 Web 应用程序中并使用curl。