Chinaunix首页 | 论坛 | 博客
  • 博客访问: 655112
  • 博文数量: 121
  • 博客积分: 1425
  • 博客等级: 中尉
  • 技术积分: 2059
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-03 15:34
文章分类

全部博文(121)

文章存档

2018年(1)

2017年(2)

2016年(1)

2015年(11)

2014年(14)

2013年(47)

2012年(45)

分类: 系统运维

2015-12-03 10:14:25

配置LADP


LDAP相关的缩写如下:
dn – distinguished name(区别名,主键)
o – organization(组织-公司)
ou – organization unit(组织单元-部门)
c – countryName(国家)
dc – domainComponent(域名)
sn – sure name(真实名称)
cn – common name(常用名称)


CentOS 6 的安装


$ yum install -y openldap openldap-servers openldap-clients


#拷贝LDAP配置文件
$ cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
$ cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


$ vim /etc/sysconfig/ldap    #确保SLAPD_LDAP和SLAPD_LDAPI=yes


#创建LDAP管理员密码
$ slappasswd




服务端守护进程:
slapd:主 LDAP 服务器
slurpd:负责与复制 LDAP 服务器保持同步的服务器
--------------------------------------------------------------------------------------------
客户端程序:
ldapadd:打开一个到 LDAP 服务器的连接,绑定、修改或增加条目
ldapsearch:打开一个到 LDAP 服务器的连接,绑定并使用指定的参数进行搜索
对本地系统上的数据库进行操作的几个程序:
slapadd:将以 LDAP 目录交换格式(LDIF文件)指定的条目添加到 LDAP 数据库中
slapcat:打开 LDAP 数据库,并将对应的条目输出为 LDIF 文件格式
-----------------------------------------------------------------------------------------------


$ vim /etc/openldap/slapd.conf


#设置目录树的后缀
找到by dn.exact="cn=Manager,dc=my-domain,dc=com" read这一行
改为by dn.exact="cn=admin,dc=ibm,dc=com" read


找到suffix "dc=my-domain,dc=com"这一行
改为suffix "dc=ibm,dc=com"


#设置LDAP管理员的DN(这里管理员的名字是admin)
找到rootdn "cn=Manager,dc=my-domain,dc=com"这一行
改为rootdn "cn=admin,dc=ibm,dc=com"


