本节书摘来自异步社区《Linux/UNIX OpenLDAP实战指南》一书中的第2章,第2.7节,作者:郭大勇著,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.7 OpenLDAP用户以及与用户组相关的配置
添加用户和用户组的方式有两种。一种是将系统用户通过migrationtools工具生成LDIF文件并结合ldapadd命令导入OpenLDAP目录树中,生成OpenLDAP用户。另一种通过自定义LDIF文件并通过OpenLDAP命令进行添加或者修改操作。本节分别介绍两种方法的实现来完成OpenLDAP用户的添加。
2.7.1 通过migrationtools实现OpenLDAP用户及用户组的添加
migrationtools开源工具通过查找/etc/passwd、/etc/shadow、/etc/groups生成LDIF文件,并通过ldapadd命令更新数据库数据,完成用户添加。具体步骤如下。
1)安装migrationtools工具。
# yum install migrationtools -y
2)创建OpenLDAP根域条目。
# /usr/share/migrationtools/migrate_base.pl > base.ldif
读者可以编辑base.ldif进行修改,将不需要的条目删除,然后通过ldapadd导入至OpenLDAP目录树。
3)添加用户用于生成OpenLDAP用户。
此处添加系统普通用户。通过以下脚本添加user1~user5。
# vim adduser.sh
#!/bin/bash
# Add system user
for ldap in {1..5};do
if id user${ldap} &> /dev/null;then
echo "System account already exists"
else
adduser user${ldap}
echo user${ldap} | passwd --stdin user${ldap} &> /dev/null
echo "user${ldap} system add finish"
fi
done
# chmod +x adduser.sh
# ./adduser.sh
# id user1
uid=502(user1) gid=502(user1) groups=502(user1)
4)配置migrationtools配置文件。
migrationtools配置文件
$DEFAULT_MAIL_DOMAIN = "padl.com";
# Default base
$DEFAULT_BASE = "dc=padl,dc=com";
将以上内容修改为自己所定义的域名,例如本章以gdy.com为准。
$DEFAULT_MAIL_DOMAIN = "gdy.com";
# Default base
$DEFAULT_BASE = "dc=gdy,dc=com";
5)通过migrationtools工具生成LDIF模板文件并生成系统用户及组LDIF文件。
# tail -n 5 /etc/passwd > system
# /usr/share/migrationtools/migrate_passwd.pl system people.ldif
# tail -n 10 /etc/group > group
# /usr/share/migrationtools/migrate_group.pl group group.ldif
6)查看生成的LDIF文件。
查看生成的people.ldif条目信息。
# head -n 5 people.ldif
dn: uid=user1,ou=People,dc=gdy,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$HtmehKu8$g.vhVs1PjCwzvpO7PiWxaY1E0sQH4M2fOwr/NKAI20q/
c3rWgEbdzPfQS/Bxznhi1IpwMZbQrcNDTt5NFUEYd.
shadowLastCh ange: 16497
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 502
gidNumber: 502
homeDirectory: /home/user1
查看生成的group.ldif条目信息。
# head -n 20 group.ldif
dn: cn=user1,ou=Group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user1
gidNumber: 502
dn: cn=user2,ou=Group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user2
gidNumber: 503
读者可以将不需要的条目信息进行修改,满足当前需求,然后通过ldapdd导入。
7)利用ldapadd导入模板文件中的内容。
导入用户LDIF文件至OpenLDAP目录树中,生成用户。
# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -f people.ldif
Enter LDAP Password: 输入OpenLDAP管理员账号密码 (cn=Manager)
adding new entry "uid=user1,ou=People,dc=gdy,dc=com"
adding new entry "uid=user2,ou=People,dc=gdy,dc=com"
adding new entry "uid=user3,ou=People,dc=gdy,dc=com"
adding new entry "uid=user4,ou=People,dc=gdy,dc=com"
adding new entry "uid=user5,ou=People,dc=gdy,dc=com"
导入组LDIF文件至OpenLDAP目录树中,生成用户组。
# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -f group.ldif
Enter LDAP Password: #输入OpenLDAP管理员账号密码(cn=Manager)
adding new entry "cn=user1,ou=Group,dc=gdy,dc=com"
adding new entry "cn=user2,ou=Group,dc=gdy,dc=com"
adding new entry "cn=user3,ou=Group,dc=gdy,dc=com"
adding new entry "cn=user4,ou=Group,dc=gdy,dc=com"
adding new entry "cn=user5,ou=Group,dc=gdy,dc=com"
8)查询添加的OpenLDAP用户信息。
# ldapsearch -LLL -x -D 'cn=Manager,dc=gdy,dc=com' -W -b 'dc=gdy,dc=com' 'uid=user1'
Enter LDAP Password:
dn: uid=user1,ou=People,dc=gdy,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JEh0bWVoS3U4JGcudmhWczFQakN3enZwTzdQaVd4YVkxRTBzUUg
shadowLastChange: 16497
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 502
gidNumber: 502
homeDirectory: /home/user1
至此通过migrationtools工具实现了本地用户和本地组的迁移,并且通过ldapsearch成功过滤(filter)查询匹配user1的用户属性信息。关于filter的更多信息,可以通过查询ldapsearch的帮助手册来了解。
2.7.2 自定义LDIF文件添加用户及用户组条目
前面通过定义LDIF文件添加用户和用户组信息,然后通过ldapdd进行添加,同样也可通过下面的方法进行添加。作者强力建议通过定制LDIF文件添加目录树条目。具体步骤如下。
1)定义LDIF用户文件。
前面通过head –n 20 people.ldif定义符合要求的用户属性信息,然后通过ldapadd进行导入即可,这里不做过多阐述。同样可以通过下面这种方法来实现用户和用户组的添加。
cat << EOF | ldapadd -x -D cn=Manager,dc=gdy,dc=com -W
dn: uid=gdy,ou=people,dc=gdy,dc=com
objectClass: posixAccount
objectClass: shadowAccount
objectClass: person
objectClass: inetOrgPerson
cn: System
sn: 郭
givenName: 大勇
displayName: 郭大勇
uid: gdy //OpenLDAP的uid信息
userPassword: password@123 //账号的密码,可以使用密文也可以使用明文,这里使用明文进行演示
uidNumber: 1001 //账号的UID
gidNumber: 1001 //账号的GID
gecos: System Manager
homeDirectory: /home/gdy //用户的主目录指定
loginShell: /bin/nologin //用户登录的SHELL
shadowLastChange: 16020 //用户最后一次修改密码的时间,自1970/1/1起,密码被修改的天数
shadowMin: 0 //密码将允许修改的天数(0代表任何时间都可以进行修改)
shadowMax: 999999 //系统强制用户修改为新密码的天数(1代表永远都不能进行修改)
shadowWarning: 7 //密码过期7天进行报告
shadowExpire: -1 //密码过期后,账号状态
employeeNumber: ****** //工号相关信息
homePhone: 0512******** //家庭电话
mobile: ************** //手机号码信息
mail: dayong_guo@126.com //邮箱地址
postalAddress: 上海 //住址相关信息
initials: Test
EOF
Enter LDAP Password: === 此处要输入Manager用户的密码
adding new entry "uid=gdy,ou=people,dc=gdy,dc=com"
此LDIF文件中存在中文字符,建议使用Linux dos2unix命令进行转换,例如dos2unix -k –n file new_file。作者建议尽可能不要使用中文字符进行添加,而使用英文添加。
2)查看当前OpenLDAP服务器目录树信息。
[root@mldap01 ~]# ldapsearch -x -LLL -H ldap:/// -b dc=gdy,dc=com dn
dn: dc=gdy,dc=com
//基准目录树信息
dn: ou=people,dc=gdy,dc=com
//用户或人员组,相当于系统组概念