<b>NIS</b><b>向LDAP遷移</b>
一、LDAP對objectClass要求
1、posxiAccount(對應NIS的/etc/passwd)
預設情況下,NIS的資訊存儲在/etc/passwd ,/etc/shadow 和 /etc/group中正因為LDAP中有posixAccount這個屬性類的存在,才使得NIS的使用者資訊能向LDAP中轉移成為可能。
objectClasses: ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
SUP top AUXILIARY
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description )
2、inetOrgPerson
因為posixAccount是一個輔類,不能單獨的在一個條目中。有兩個經常使用的對象類型被使用到(作為主類,一般使用的是inetOrgPerson )
account (from RFC 1274) #提供的屬性較少
inetOrgPerson (from RFC 2798) #可以存放家目錄的資訊,提供更多的屬性
3、shadowAccount(對應NIS的/etc/shadow)
shadowAccount
objectClasses: ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'
MUST uid
MAY ( userPassword $ shadowLastChange $ shadowMin $
shadowMax $ shadowWarning $ shadowInactive $
shadowExpire $ shadowFlag $ description )
#這個也是個輔類。通常是和posixAccount一起使用的。
4、posixGroup (對應NIS的/etc/group)
PosixGroup
bjectClasses: ( 1.3.6.1.1.1.2.2 NAME 'posixGroup'
SUP top STRUCTURAL
MUST ( cn $ gidNumber )
MAY ( userPassword $ memberUid $ description )
#這個是一個主類,可以單獨使用,也就是必須存在組的資訊。
posixGroup和靜态組,靜态組也可以屬于posixGroup。
二、将nis使用者檔案導出成普通使用者檔案
1、環境
環境是station2.example.com使我們LDAP服務端, station3.example.com是我們的用戶端,server2.example.com是NIS 服務端。
#本地的或者NIS上的使用者,或者别的使用者,或者本地的賬号,也可以遷移到LDAP中。
也可以在遷移LDAP到後,可以直接自動挂載
2、導入NIS帳号導入到檔案(passwd、shadow、group)
[root@station2 ~]# ypcat passwd
guest2001:!!:2001:2001::/home/nfs/guest2001:/bin/bash
guest2003:!!:2003:2003::/home/nfs/guest2003:/bin/bash
guest2002:!!:2002:2002::/home/nfs/guest2002:/bin/bash
#檢視nis的passwd資訊
[root@station2 ~]# ypcat passwd > passwd.nis
[root@station2 ~]# ypcat group >group.nis
3、将passwd.nis修改成文普通的/etc/passwd檔案
[root@station2 ~]# cat /etc/passwd|grep netsword
netsword:x:500:500::/home/netsword:/bin/bash
[root@station2 ~]# sed -r 's/\$1\$.{8}\$.{22}/x/g' passwd.nis >passwd.nis-new
#就是将中間的密碼為改為x
4、将passwd.nis導入生成shadow檔案
[root@station2 ~]# cat /etc/shadow|grep netsword
netsword:$1$k7ac9beO$dfb6gWKN.4pZm7.IjeARI/:15067:0:99999:7:::
[root@station2 ~]# echo $[$(date +%s)/86400]
15078
#普通的使用者的格式,除了15078是變化的其餘都是固定的,而15078就是從1970年1月1号到現在一共是多少天,其中的%s是顯示的是到現在是多少秒
[root@station2 ~]# for i in $(cut -d: -f1-2 passwd.nis)
> do echo "$i:$[$(date +%s)/86400]:0:99999:7:::"
> done>shadow.nis
#導入生成shadow檔案
三、生成ldif檔案,導入到ldap
1、遷移腳本
[root@station2 ~]# cd /usr/share/openldap/migration/
#遷移腳本使用openldap-client中提供的, /usr/share/openldap/migration/為腳本存放目錄,其中README檔案,可以用來進行查考使用
2、修改主的遷移配置檔案(全局配置檔案)
[root@station2 migration]# vi migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "example.com";
#這裡是将導入到LDAP的使用者自動添加一個郵箱:如guest2001@ example.com
$DEFAULT_BASE = "dc=station2,dc=example,dc=com"; #定義我們dc
$EXTENDED_SCHEMA = 1; #使用擴充的,否則有很多屬性是不能用的
$NAMINGCONTEXT{'group'} = "ou=Groups";
#在這裡添加一個s ,因為我們LDAP就是叫Groups
3、将LDAP的資訊導出
[root@station2 migration]# ./migrate_base.pl >/root/base.ldif
4、修改遷移的密碼配置檔案
[root@station2 migration]# vim migrate_passwd.pl
sub read_shadow_file
{
open(SHADOW, "/root/nis/shadow.nis") || return; #指定要導入的shadow
while(<SHADOW>) {
chop;
($shadowUser) = split(/:/, $_);
$shadowUsers{$shadowUser} = $_;
}
close(SHADOW);
}
5、将/root/passwd.nis-new檔案導成ldif資料庫檔案
[root@station2 migration]# ./migrate_passwd.pl /root/passwd.nis-new /root/passwd.ldif
6、将/root/group.nis檔案導成ldif檔案
[root@station4 migration]# ./migrate_group.pl /root/group.nis /root/group.ldif
7、将ldif導入到LDAP中
[root@station2 ~]# ldapadd -x -W -c -f base.ldif
[root@station2 ~]# ldapadd -x -W -c -f passwd.ldif
[root@station2 ~]# ldapadd -x -W -c -f group.ldif
四、利用ldap添加使用者
1、生成使用者ldif檔案
[root@station2 ~ ]# ldapsearch -x 'uid=user1' -Z -LLL -W >user5.ldif
Enter LDAP Password:
[root@station2 ~ ]# vi user5.ldif
dn: uid=user5,ou=People,dc=station2,dc=example,dc=com
uid: user5
cn: user5
sn: user5
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 15078
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 3006
gidNumber: 3006
homeDirectory: /home/nfs/user5
userPassword:: e1NTSEF9TWh1WWJpU01jbjVIYkRKOVVqanFlTnhOYVRwZ3RRUE0vV1FLQXc9PQ=
=
#根據user1的屬性生成user5的屬性檔案
2、添加使用者
[root@station2 ~ ]# ldapadd -x -c -f user5.ldif -W
adding new entry "uid=user5,ou=People,dc=station2,dc=example,dc=com"
3、建立user5的屬組user5
[root@station2 ~ ]# ldapsearch -x "cn=user2" -Z -W -LLL >group-user5.ldif
[root@station2 ~ ]#vi group-user5.ldif
dn: cn=user5,ou=Groups,dc=station2,dc=example,dc=com
objectClass: posixGroup
userPassword:: e2NyeXB0fSE=
[root@station2 ~]# ldapadd -x -c -f group-user5.ldif -W
adding new entry "cn=user5,ou=Groups,dc=station2,dc=example,dc=com"
4、實作ldap使用者登入時自動建立使用者home目錄
[root@station2 ~]# vi /etc/pam.d/system-auth
session required pam_mkhomedir.so skel=/etc/skel umask=0077
#添加以上行,skel=/etc/skel告訴pam_mkhomedir.so拷貝/etc /skel下的檔案到使用者的home目錄;umask=0077選項讓pam_mkhomedir.so以700權限建立 home目錄;建立使用者home目錄的父目錄必須存在,否則pam_mkhomedir.so将不能建立使用者home目錄。
5、修改建立使用者密碼
[root@station2 ~]# ldappasswd -x -w secret 'uid=user1,ou=People,dc=station2,dc=example,dc=com' -S -W -Z
New password:
Re-enter new password:
Result: Success (0)
#互動式
[root@station2 ~]# ldappasswd -x -w secret 'uid=user1,ou=People,dc=station2,dc=example,dc=com' -s 'user1' -W -Z
#密碼設定為user5
[user5@station2 ~]$ passwd
Changing password for user user5.
Enter login(LDAP) password:
New UNIX password:
Retype new UNIX password:
LDAP password information changed for user5
passwd: all authentication tokens updated successfully.
#用戶端使用者自行修改自己密碼
五、實作ldap使用者登入時自動挂載使用者home目錄
環境:nfs共享目錄為192.168.32.32:/home/guests
ldap客戶機為station3
1、 編寫自動挂載檔案(automount.ldif)
[root@station2 ~]# vi automount.ldif
dn: ou=Mounts,dc=station2,dc=example,dc=com
objectclass: organizationalUnit
objectclass: top
ou: Mounts
dn: nisMapName=auto.master,ou=Mounts,dc=station2,dc=example,dc=com
objectclass: nisMap
nisMapName: auto.master
dn: cn=/home/guests,nisMapName=auto.master,ou=Mounts,dc=station2,dc=example,dc=com
objectclass: nisObject
nisMapEntry: ldap:station2.example.com:nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=
com --timeout=60
cn: /home/guests
dn: nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=com
nisMapName: auto.guests
dn: cn=/,nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=com
cn: /
nisMapEntry: -rw,soft,intr 192.168.32.32:/home/guests/&
2、 導入到ldap中
[root@station2 ~]# ldapadd -x -c -f automount.ldif –W
3、 客戶配置
[root@station3 ~]# vi /etc/nsswitch.conf
automount: files ldap
#設定通過查詢ldap進行自動挂載,而不是查詢/etc/auto.master檔案配置
[root@station3 ~]#service autofs restart
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/545305