天天看点

Openldap导入数据(一)

在安装完openldap之后,默认ldap中是没有数据的,需要管理员进行添加,当然添加的方法也不止一种,这里先介绍第一种方法:从本地系统添加用户到ldap中。

<code>[root@ldapsrv01 ~]</code><code># ldapsearch -x -b "dc=contoso,dc=com"</code>

<code># extended LDIF</code>

<code>#</code>

<code># LDAPv3</code>

<code># base &lt;dc=contoso,dc=com&gt; with scope subtree</code>

<code># filter: (objectclass=*)</code>

<code># requesting: ALL</code>

<code># search result</code>

<code>search: 2</code>

<code>result: 32 No such object</code>

<code># numResponses: 1</code>

这是安装完openldap之后对ldap进行的数据查询的结果。

步骤一:安装migrationtools软件包

从本地系统添加用户到ldap的方法,其实就是先添加用户到本地操作系统中,然后通过pl脚本将这些用户转换为ldap能够识别的ldif文件格式,最后通过ldapadd命令导入到ldap中,从而完成ldap数据的导入,要使用pl脚本将本地用户信息转换为ldif文件格式,首先需要安装一个软件,名字为migrationtools。

<code>yum </code><code>install</code> <code>migrationtools -y</code>

<code># 直接yum安装即可</code>

<code>[root@ldapsrv01 ~]</code><code># rpm -ql migrationtools</code>

<code>/usr/share/doc/migrationtools-47</code>

<code>/usr/share/doc/migrationtools-47/README</code>

<code>/usr/share/doc/migrationtools-47/migration-tools</code><code>.txt</code>

<code>/usr/share/migrationtools</code>

<code>/usr/share/migrationtools/migrate_aliases</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_all_netinfo_offline</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_netinfo_online</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_nis_offline</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_nis_online</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_nisplus_offline</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_nisplus_online</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_offline</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_all_online</code><code>.sh</code>

<code>/usr/share/migrationtools/migrate_automount</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_base</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_common</code><code>.ph</code>

<code>/usr/share/migrationtools/migrate_fstab</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_group</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_hosts</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_netgroup</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_netgroup_byhost</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_netgroup_byuser</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_networks</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_passwd</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_profile</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_protocols</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_rpc</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_services</code><code>.pl</code>

<code>/usr/share/migrationtools/migrate_slapd_conf</code><code>.pl</code>

使用rpm -ql命令可以看到,该软件安装后在/usr/share/migrationtools/目录下生成了很多脚本文件,有shell也有perl,而我们就是使用其中的perl脚本完成ldap文件的生成。

步骤二:修改migrationtools配置文件

<code>cp</code> <code>/usr/share/migrationtools/migrate_common</code><code>.ph </code><code>/usr/share/migrationtools/migrate_common</code><code>.ph.bak</code>

<code>#备份一下脚本</code>

<code>sed</code> <code>-i </code><code>'s/padl.com/contoso.com/g'</code> <code>/usr/share/migrationtools/migrate_common</code><code>.ph</code>

<code>#修改默认的域名padl.com为我的域名,这里为contoso.com,所以只把padl替换为contoso</code>

<code>sed</code> <code>-i </code><code>'s/dc=padl,dc=com/dc=contoso,dc=com/g'</code> <code>/usr/share/migrationtools/migrate_common</code><code>.ph</code>

<code>#还是域名信息的修改</code>

修改之后,要确保下面两条的值为服务器真实的域名,如下:

<code>$DEFAULT_MAIL_DOMAIN = </code><code>"contoso.com"</code><code>;</code>

<code>$DEFAULT_BASE = </code><code>"dc=contoso,dc=com"</code><code>;</code>

步骤三:生成base.ldif文件并导入到ldap中

然后首先生成base.ldif文件

<code>/usr/share/migrationtools/migrate_base</code><code>.pl &gt; base.ldif</code>

<code>[root@ldapsrv01 ~]</code><code># cat base.ldif</code>

<code>dn: </code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>dc</code><code>: contoso</code>

<code>objectClass: </code><code>top</code>

<code>objectClass: domain</code>

<code>dn: ou=Hosts,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Hosts</code>

<code>objectClass: organizationalUnit</code>

<code>dn: ou=Rpc,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Rpc</code>

<code>dn: ou=Services,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Services</code>

<code>dn: nisMapName=netgroup.byuser,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>nismapname: netgroup.byuser</code>

<code>objectClass: nisMap</code>

<code>dn: ou=Mounts,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Mounts</code>

<code>dn: ou=Networks,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Networks</code>

