NIS账号在LDAP上迁移

实验步骤介绍
1.先让目录服务加入到NIS域中获得账户,组信息
2.把信息重定向到/tmp目录下取名为passwd.nis和group.nis
3.把passwd.nis分割成两个文件passwd.nis-new和shadow.nis(为什么要分割,因为passwd.nis中的信息包含了密码和账户,我们需要密码信息独立成一个文件,账户独立成一个文件,为了日后用迁移命令转成ldif文件)
4.用迁移命令转成ldif文件
5.导入ldif文件
6.被认证的用户访问ldap服务器
 
小知识点先预热一下
为啥要把NIS里的账号迁移到LDAP中去
1.NIS只能存储账户信息也就是用户名和密码家目录,而LDAP可以额外存储用户信息例如电话,邮箱,地址,邮编等。你可以获得更多有用的用户资料
2.NIS每次添加一次账户就要重建一次数据库,而LDAP添加账户后立即更新,所见即所得。
 
我们能把什么数据从NIS中转移出去呢
/etc/passwd
/etc/group
/etc/shadow
/etc/auto.*
 
请注意这个家伙posixAccount
1.在ldap中登录名用uid属性存放,uid不是账户id号码,账户id用uidNumber属性存放。
2.cn和gecos都可以表示全名,这总是让人有些困惑。cn属性存放真实的名字real name,而gecos存放的cn,roomNumber,telephoneNumber,homeNumber
3.posixAccount是一个辅类,描述的就是/etc/passwd的一行用户记录
4.posixAccount是一个辅类,那就不能在一条记录中单独存在必须有一个主类。这里有两个主类可选,account和inetOrgPerson
*account选择是你当你确定把ldap作为nis的替代品来管理账号信息
*inetOrgPerson选择是你决定把很多用户的信息存储下来,例如电话,地址,邮箱,邮编,国家,区域等。因为inetOrgPerson可以提供更多的属性来更好的描述一个用户。
顺便注意一下还有同党shadowAccount
1.shadowAccount中的属性就是描述了/etc/shadow中的一条记录
2.当记录中有shadowAccount这个辅类后就会把密码的相关属性(从/etc/shadow得到的)写在这条记录中
 
 
 
我们先在ldap服务器上规定好加密机制用crypt
image
 
添加一个新的管理账户client-root,给客户端提升权限。
1如果客户端用普通用户登录getent时是无法得到有关shadow密码信息的,而如果是root登录则可以.
2.如果客户端用普通用户登陆ldapsearch时是无法得到有关shadow密码信息的,root也不行,除非指定下图这个client-root专门的用户来做这件事情,因为在ldap服务器中做了访问控制规定只有这个用户能在查询时得到密码信息。
image
image
image
image
image
image
image
 
 
 
开始做NIS迁移,先从NIS从导出你要的所有信息passwd,group
image
这条命令是把passwd.nis的前2列截取出来作为shadow.nis文件的前2列,命令的最终样子和/etc/shadow格式一致 image
image
这条命令是把psswd.nis文件第二列密码加密部分变成x,也就是和/etc/passwd格式保持一致
image
image
这里是在配置迁移脚本最终导出成ldif数据库文件被ldap服务器所用
vim  /usr/share/openldap/migration/migrate_base.pl
image
image
vim  /usr/share/migration/migrate_passwd.pl
image
image
vim  /tmp/base.ldif注视掉前面2条记录,因为已经在目录服务中了
image
开始把生成的ldif文件添加到目录服务中
image
image
现在我们就要允许被认证的用户(能够提供用户名密码的用户)访问目录服务器
image
这一设置将涉及到以下的几个配置文件
/etc/ldap.conf
image
image
因为是被认证的用户来访问目录服务所以需要检查ca中心的证书以及匹配与服务器之间加密的方式,做一点小小的改动
checkpeer :  on  (开启检查ca证书功能)
tls_cacertfile  /etc/openldap/cacerts/my-ca.crt (把my-ca.crt拷贝到此目录)
pam_password  crypt (目录服务用得这种加密方式,那客户端就要匹配日后好协商)
rootbinddn   uid=client-root,dc=server109,dc=example,dc=com(在目录服务中建立的一个有点大权限的账户可以得到很多密码相关的属性信息,而匿名用户就无法看到了,给rootbinddn用户一个密码存放在/etc/ldap.secret中,chmod 0600权限,chown  root:root所属)
/etc/nsswitch.conf
image
/etc/pam.d/system-auth
image
现在我们来做几个小测试
第一个看看root登陆使用getent命令有什么不同
现在你用getent  passwd可以看到账户信息了,并且getent  shadow是可以看到密码信息的。
image
image
第二个看看普通用户登陆
image
如果你发现getent得不到账户信息,那是因为账户在ldap服务器上没有开启posixAccount属性,你看getent得到的信息是不是有用户名,密码,家目录,uid,gid,shell。看下图的用户属性是不是这些属性都有呢
image
第三个看看普通用户和root查询是否可以看到shadow信息呢
image
image
第四个我们来看看我指定ldap服务器的用户来查询, 上面两图不管你是普通用户还是root你都是本地系统账户,而你查询ldap的数据库要想得到你要的信息就必须指定ldap上的账户,跟你本地什么账户登陆没任何关系。
image
现在我们来做一个测试,利用ssh客户端远程登录192.168.0.209这台ftp服务器,用guest2001账户。
image
image
image
你能不能在远程利用ldap验证guest2001登陆成功,功劳都要归功于guest2001在ldap服务器上拥有一个posixAccount信息,大家会很疑惑了,在User选项中已经设置了用户名和密码难道用户还不能登陆吗?回答是的确不能登陆!!!因为一个用户登陆用户名和密码作为验证信息是核查身份之用,而同时你登陆系统言外之意就是进入系统的家目录,使用什么命令解释器,你属于哪个组,账户号码uid多少,加载用户bash_profile.你想如果没有这些信息,就算你身份验证成功了,你登陆系统后你总有个落脚点呆着吧。所以第二个图就是有关于账户登陆信息的。所以账户登陆=身份核查+落脚点。
image

你可能感兴趣的:(服务器,职场,休闲)