本节书摘来自异步社区《Linux/UNIX OpenLDAP实战指南》一书中的第2章,第2.7节,作者:郭大勇著,更多章节内容可以访问云栖社区“异步社区”公众号查看
添加用户和用户组的方式有两种。一种是将系统用户通过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 -y2)创建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.ldif6)查看生成的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 //用户或人员组,相当于系统组概念