<code>dn: ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: People</code>

<code>dn: ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Group</code>

<code>dn: ou=Netgroup,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Netgroup</code>

<code>dn: ou=Protocols,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Protocols</code>

<code>dn: ou=Aliases,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>ou: Aliases</code>

<code>dn: nisMapName=netgroup.byhost,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>nismapname: netgroup.byhost</code>

但是这其中有很多信息都不是我所需要的,所以可以删除不需要的信息,修改完成之后,如下:

<code>dn: cn=tech,ou=group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>objectClass: posixGroup</code>

<code>description: Technology</code>

<code>gidNumber: 10001</code>

<code>cn: tech</code>

现在,把修改好的base.ldif导入到ldap中,通过使用ldapadd命令来完成。

<code>[root@ldapsrv01 ~]</code><code># ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f base.ldif </code>

<code>Enter LDAP Password: </code>

<code>adding new entry </code><code>"dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"ou=People,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"ou=Group,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"cn=tech,ou=group,dc=contoso,dc=com"</code>

导入完成之后,我再进行一次简单查询:

<code># contoso.com</code>

<code># People, contoso.com</code>

<code># Group, contoso.com</code>

<code># tech, Group, contoso.com</code>

<code>dn: cn=tech,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>result: 0 Success</code>

<code># numResponses: 5</code>

<code># numEntries: 4</code>

可以看到,ldap中已经存在之前导入的ou和group了,下面准备用户和组的信息的导入。

步骤四:添加本地系统用户

这里我使用一个脚本(这个脚本不是我写的,而且批量生成用户也算是个简单的脚本吧,怪不得RHCE考这个,原来这里能用到啊。)来批量生成几个用户,然后将这些生成的用户导入到ldap中。

<code>[root@ldapsrv01 ~]</code><code># cat addusers.sh </code>

<code>#!/bin/bash  </code>

<code># Add system user  </code>

<code>for</code> <code>ldap </code><code>in</code> <code>{1..5};</code><code>do</code>  

<code>    </code><code>if</code> <code>id</code> <code>user${ldap} &amp;&gt; </code><code>/dev/null</code><code>;</code><code>then</code>  

<code>        </code><code>echo</code> <code>"System account already exists"</code>  

<code>    </code><code>else</code>  

<code>        </code><code>adduser user${ldap} -u $((10000 + $ldap))  </code>

<code>        </code><code>echo</code> <code>user${ldap} | </code><code>passwd</code> <code>--stdin user${ldap} &amp;&gt; </code><code>/dev/null</code>  

<code>        </code><code>echo</code> <code>"user${ldap} system add finish"</code>  

<code>    </code><code>fi</code>  

<code>done</code>  

<code>[root@ldapsrv01 ~]</code><code># ./addusers.sh </code>

<code>user1 system add finish</code>

<code>user2 system add finish</code>

<code>user3 system add finish</code>

<code>user4 system add finish</code>

<code>user5 system add finish</code>

<code>[root@ldapsrv01 ~]</code><code># id user1</code>

<code>uid=10001(user1) gid=10001(user1) </code><code>groups</code><code>=10001(user1)</code>

<code>[root@ldapsrv01 ~]</code><code># id user2</code>

<code>uid=10002(user2) gid=10002(user2) </code><code>groups</code><code>=10002(user2)</code>

<code>[root@ldapsrv01 ~]</code><code># id user3</code>

<code>uid=10003(user3) gid=10003(user3) </code><code>groups</code><code>=10003(user3)</code>

<code>[root@ldapsrv01 ~]</code><code># id user4</code>

<code>uid=10004(user4) gid=10004(user4) </code><code>groups</code><code>=10004(user4)</code>

<code>[root@ldapsrv01 ~]</code><code># id user5</code>

<code>uid=10005(user5) gid=10005(user5) </code><code>groups</code><code>=10005(user5)</code>

步骤五:生成people.ldif和group.ldif文件

<code>[root@ldapsrv01 ~]</code><code># tail -5 /etc/passwd</code>

<code>user1:x:10001:10001::</code><code>/home/user1</code><code>:</code><code>/bin/bash</code>

<code>user2:x:10002:10002::</code><code>/home/user2</code><code>:</code><code>/bin/bash</code>

<code>user3:x:10003:10003::</code><code>/home/user3</code><code>:</code><code>/bin/bash</code>

<code>user4:x:10004:10004::</code><code>/home/user4</code><code>:</code><code>/bin/bash</code>

<code>user5:x:10005:10005::</code><code>/home/user5</code><code>:</code><code>/bin/bash</code>

