天天看點

RH423-7 NIS向LDAP遷移

 <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 &gt; passwd.nis

[root@station2 ~]# ypcat group &gt;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 &gt;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)

&gt; do echo "$i:$[$(date +%s)/86400]:0:99999:7:::"

&gt; done&gt;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 &gt;/root/base.ldif

4、修改遷移的密碼配置檔案

[root@station2 migration]# vim migrate_passwd.pl

sub read_shadow_file

{

        open(SHADOW, "/root/nis/shadow.nis") || return;   #指定要導入的shadow

        while(&lt;SHADOW&gt;) {

                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 &gt;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 &gt;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/&amp;

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