天天看點

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,如需轉載請自行聯系原作者