RH423-7 NIS向LDAP迁移

简介:

 NISLDAP迁移

一、LDAPobjectClass要求

1posxiAccount(对应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 )

 

2inetOrgPerson

因为posixAccount是一个辅类,不能单独的在一个条目中。有两个经常使用的对象类型被使用到(作为主类,一般使用的是inetOrgPerson 

account (from RFC 1274)           #提供的属性较少

inetOrgPerson (from RFC 2798)    #可以存放家目录的信息,提供更多的属性

 

 3shadowAccount(对应NIS/etc/shadow

shadowAccount  

objectClasses: ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' 

 SUP top AUXILIARY

 MUST uid

 MAY ( userPassword $ shadowLastChange $ shadowMin $ 

 shadowMax $ shadowWarning $ shadowInactive $ 

 shadowExpire $ shadowFlag $ description )

#这个也是个辅类。通常是和posixAccount一起使用的。

 

4posixGroup  (对应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.comNIS 服务端。

#本地的或者NIS上的用户,或者别的用户,或者本地的账号,也可以迁移到LDAP中。

也可以在迁移LDAP到后,可以直接自动挂载

 

2、导入NIS帐号导入到文件(passwdshadowgroup

[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

#查看nispasswd信息

 

[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就是从197011号到现在一共是多少天,其中的%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

Enter LDAP Password:

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

Enter LDAP Password:

 

[root@station2 ~ ]#vi group-user5.ldif

dn: cn=user5,ou=Groups,dc=station2,dc=example,dc=com

objectClass: posixGroup

objectClass: top

cn: user5

gidNumber: 3006

userPassword:: e2NyeXB0fSE=

 

[root@station2 ~]# ldapadd -x -c -f group-user5.ldif -W

Enter LDAP Password:

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.so700权限创建 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:

Enter LDAP Password:

Result: Success (0)

#交互式

 

[root@station2 ~]#  ldappasswd -x -w secret 'uid=user1,ou=People,dc=station2,dc=example,dc=com' -s 'user1' -W -Z

Enter LDAP Password:

Result: Success (0)

#密码设置为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: top

objectclass: nisMap

nisMapName: auto.master

 

dn: cn=/home/guests,nisMapName=auto.master,ou=Mounts,dc=station2,dc=example,dc=com

objectclass: top

objectclass: nisObject

nisMapEntry: ldap:station2.example.com:nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=

com --timeout=60

nisMapName: auto.master

cn: /home/guests

 

dn: nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=com

objectclass: top

objectclass: nisMap

nisMapName: auto.guests

 

 

dn: cn=/,nisMapName=auto.guests,ou=Mounts,dc=station2,dc=example,dc=com

objectclass: top

objectclass: nisObject

cn: /

nisMapEntry: -rw,soft,intr 192.168.32.32:/home/guests/&

nisMapName: auto.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


相关文章
|
数据安全/隐私保护
|
PHP Apache 数据安全/隐私保护
|
存储 关系型数据库 Linux