LDAP 导入 excel 用户表.note

noteId: WEBeae70378db5031f1dffe146956d38c09 · 原始路径:/ALL/Linux - A模块/服务配置/Open LDAP/LDAP 导入 excel 用户表.note · 图片:25 · 附件待处理:2

 
 
首先先将 LDAP配置起来
 
注意,如果其中有步骤出现错误,那么就需要将用户重新删除,然后再创建
 
·用户表:
 
如果 用户信息中的手机号码有括号,例如:“(080) 9811-923” ,那么在导入 Linux 之前,可以先使用 记事本将其替换成 空内容。
 
 
一、导入 用户表(单个 OU):
 
1、将 excel 表格 导入 Linux:
有时,如果 excel 中用户的密码是 “Pa$$worD”,在复制到 txt文档中时,$$ 就会自动换行,因此可以先在 excel文档中先用 Ctrl + H将密码内容替换为 Skills39 ,然后复制出文档之后再将其 替换回 Pa$$worD
 
(1)先将 excel 表格的内容(标题类型不用复制)复制到 txt 文件中
 
(2)使用 Ctrl+H 将 Tab 替换成 英文逗号","
 
(3)将 txt 文件 scp 到 Linux 中。
scp "G:\users.txt" root@192.168.28.198:/etc/ldap/users    //scp 到 /etc/ldap 目录下,文件名为 users
 
2、配置用户模板:
 
(1)复制模板:
# 复制模板:
vim /usr/sbin/ldapadduser
 
(2)创建一个新的文件,粘贴模板,并做修改:
vim /etc/ldap/usertemp
# inetOrgPerson 参数可以使用 grep -r Person ./slapd.d/* 直接查询到    //会区分大小写
 
注意:一定要将 dn 路径中的 uid 改为 cn !!!
原本:
修改后:
注意 inetorgperson 和 默认的 account 属性是冲突的
 
要添加sn和givenName,因为sn是姓氏 sn = Last Name
Given Name 是名 GivenName = First Name
(就算题目没有指定也一定要添加sn,否则添加用户会报错,givenName就无所谓)
有givenName的模板:
 
(3)在 ldapscripts.conf 文件中配置使用自定义用户模板:
vim /etc/ldapscripts/ldapscripts.conf
 
 
 
(4)编写脚本(全文背诵)
vim /etc/ldap/adduser.sh
# 脚本解释:与 Windows的导入用户差不多,不过Windows中表示列数是使用 a、b、c、d 等,而这里的脚本中是直接使用数字 1、2、3 ...
 
使用下面的脚本确实能够创建用户,但是没有将用户加入组,只是在用户属性中添加了gidNumber,让ldap能够识别组
要将用户加入组,需要再继续配置:
ldapaddusertogroup
 
如果有其它的属性,也是按照 这个 telephoneNumber 的模板写,换汤不换药
要查看支持的属性:cat /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{0\}core.ldif
 
 
·执行脚本:
. ./adduser.sh
 
·执行ldapaddusertogroup之后:
此时组的属性中就会出现 memberUid,这样才是正常的 posixGroup组属性的表现
 
 
·如果脚本写错了需要删除用户:
# 编辑脚本:
vim adduser.sh
 
 
 
(5)将脚本创建的 .ldif 文件导入 LDAP中:
ldapmodify -x -D "cn=admin,dc=cisco,dc=com" -w Skills39 -f phones.ldif
 
 
 
·查看 LDAP数据库:(OU、用户、组)
ldapsearch -x -H ldap://ldap.cisco.com -D "cn=admin,dc=cisco,dc=com" -w Skills39 -b "dc=cisco,dc=com"
 
 
 
 
 
 
 
二、多个 OU、多个Email,导入用户表:
此次使用的用户表:
 
其实没有多余太难的操作,也就是将先OU提前创建出来,并读取文件中的 OU变量,然后将OU那一行,也设置为变量即可
 
