部署 LDAP

LDAP 可以集中管理用户信息,使得多个服务器能够共享相同的用户数据库。

服务端

  1. 安装 LDAP:

    sudo apt update
    sudo apt install slapd ldap-utils
    

    配置 LDAP:

    sudo dpkg-reconfigure slapd  # 一般会自动运行
    
    DNS domain name: lab.local
    Organization name: Home Lab
    Administrator password: 自设
    
  2. 初始化目录结构:

    vim base.ldif
    
    dn: ou=people,dc=lab,dc=local
    objectClass: organizationalUnit
    ou: people
    
    dn: ou=groups,dc=lab,dc=local
    objectClass: organizationalUnit
    ou: groups
    
    • dn: Distinguished Name
    • dc: Domain Component
    • ou: Organizational Unit

    导入:

    ldapadd -x -D "cn=admin,dc=lab,dc=local" -W -f base.ldif
    
  3. 添加 SSH 公钥 schema:

    vim openssh-lpk.ldif
    
    dn: cn=openssh-lpk,cn=schema,cn=config
    objectClass: olcSchemaConfig
    cn: openssh-lpk
    olcAttributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13
      NAME 'sshPublicKey'
      DESC 'OpenSSH public key'
      EQUALITY octetStringMatch
      SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
    olcObjectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0
      NAME 'ldapPublicKey'
      DESC 'OpenSSH LPK objectclass'
      SUP top
      AUXILIARY
      MAY ( sshPublicKey $ uid ) )
    

    导入:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f openssh-lpk.ldif
    
  4. 添加用户:

    slappasswd  # 生成用户密码哈希(可选)
    vim users.ldif
    
    dn: uid=alice,ou=users,dc=lab,dc=local
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    objectClass: ldapPublicKey
    cn: Alice Zhang
    sn: Zhang
    uid: alice
    uidNumber: 1001
    gidNumber: 1001
    homeDirectory: /home/alice
    loginShell: /bin/bash
    sshPublicKey: ssh-ed25519 AAAAC3Nz... alice@laptop
    userPassword: {SSHA}<hash>
    
    dn: cn=alice,ou=groups,dc=lab,dc=local
    objectClass: posixGroup
    cn: alice
    gidNumber: 1001
    memberUid: alice
    
    • cn: Common Name
    • sn: Surname

    导入:

    ldapadd -x -D "cn=admin,dc=lab,dc=local" -W -f users.ldif        # 导入
    ldapsearch -x -LLL -H ldap://localhost -b "dc=lab,dc=local" uid  # 验证
    

客户端

  1. 安装 SSSD:

    sudo apt install sssd sssd-ldap libpam-sss libnss-sss
    

    一些教程安装 nslcd/nscd,这是比较过时的配置,新系统建议使用 SSSD

    配置 SSSD:

    sudoedit /etc/sssd/sssd.conf
    
    [sssd]
    services = nss, pam, ssh
    config_file_version = 2
    domains = lab.local
    
    [domain/lab.local]
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    
    ldap_uri = ldap://ldap-server.lab.local
    ldap_search_base = dc=lab,dc=local
    ldap_user_search_base = ou=people,dc=lab,dc=local
    ldap_group_search_base = ou=groups,dc=lab,dc=local
    
    ldap_user_ssh_public_key = sshPublicKey
    
    cache_credentials = True
    enumerate = False
    
    sudo chmod 600 /etc/sssd/sssd.conf
    sudo systemctl enable --now sssd
    
  2. NSS 与 PAM 集成。

    确保如下行包含 sss

    sudoedit /etc/nsswitch.conf
    
    passwd:         files systemd sss
    group:          files systemd sss
    shadow:         files systemd sss
    
  3. PAM 启用 SSS 认证:

    sudo pam-auth-update
    
    [*] SSS authentication
    [*] Create home directory on login
    
  4. 验证:

    getent passwd alice
    getent group alice
    sudo -u nobody /usr/bin/sss_ssh_authorizedkeys alice
    

备份

sudo slapcat > backup.ldif   # 导出 LDAP
sudo slapadd -l backup.ldif  # 恢复 LDAP
posted @ 2025-08-21 21:14  Undefined443  阅读(31)  评论(0)    收藏  举报