配置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文件写入错误,每一行末尾不能有空格,中间空着的那一行不能有空格,最后一行不能是空行。