<code>[root@ldapsrv01 ~]</code><code># tail -5 /etc/passwd &gt; testuser</code>

将这5个用户保存到testuser中,稍后会对这5个本地账户生成ladp用户文件。

<code>[root@ldapsrv01 ~]</code><code># tail -5 /etc/group</code>

<code>user1:x:10001:</code>

<code>user2:x:10002:</code>

<code>user3:x:10003:</code>

<code>user4:x:10004:</code>

<code>user5:x:10005:</code>

<code>[root@ldapsrv01 ~]</code><code># tail -5 /etc/group &gt; testgroup</code>

将这5个组保存到testgroup中,同样稍后会用到。

<code>/usr/share/migrationtools/migrate_passwd</code><code>.pl testuser people.ldif</code>

<code>#根据testuser生成ldap用户数据文件people.ldif</code>

<code>/usr/share/migrationtools/migrate_group</code><code>.pl testgroup group.ldif</code>

<code>#根据testgroup生成ldap组的数据文件group.ldif</code>

注意,这两条命令的执行一定要在testuser/testgroup目录下,否则要加上全路径,不然找不到文件。

<code>[root@ldapsrv01 ~]</code><code># cat people.ldif </code>

<code>dn: uid=user1,ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>uid: user1</code>

<code>cn: user1</code>

<code>objectClass: account</code>

<code>objectClass: posixAccount</code>

<code>objectClass: shadowAccount</code>

<code>userPassword: {crypt}$6$Zs9mXyPO$QdqHS8nA</code><code>/vyjUdnSWLIpM4QiaPtsca1WllXu0dWQOgTza2Qr4TcC3sHbAbJsWI0KannwnM</code><code>.zFFroqxzglFfJT0</code>

<code>shadowLastChange: 17053</code>

<code>shadowMin: 0</code>

<code>shadowMax: 99999</code>

<code>shadowWarning: 7</code>

<code>loginShell: </code><code>/bin/bash</code>

<code>uidNumber: 10001</code>

<code>homeDirectory: </code><code>/home/user1</code>

<code>dn: uid=user2,ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>uid: user2</code>

<code>cn: user2</code>

<code>userPassword: {crypt}$6$0dHBettP$u4vVTWuVkRN8NGIecG5O7VSnFDCtcQF</code><code>/623lLY4Ih6RXORfFcRxh9fFdvssYeg6QAw1KY4LKtk</code><code>.zwzdVXH2rh1</code>

<code>uidNumber: 10002</code>

<code>gidNumber: 10002</code>

<code>homeDirectory: </code><code>/home/user2</code>

<code>dn: uid=user3,ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>uid: user3</code>

<code>cn: user3</code>

<code>userPassword: {crypt}$6$CXSotuEN$QSo5gJFlsJ6uZhqaK8qDto.5u2WXwvWSV1JqVP9WMOUVhxZXY8I.XMEUojwGGwpSYY1OtY2Sl</code><code>/J7dzSk1ey6F/</code>

<code>uidNumber: 10003</code>

<code>gidNumber: 10003</code>

<code>homeDirectory: </code><code>/home/user3</code>

<code>dn: uid=user4,ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>uid: user4</code>

<code>cn: user4</code>

<code>userPassword: {crypt}$6$ycSPE1gY$ofWgCYtRk9s5LnLKnR4FR5ld10wI6riT2u0jA8wytMm07am1NZreNdhEAJb8.erz4HasyhlsGqecBNdfx5x6S0</code>

<code>uidNumber: 10004</code>

<code>gidNumber: 10004</code>

<code>homeDirectory: </code><code>/home/user4</code>

<code>dn: uid=user5,ou=People,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>uid: user5</code>

<code>cn: user5</code>

<code>userPassword: {crypt}$6$xVZ5hNeH$GzlC19E6Tiq</code><code>/4Y3HmtCwRjjKVzvcI2IA</code><code>.z.QPqhwHU.mSV1UT7uZiaVG8HelvbgZJsn3Z1te75C</code><code>/DNZ</code><code>.C0Ov50</code>

<code>uidNumber: 10005</code>

<code>gidNumber: 10005</code>

<code>homeDirectory: </code><code>/home/user5</code>

这是生成的people.ldif文件,里面是用户的信息,包括密码等信息,如果某些字段不需要,也可以删除。

<code>[root@ldapsrv01 ~]</code><code># cat group.ldif </code>

<code>dn: cn=user1,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>userPassword: {crypt}x</code>

<code>dn: cn=user2,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>dn: cn=user3,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>dn: cn=user4,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

