为 AD 用户创建 Unix 本地组

为 AD 用户创建 Unix 本地组

我正在针对 Samba 4 AD 实施 LDAP 身份验证,以便管理员登录我们的 Linux 服务器。

我成功配置了 PAM,libpam-ldapdlibnss_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。但我不知道该怎么做。在本地创建组是次要的,因为我将创建一个管理组并将它们全部添加到其中。

主要问题是:

如何将用户主要组从 重命名gidNumberuid

多谢。

答案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。

相关内容