NIS向LDAP迁移
一、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'
SUP top AUXILIARY
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
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.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:
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