#设置LDAP管理员的密码
将rootpw secret改为 {SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKMn
口令也可以用明文,或者通过运行slappasswd以便替换配置文件里面的密码


#同时请确保有如下两行
pidfile /var/run/openldap/slapd.pid  
argsfile /var/run/openldap/slapd.args




---------------------------------------------------------------------------
#备份/etc/openldap/slapd.d目录
$ cp -rfa /etc/openldap/slapd.d /etc/openldap/slapd.d.bak  
$ rm -rf /etc/openldap/slapd.d/*


#分配权限
$ chown -R ldap.ldap /etc/openldap
$ chown -R ldap.ldap /var/lib/ldap
-----------------------------------------------------------------------------




$ service slapd start  #启动下服务,用来生成/var/lib/ldap/*.bdb文件


#测试并生成配置文件
$ slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
$ chown -R ldap:ldap /etc/openldap/slapd.d


#重启服务
$ service slapd restart && chkconfig --level 2345 slapd on
-----------------------------------------------------------------------------------
#创建一个系统用户,稍候尝试在客户端用此用户登陆
$ useradd ldapuser1
$ passwd ldapuser1






该用户仅仅是系统上存在的用户(存储在/etc/passwd和/etc/shadow上),并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。


但LDAP只能识别后缀为ldif的文件(也是文本文件),故不能直接使用/etc/passwd和/etc/shadow。需要migrationtools这个工具把这两个


文件转变成ldif文件。


---------------------------------------------------------------------------------


$ yum install migrationtools -y
$ cd /usr/share/migrationtools/


$ vim migrate_common.ph    #ubuntu下该文件位于/etc/migrationtools
将DEFAULT_MAIL_DOMAIN的值修改为ibm.com
将DEFAULT_BASE的值修改为dc=ibm,dc=com
---------------------------------------------------------------------------------------------
#使用迁移脚本migrate_base.pl为目录创建基本的数据结构
./migrate_base.pl > /etc/openldap/base.ldif


#将/etc/passwd和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下
$ ./migrate_passwd.pl /etc/passwd > /etc/openldap/passwd.ldif
$ ./migrate_group.pl /etc/group > /etc/openldap/group.ldif




#把这三个ldif文件导入到LDAP,然后LDAP的数据库里就有了我们想要的用户
$ ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f /etc/openldap/base.ldif
$ ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f /etc/openldap/passwd.ldif
$ ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f /etc/openldap/group.ldif




#查看数据库中基本的层次结构
$ ldapsearch -x -H ldap://127.0.0.1 -b 'dc=ibm,dc=com'


$ service slapd restart




----------------------------------------------------------------------------------------------------------
配置NFS服务端


$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)


$ vim /etc/exports   #写入一行
/home/bear       10.10.1.0/24(rw,sync,no_root_squash)


$ /etc/init.d/rpcbind start && chkconfig --level 2345 rpcbind on
$ /etc/init.d/nfs start  && chkconfig --level 2345 nfs on




----------------------------------------------------------------------------------------------------
LDAP客户端配置


系统命名服务(NSS)需要配置为使用 LDAP 来解析诸如用户和组帐号之类的资源。例如,在运行命令 ls -l 时,如果某个文件 inode 给出


文件的所有者是 “user 501”,那么命名服务就需要将 “uid 501” 解析成用户名,并在 ls 命令输出结果中输出。通常来说,这是通过


查找 /etc/passwd 文件中的所有用户帐号实现的。由于用户现在都存储在 LDAP 目录中,因此系统需要配置成同时对 passwd 文件和 LDAP 


目录中的帐号进行解析。这种功能是通过 /usr/lib/libnss_ldap.so 库提供的。


$ yum install pam_ldap nss-pam-ldapd openldap-clients -y


$ vim /etc/openldap/ldap.conf,修改如下两行
添加
BASE:dc=test,dc=com
URL:10.10.1.14    #此处为LDAP Server IP


$ vim /etc/nslcd.conf,修改如下两行
uri ldap://10.10.1.14
base dc=navinfo,dc=com


#让 NSS 服务使用 OpenLDAP 服务器
$ vim /etc/nsswitch.conf
passwd:     files ldap
shadow:     files ldap
group:      files ldap


#启用LDAP身份验证机制
#也可以通过运行authconfig-tui命令打开一个图形化的界面来配置
$ vim /etc/sysconfig/authconfig
USESYSNETAUTH=yes  #是否启用本地登陆功能,这个随意
USESHADOW=yes
USELOCAUTHORIZE=yes
USELDAP=yes
USELDAPAUTH=yes
USEMD5=yes        #这一项没找到,未设置
USEMKHOMEDIR=yes
PASSWDALGORITHM=sha512   #密码算法,这里我没有改


------------------------------------------------------------------------------------------------


设置让 PAM 身份验证服务使用 OpenLDAP 服务器
在该文件的auth,account,password,session四段中pam_unix.so模块后添加pam_ldap.so模块(注意添加位置是在pam_unix.so模块后),为


用户登录自动创建家目录。使身份验证先对本地的/etc/passwd检查用户帐号,然后再检查LDAP服务器为用户登录自动创建家目录。使身份验


证先对本地的/etc/passwd检查用户帐号,然后再检查LDAP服务器。还必须在会话(SESSION)阶段增加pam_mkhomedir.so模块,为用户登录


自动创建宿主目录。


$ cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
$ vim /etc/pam.d/system-auth
auth        sufficient    pam_ldap.so


account     [default=bad success=ok user_unknown=ignore] pam_ldap.so


password    sufficient    pam_ldap.so use_authtok


session     optional      pam_ldap.so
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022 #不能少
注意,即使配置了NFS或者autofs服务,pam_mkhomedir.so不可少。否则当用户登陆时,家目录不会挂载,会自动切换到根目录。


-----------------------------------------------------------------------------------------------------------------
启用名称缓存服务nscd


#通过网络方式查询用户占用带宽且有时延,开启名称缓存服务可以节省网络资源提高查询效率
$ service nslcd start && chkconfig --level 2345 nslcd on
--------------------------------------------------------------------------------------------
客户端登陆测试,看看能否读取到服务器上的user信息


$ getent passwd |grep ldapuser1


如果测试失败,可以通过/var/log/messages查看错误日志


客户端配置autofs,实现ldapuser1登录成功后,能够访问本地家目录
---------------------------------------------------------------------




#客户端也需要安装nfs用于实现挂载
$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)


$ yum install autofs


$ vim /etc/auto.master
添加一行/home   /etc/auto.misc


$ vim /etc/auto.misc
添加一行*               -fstype=nfs             10.10.1.14:/home/&


$ service autofs start && chkconfig --level 2345 autofs on


关于autofs的一些说明:
1,autofs启动以后,用户的家目录并不会主动挂载,但当用户通过ldap登陆成功以后,远程的家目录便会自动挂载,很神奇;
2,跟上面一样,当系统重启后,autofs不会主动挂载,但当用户通过ldap登陆成功以后,远程的家目录便会自动挂载;
3,autofs服务停止后,已经挂载的目录,仍处于挂载状态;
4,客户端无须开启nfs服务;
5,用户的家目录无需预先在ldap client上面建好;
6,用户登陆时,家目录由pam创建。由autofs负责将ldap server上的家目录挂载至本地;
7,用户登陆时,如果如果autofs未启动的话,客户仅能进入一个由pam创建的家目录,ldap server上的家目录并不会挂载至本地;
8,用户的家目录建立放到一个统一的文件夹里,例如/home,不要把用户的家目录放到多个不同的父目录,例如/home、/opt等,否则autofs


仅能挂载第一个登陆用户的家目录,后面的用户会无法登陆ldap client(亲测);


-----------------------------------------------------------------------------


#########################################
LDAP用户管理


服务端用户管理:
删除用户:ldapdelete -x -D "cn=Manger,dc=ibm,dc=com" -W "uid=用户名,ou=People,dc=ibm,dc=com"


客户端实现增删改查
查询 ldapsearch -x -b 'dc=ibm,dc=com'
##################################################################








**************************************************
可能会遇到的问题
**************************************************


提示ldap_bind: Invalid credentials (49)
出现这个错误的原因有很多,建议从以下两个方面入手:
(1)上述命令中的cn和dc是否输入正确,以及密码是否输入正确
(2)执行下如命令,重新生成配置文件


rm -fr /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d/
/etc/init.d/slapd restart
提示:删除/etc/openldap/slapd.d/目录下的内容,并不会导致ldap数据库的丢失,实际上,ldap数据库存储位置由主配置文件里的


directory项指定。




提示ldap_add: Undefined attribute type(17)
additional info: dn: attribute type undefined
解决方法:ldif文件写入错误,每一行末尾不能有空格,中间空着的那一行不能有空格,最后一行不能是空行。

阅读(1822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~