前提:先将 用户表复制成 txt 文件,然后传入 Linux中
导入多个OU的话,有两种方式:
1、将所有组导入 groups OU中 //推荐使用这个
2、将各自的组导入各自的OU中 //这种方式会导致一个问题,有的组的gidnumber会相同,ldap是使用gidnumber来识别组的,这样就会导致多个不同的OU下的不同的组在ldap中被识别为一个相同的组(因为gidNumber是一样的),同时也会导致后续其他服务我们配置使用 gidNumber进行组限制时会失效
因为每个OU中的组,gidNumber都是从 10000开始的,例如:sales OU中的抵押给组:sales组gidNumber是10000,IT OU中的第一个组:IT组gidNumber也是10000,这样他们就会被识别为同一个组
 
 
1、先批量导入 OU:
vim ouadd.sh
注意:定义的变量严格区分大小写
 
 
运行:. ./ouadd.sh
 
· 查看OU:
ldapsearch -x -H ldap://localhost -D "cn=admin,dc=wsc2022,dc=kr" -w Skills39 -b "dc=wsc2022,dc=kr"
 
 
2、编辑 ldapscritps.conf:
 
(1)先复制模板:
vim /usr/sbin/ldapadduser
 
(2)粘贴并编辑模板:
vim /etc/ldap/usertemp
注意 inetorgperson 和 默认的 account 属性是冲突的
 
(3)编辑 ldapscripts 文件:
vim /etc/ldapscripts/ldapscripts.conf
引用刚刚创建的模板:
 
·配置密码:
echo -n "Skills39" > /etc/ldapscripts/ldapscripts.passwd
# 不能直接vim编辑,会识别不到密码
 
 
3、导入用户(继续使用编辑的脚本)
这里需要使用到一个很重要的命令:“sed”
sed -i "s/^USUFFIX.*/USUFFIX=\"ou=Manager,dc=wsc2022,dc=kr\"/"
使用正则表达式匹配以 USUFFIX 开头的内容,将其替换为 USUFFIX="ou=Manager,dc=wsc2022,dc=kr" (因为这里有双引号,会和原本的双引号冲突,因此需要使用反斜杠将其转义)
 
(但是不建议使用单引号将 sed 的内容引起来,这样会使其读取不到定义的变量)
如果不想使用反斜杠进行转义,那么可以将 sed 外面的引号设置为单引号
sed -i 's/^USUFFIX.*/USUFFIX="ou=Manager,dc=wsc2022,dc=kr"/'
vim /etc/ldap/ouadd.sh
脚本sed 中的 注释内容不用写也可以
# 因为sed修改的是 ldapscripts,它是一个脚本,而不是服务,因此无需重启
## 因为使用脚本创建用户,会自动使用在脚本文件中定义好的OU,如果一次写死的话,如果有多个OU,那么就很不灵活
第一个 sed 的作用是修改 自定义的模板文件中的 mail字段,因为用户表中用户的mail字段不同,因此需要添加用户前去修改它
第二个 sed 的作用是修改 自定义的模板文件中的 sn(surname 姓)字段,因为 用户表中定义了该字段
第三个 sed 的作用是修改 默认创建ldap用户组时,组默认位于的OU,因为这次有多个OU
第四个 sed 的作用时修改 默认创建ldap用户时,用户默认位于的OU
 
变量使用双引号 引起来是因为有的变量中有空格,会影响命令
 
用户表中需要额外设置的属性有:surname、email、phone、title、city、samaccount
其中 mail属性和 surname属性都能再 usertemp 用户模板中定义(在脚本中修改即可)
 
 
运行脚本:
 
·导入输出的 ldif文件:
ldapmodify -x -D "cn=admin,dc=wsc2022,dc=kr" -w Skills39 -f replace.ldif
 
 
 
配置到这里了,只有两个属性没有导入:samAccount 、 city
(在LDAP中没有找到对应的属性)