使用 LDAP 的原因之一就是用來管理 Linux 帳號,本文將介紹如何將 Linux 原有的帳號移轉到 LDAP。


Migrationtools

這是由 PDAL Software Pty Ltd 所開發出來的 LDAP 工具,透過這個工具就能將本機帳號移轉到 LDAP 裡。如果是使用 RedHat 或是 CentOS 的話,安裝 openldap-servers 時就會將這些工具安裝在 /usr/share/openldap/migration 底下,下面列出所有檔案與功能:


migrate_aliases.pl
轉換 /etc/aliases

migrate_all_netinfo_offline.sh
離線轉換並匯入 netinfo 資料

migrate_all_netinfo_online.sh
線上轉換並匯入 netinfo 資料

migrate_all_nis_offline.sh
離線轉換並匯入 nis 資料

migrate_all_nis_online.sh
線上轉換並匯入 nis 資料

migrate_all_nisplus_offline.sh
離線轉換並匯入 nisplus 資料

migrate_all_nisplus_online.sh
線上轉換並匯入 nisplus 資料

migrate_all_offline.sh
離線轉換並匯入 本機設定 資料

migrate_all_online.sh
線上轉換並匯入 本機設定 資料

migrate_automount.pl
轉換 automount 的相關設定

migrate_base.pl
用來產生 OU

migrate_common.ph
migrate 的設定檔

migrate_fstab.pl
轉換 /etc/fstab

migrate_group.pl
轉換 /etc/group

migrate_hosts.pl
轉換 /etc/hosts

migrate_netgroup.pl
netgroup 的設定檔

migrate_networks.pl
轉換 /etc/networks

migrate_passwd.pl
轉換 /etc/passwd

migrate_profile.pl
用來產生 LDAPv3 的設定項目

migrate_protocols.pl
轉換 /etc/protocols

migrate_rpc.pl
轉換 /etc/rpc

migrate_services.pl
轉換 /etc/services

migrate_slapd_conf.pl
用來產生 openldap 設定檔

migrate_all_online.sh
移轉的執行檔



設定 Migrationtools

Migrationtools 的設定檔是 migrate_common.ph 這個檔案,在移轉之前必須作ㄧ些設定才行。找到底下這兩個設定,依實際狀況修改:

$DEFAULT_MAIL_DOMAIN = "xiang.com";
用來定義 email 系統使用的網域名稱

$DEFAULT_BASE = "dc=xiang,dc=com";


這裡將只示範 Linux 帳號的移轉,而預設 Migrationtools 會將上述項目都移轉,因此必須做些修改讓 Migrationtools 只轉號 Linux 帳號。修改的方式很簡單,在 migrate_all_online.sh 裡找到下面這些項目:

#echo "Migrating aliases..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_aliases.pl        $ETC_ALIASES >> $DB
#echo "Migrating fstab..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_fstab.pl          $ETC_FSTAB >> $DB
echo "Migrating groups..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_group.pl           $ETC_GROUP >> $DB
echo "Migrating hosts..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_hosts.pl           $ETC_HOSTS >> $DB
echo "Migrating networks..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_networks.pl        $ETC_NETWORKS >> $DB
echo "Migrating users..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_passwd.pl          $ETC_PASSWD >> $DB
echo "Migrating protocols..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_protocols.pl       $ETC_PROTOCOLS >> $DB
echo "Migrating rpcs..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_rpc.pl             $ETC_RPC >> $DB
echo "Migrating services..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_services.pl        $ETC_SERVICES >> $DB
echo "Migrating netgroups..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup.pl        $ETC_NETGROUP >> $DB
echo "Migrating netgroups (by user)..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup_byuser.pl $ETC_NETGROUP >> $DB
echo "Migrating netgroups (by host)..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup_byhost.pl $ETC_NETGROUP >> $DB

因為只要轉換帳號,所以只要留下 group 與 passwd 有關的項目就好其他全部註解掉,修改過得應該會像這樣:

#echo "Migrating aliases..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_aliases.pl        $ETC_ALIASES >> $DB
#echo "Migrating fstab..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_fstab.pl          $ETC_FSTAB >> $DB
echo "Migrating groups..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_group.pl           $ETC_GROUP >> $DB
#echo "Migrating hosts..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_hosts.pl          $ETC_HOSTS >> $DB
#echo "Migrating networks..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_networks.pl       $ETC_NETWORKS >> $DB
echo "Migrating users..."
$PERL -I${INSTDIR} ${INSTDIR}migrate_passwd.pl          $ETC_PASSWD >> $DB
#echo "Migrating protocols..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_protocols.pl      $ETC_PROTOCOLS >> $DB
#echo "Migrating rpcs..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_rpc.pl            $ETC_RPC >> $DB
#echo "Migrating services..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_services.pl       $ETC_SERVICES >> $DB
#echo "Migrating netgroups..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup.pl       $ETC_NETGROUP >> $DB
#echo "Migrating netgroups (by user)..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup_byuser.pl        $ETC_NETGROUP >> $DB
#echo "Migrating netgroups (by host)..."
#$PERL -I${INSTDIR} ${INSTDIR}migrate_netgroup_byhost.pl        $ETC_NETGROUP >> $DB



執行移轉

執行 migrate_all_online.sh 這個 script 就會進入移轉程序,完整路徑為 /usr/share/openldap/migration/migrate_all_online.sh:


[root@Centos migration]# ./migrate_all_online.sh
執行 shell script
Enter the X.500 naming context you wish to import into: [dc=xiang,dc=com]
你的 LDAP Base DN 為何? [] 內為預設值,如果相符就不需要輸入
Enter the hostname of your LDAP server [ldap]: localhost
LDAP 主機名稱或 IP
Enter the manager DN: [cn=manager,dc=xiang,dc=com]:
管理者的 DN
Enter the credentials to bind with:
輸入密碼
Do you wish to generate a DUAConfigProfile [yes|no]? no
是否要建置 DUAConfigProfile


開始移轉會看到如下的資訊:

adding new entry "uid=nikon,ou=People,dc=xiang,dc=com"

adding new entry "uid=xiangyang,ou=People,dc=xiang,dc=com"

adding new entry "uid=david,ou=People,dc=xiang,dc=com"

adding new entry "uid=mary,ou=People,dc=xiang,dc=com"

adding new entry "uid=john,ou=People,dc=xiang,dc=com"

adding new entry "uid=lili,ou=People,dc=xiang,dc=com"

adding new entry "uid=lulu,ou=People,dc=xiang,dc=com"

adding new entry "uid=kyo,ou=People,dc=xiang,dc=com"

adding new entry "uid=abel,ou=People,dc=xiang,dc=com"

adding new entry "uid=alerk,ou=People,dc=xiang,dc=com"

adding new entry "uid=derek,ou=People,dc=xiang,dc=com"

adding new entry "uid=eric,ou=People,dc=xiang,dc=com"


這樣便完成移轉。



f
創作者介紹
創作者 xiangyang17 的頭像
xiangyang17

xiangyang17

xiangyang17 發表在 痞客邦 留言(0) 人氣()