部署 LDAP
LDAP 可以集中管理用户信息,使得多个服务器能够共享相同的用户数据库。
服务端
-
安装 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: 自设 -
初始化目录结构:
vim base.ldifdn: ou=people,dc=lab,dc=local objectClass: organizationalUnit ou: people dn: ou=groups,dc=lab,dc=local objectClass: organizationalUnit ou: groupsdn: Distinguished Namedc: Domain Componentou: Organizational Unit
导入:
ldapadd -x -D "cn=admin,dc=lab,dc=local" -W -f base.ldif -
添加 SSH 公钥 schema:
vim openssh-lpk.ldifdn: 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 -
添加用户:
slappasswd # 生成用户密码哈希(可选) vim users.ldifdn: 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: alicecn: Common Namesn: 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 # 验证
客户端
-
安装 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 = Falsesudo chmod 600 /etc/sssd/sssd.conf sudo systemctl enable --now sssd -
NSS 与 PAM 集成。
确保如下行包含
sss:sudoedit /etc/nsswitch.confpasswd: files systemd sss group: files systemd sss shadow: files systemd sss -
PAM 启用 SSS 认证:
sudo pam-auth-update[*] SSS authentication [*] Create home directory on login -
验证:
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

浙公网安备 33010602011771号