yum install openldap-* db4-* -y
sed -i "/local4.*/d" /etc/rsyslog.conf
cat >> /etc/rsyslog.conf << EOF
local4.*                        /var/log/slapd.log
EOF
service rsyslog restart
cd /etc/openldap/
cp  /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf
slappasswd    输入完密码后,返回一串密文,先保存到剪贴板,之后要复制到LDAP配置文件中使
New password: 
Re-enter new password: 
{SSHA}hEH5ZdU2atsKNI0kUniBdU/9eCf+VYkB

vim /etc/openldap/slapd.conf
# enable server status monitoring (cn=monitor)
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin,dc=test,dc=com" read
        by * none


#######################################################################
# database definitions
#######################################################################


database        bdb
suffix          "dc=test,dc=com"
checkpoint      1024 15
rootdn          "cn=admin,dc=test,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg
rootpw {SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKMn
.......
保存退出
cp  /usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIG
rm -rf /etc/openldap/slapd.d/*     删除默认/etc/openldap/slapd.d下面的所有内容,否则后面在使用ldapadd的时候会报错
/etc/init.d/slapd restart
chkconfig slap on
chkconfig slapd on
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap /etc/openldap/
测试并生成配置文件
slaptest  -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d   
config file testing succeeded
chown -R ldap:ldap /etc/openldap/slapd.d
/etc/init.d/slapd restart
至此,用户仅仅是系统上存在的用户(存储在/etc/passwd和/etc/shadow上),并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。
但LDAP只能识别特定格式的文件 即后缀为ldif的文件(也是文本文件),所以不能直接使用/etc/passwd和/etc/shadow。 
需要migrationtools这个工具把这两个文件转变成LDAP能识别的文件

yum install migrationtools -y
cd /usr/share/migrationtools/
vim migrate_common.ph
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "test.com";


# Default base
$DEFAULT_BASE = "dc=test,dc=com";

K.下面利用pl脚本将/etc/passwd 和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下
# ./migrate_base.pl > /tmp/base.ldif
# ./migrate_passwd.pl  /etc/passwd > /tmp/passwd.ldif
# ./migrate_group.pl  /etc/group > /tmp/group.ldif
L.下面就要把这三个文件导入到LDAP,这样LDAP的数据库里就有了我们想要的用户
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/base.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/passwd.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/group.ldif
过程若无报错,则LDAP服务端配置完毕

M.重启slapd完成配置
# service slapd restart

N.现安装NFS,并把ldapuser1的家目录做NFS共享.
默认REDHAT已安装
# yum install nfs* -y
配置NFS共享:
# vi /etc/exports
--------------
/home/ldapuser1         *(rw,no_root_squash)
--------------
重启nfs服务:
# service rpcbind restart
# service nfs restart
PS.本地需要做ldap控制的账号都要导入到LDAP DB中,否则客户端配置无法正常识别登录。

客户端配置有两种方法:

使用authconfig-tui ,也就是setup命令中的 "Authentication configuration"
手动配置
无论哪种方式,都要先安装客户端:

yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap
第一种方法:
在命令行中输入authconfig-tui或者setup命令中选择"Authentication configuration",选中 ”Use LDAP“和“Use LDAP Authentication”,
之后点击NEXT,输入服务器地址和“BASE DN”即可。全部图形化添加,非常简单,推荐使用。

authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap://192.168.18.150,
ldap://10.84.126.150,ldap://192.168.200.10 --ldapbasedn="ou=Common Linux servers,dc=synnex,dc=org"  --update

第二种方法需要修改文件较多:
编辑/etc/openldap/ldap.conf,加入:

URI ldap://10.11.15.78/   //LDAP服务器地址
BASE dc=52os,dc=net
TLS_CACERTDIR /etc/openldap/cacerts
编辑/etc/nslcd.conf,加入:

uri ldap://10.11.15.78/
base dc=52os,dc=net
ssl no
tls_cacertdir /etc/openldap/cacerts
系统命名服务(NSS)配置使用LDAP,编辑 /etc/nsswitch.conf,修改如下几项为:

passwd:     files ldap
shadow:     files ldap
group:      files ldap
netgroup:   files ldap
automount:  files ldap
编辑/etc/pam.d/system-auth,修改如下几项为:

auth        sufficient    pam_ldap.so use_first_pass
account     required      pam_unix.so broken_shadow
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
password    sufficient    pam_ldap.so use_authtok
session     required      pam_unix.so
session     optional      pam_ldap.so  #这一行要加在pam_unix.so下面
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022 #自动创建用户的宿主目录
编辑/etc/sysconfig/authconfig:

USELDAPAUTH=yes
USELDAP=yes
修改好之后启动nslcd服务,并设置开机启动

service nslcd start  && chkconfig nslcd on
验证:
test用户只有在ldap server上有,在客户端如果也能查看到,就说明设置成功:

id test
或者使用:

getent passwd |grep test
这时就能用test账号登录客户端了。

三、其它设置:
1.日志配置

openLDAP默认是不打日志的,要配合rsyslog才能打日志。
在/etc/openldap/slapd.conf 中设置日志级别,加入:

loglevel 1
具体的loglevel解释,可以:

man slapd.conf
在/etc/rsyslog.conf最后加入:

local4.*  /var/log/slapd.log
重启rsyslog和slapd:

service rsyslog restart
service slapd restart
2.sudo管理

在openldap的服务器端拷贝sudo schema到openldap配置目录

cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
加载sudo schema,在/etc/openldap/slapd.conf  添加:

include         /etc/openldap/schema/sudo.schema
重新生产配置文件:

rm -rf /etc/openldap/slapd.d/*
sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
service slapd restart
新建一个sudo.ldif文件,内容为:

dn: ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: organizationalUnit
ou: Sudoers

dn: cn=defaults,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty

dn: cn=test,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: test
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: test
上面的内容按实际情况更改,注意每行最后不要有空格,ldif里的大小写不敏感。我允许sudo的用户是test,允许使用全部命令,允许所有主机sudo
导入sudo.ldif记录:

ldapadd -x -D "cn=admin,dc=52os,dc=net" -W -f sudo.ldif
设置客户端:
在/etc/sudo-ldap.conf中加入:

uri ldap://10.11.15.78
sudoers_base ou=Sudoers,dc=52os,dc=net
在/etc/nsswitch.conf中加入:

Sudoers: files ldap
在客户端用切换到test用户,测试一下sudo是否可用

3.用户目录自动挂载

使用Openldap的好处就是在服务器端建好一个用户后,各个客户端去服务器端验证,不需要在创建该用户。验证通过后会在客户端/home目录下
创建该用户的宿主目录,虽然是同一用户,但目前的配置来说,每个客户端和服务器之间宿主目录是独立的,并没有共享服务器端的宿主目录。
举例来说,我在服务器端的宿主目录中上传了一份代码,如果客户端共享服务器的宿主目录,当用户在任意一个客户端登录时,都会看到服务器上
宿主目录的代码,管理起来就十分方便了。

配置用户目录共享,需要在服务器端安装nfs,在客户端安装autofs。
安装并启动nfs:

yum install nfs-utils
service rpcbind start
service nfslock start
service nfs start
启动好后用chkconfig加入开机启动。
编辑/etc/exports文件,加入:

/home  *(rw,sync)
要注意用户需在nfs服务器/home下有宿主目录,否则autofs无法挂载。"*"可以写成具体的ip或ip段,设置好后重启nfs服务,测试并查看:

showmount -e localhost
服务器端的nfs配置完成。
客户端要安装autofs和nfs-utils,但nfs服务不用启动:

yum install nfs-utils autofs
配置autofs,在/etc/auto.master最后加入:

/home   /etc/auto.nfs
新建一个/etc/auto.nfs文件,内容为:

*   -fstype=nfs                      10.11.15.78:/home/&
启动autofs:

service autofs start
用su - test测试是否正常切换,在用mount命令查看挂载:

10.11.15.78:/home/test on /home/test type nfs (rw,vers=4,addr=10.11.15.78,clientaddr=10.11.15.79)
说明挂载成功了,客户端的用户目录和服务器端的用户目录内容就能正常同步了

其它的一些设置,用到在写。
1.安全设置主要有两点:1.启用TLS加密 2.关闭匿名查询
2.主备高可用配置
3.web管理工具:phpldapadmin和LDAP Account Manager

四、一些问题
1.用户不能建立宿主目录
提示 “could not chdir to home directory /home/user: No such file or directory”
解决方法:
在 /etc/pam.d/password-auth 和/etc/pam.d/system-auth 都要加入:

session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
2.导入ldif文件时报错
ldap_bind: Invalid credentials (49)
这种情况是管理员密码错误或者rootdn信息错误

3.配置autofs后,切换su - test 报错

Creating directory '/home/test'.
Unable to create and initialize directory '/home/test'.
su: warning: cannot change directory to /home/test: No such file or directory
这是由于nfs服务器上/home下没有test用户的宿主目录造成的,且权限要正确,否则autofs无法挂载目录,用户也无法在客户端登录。



3. LDAP数据库相关增删查改操作:
操作LDAP的方式有很多,下面以bash下用openldap-clients 套件提供的工具来进行。



1、初始化数据
这一步通常是由特定的应用程序根据其自身使用的需要创建的。包括两部分的内容:
a、创建.schema文件,该文件定义了后面ldap 中存放对象的类型和属性,这已经在上面sldapd.conf文件中定义;
b、初始化数据结构,其结构必须由上面的.schema文件已经定义的,并由应用程序读取和使用。


初始化文件通常为.ldif 结尾,称为LDIF数据交换格式。这种格式是行界定、冒号分隔的属性-值对。例如:


引用
dn: dc=ldapuser1,ou=People,dc=test,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
....


导入时,执行:
# ldapadd -x -h 192.168.1.10 -D 'cn=admin,dc=test,dc=com' -W -f info.ldif


ldapadd 命令各参数含义如下:
-x 为使用简单密码验证方式
-D 指定管理员DN(与slapd.conf中一致)
-W 为管理员密码,可以使用-w password 直接输入密码
-f 为初始化数据LDIF的文件名
-h 为操作的服务器IP地址

2、搜索操作
LDAP是读优化数据库,因此,读的速度很快,也很常用。但与关系数据库不同,其以树结构形式读取数据,若不添加过滤,会显示匹配节点下
所有节点的内容。若以ldif 的形式表达,刚开始可能不太习惯。
# ldapsearch -x -b 'dc=test,dc=com'


首先要留意的是,ldapsearch 不需要提供验证信息。因为正如前面提到的,LDAP 默认供任何人可读。
-b 后面定义搜索节点位置,即从该节点往其子节点进行搜索


3、身份验证
修改或添加内容需进行用户验证,可通过下面的命令确认验证信息:
# ldapwhoami -x -D 'cn=ldapuser1,dc=test,dc=com' -w 'yourpasswd'
dn:cn=admin,dc=test,dc=com
Result: Success (0)


4、修改操作
修改内容通常由LDIF 文件提供。因此,可先用ldapsearch 导出节点内容:


# ldapsearch -x -LLL -b 'dc=test,dc=com'
-LLL 表示不输出注释内容,以便后续重新导入。

其实也可以使用文件进行批量修改,我们只要把需要修改信息写入文件即可,比如:
dn: uid=ldapuser1,ou=People,dc=test,dc=com
changetype: modify
replace: uidNumber
uidNumber: 1000

把以上内容写入test.ldif中,运行如下命令:

ldapmodify -x -D "cn=admin,dc=test,dc=com" -w yourpasswd -f test.ldif


a、ldapadd 与ldapmodify -a 作用相同
b、如果在添加或修改时,报Naming violation等错误,则说明添加或修改的内容不符合schema中定义的对象属性规范,需修改后才能重新操作。



5、删除操作
删除时,给出DN即可:
# ldapdelete -x -D 'cn=admin,dc=test,dc=com' -w yourpasswd -r 'dc=test,dc=com'
-r 表示以递归模式删除,即删除该节点下面的所有子节点。


web管理
yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap phpldapadmin
vim /etc/httpd/conf.d/phpldapadmin.conf 
Order Deny,Allow
  Allow from all

/etc/init.d/httpd restart
vim /etc/phpldapadmin/config.php
397行
//$servers->setValue('server','name','Local LDAP Server');
$servers->setValue('login','attr','dn');

登录
用户 cn=admin,dc=test,dc=com
密码 之前输入的

web修改密码
在LDAP中,默认情况下用户无权修改自己的密码,如果用户自行修改密码,会遇到Result: Insufficient access (50)
vim /etc/openldap/slapd.conf
修改配置文件,在database config前添加如下内容(注意格式!)

access to attrs=userPassword
    by self write
    by anonymous auth
    by * none

access to * by * read

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
service slapd restart

https://github.com/koppor/phpLdapPasswd
http://tools.ltb-project.org/attachments/download/800/ltb-project-self-service-password-0.9.tar.gz

results matching ""

    No results matching ""