在安裝完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 <dc=contoso,dc=com> 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 > 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} &> </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} &> </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 > 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 > 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,如需轉載請自行聯系原作者