<code>dn: cn=user5,ou=Group,</code><code>dc</code><code>=contoso,</code><code>dc</code><code>=com</code>

这是生成的group.ldif文件,里面是用户组的信息,这里的gidNumber就是在本地操作系统中的gid。

因为我之前已经添加了一个tech的用户组,它的gidNumber是10001,会跟即将导入的user1组的gidNumber冲突,所以我先删除tech用户组。

<code>[root@ldapsrv01 ~]</code><code># ldapdelete -x -D "cn=admin,dc=contoso,dc=com" -W "cn=tech,ou=Group,dc=contoso,dc=com"</code>

<code># numResponses: 4</code>

<code># numEntries: 3</code>

已经没有tech用户组了,可以开始导入用户和用户组了。

步骤六:导入ldif文件到ldap中

<code>[root@ldapsrv01 ~]</code><code># ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f people.ldif </code>

<code>adding new entry </code><code>"uid=user1,ou=People,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"uid=user2,ou=People,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"uid=user3,ou=People,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"uid=user4,ou=People,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"uid=user5,ou=People,dc=contoso,dc=com"</code>

导入people.ldif文件,操作成功。

<code>[root@ldapsrv01 ~]</code><code># ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f group.ldif </code>

<code>adding new entry </code><code>"cn=user1,ou=Group,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"cn=user2,ou=Group,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"cn=user3,ou=Group,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"cn=user4,ou=Group,dc=contoso,dc=com"</code>

<code>adding new entry </code><code>"cn=user5,ou=Group,dc=contoso,dc=com"</code>

导入group.ldif文件,操作成功。

步骤七:搜索ldap用户和组,验证操作是否成功

再对ldap进行一次用户检索:

<code>[root@ldapsrv01 ~]</code><code># ldapsearch -LLL -x -D "cn=admin,dc=contoso,dc=com" -W -b "dc=contoso,dc=com" '(uid=*)'</code>

<code>userPassword:: e2NyeXB0fSQ2JFpzOW1YeVBPJFFkcUhTOG5BL3Z5alVkblNXTElwTTRRaWFQdHN</code>

<code> </code><code>jYTFXbGxYdTBkV1FPZ1R6YTJRcjRUY0Mzc0hiQWJKc1dJMEthbm53bk0uekZGcm9xeHpnbEZmSlQw</code>

<code>userPassword:: e2NyeXB0fSQ2JDBkSEJldHRQJHU0dlZUV3VWa1JOOE5HSWVjRzVPN1ZTbkZEQ3R</code>

<code> </code><code>jUUYvNjIzbExZNEloNlJYT1JmRmNSeGg5ZkZkdnNzWWVnNlFBdzFLWTRMS3RrLnp3emRWWEgycmgx</code>

<code>userPassword:: e2NyeXB0fSQ2JENYU290dUVOJFFTbzVnSkZsc0o2dVpocWFLOHFEdG8uNXUyV1h</code>

<code> </code><code>3dldTVjFKcVZQOVdNT1VWaHhaWFk4SS5YTUVVb2p3R0d3cFNZWTFPdFkyU2wvSjdkelNrMWV5NkYv</code>

<code>userPassword:: e2NyeXB0fSQ2JHljU1BFMWdZJG9mV2dDWXRSazlzNUxuTEtuUjRGUjVsZDEwd0k</code>

<code> </code><code>2cmlUMnUwakE4d3l0TW0wN2FtMU5acmVOZGhFQUpiOC5lcno0SGFzeWhsc0dxZWNCTmRmeDV4NlMw</code>

<code>userPassword:: e2NyeXB0fSQ2JHhWWjVoTmVIJEd6bEMxOUU2VGlxLzRZM0htdEN3UmpqS1Z6dmN</code>

<code> </code><code>JMklBLnouUVBxaHdIVS5tU1YxVVQ3dVppYVZHOEhlbHZiZ1pKc24zWjF0ZTc1Qy9ETlouQzBPdjUw</code>

对用户组进行数据检索:

<code>[root@ldapsrv01 ~]</code><code># ldapsearch -LLL -x -D "cn=admin,dc=contoso,dc=com" -W -b "dc=contoso,dc=com" '(objectClass=posixGroup)'</code>

<code>userPassword:: e2NyeXB0fXg=</code>

已经将在本地使用shell脚本批量创建的5个用户(user1--user5)以及对应的5个用户组(user1--user5)都导入到ldap中,从本地系统添加用户到ldap中的操作完成。

本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1851186,如需转载请自行联系原作者