CENTOS7-LDAP环境搭建

操作系统:Centos7.2

操作系统:Centos7.2 LDAP服务端:192.168.0.253 LDAP客户端:192.168.0.251 服务端与客户端hosts文件均有对方主机名与ip映射记录。

一、配置LDAP服务器

1. 安装LDAP及相关软件包

yum -y install openldap openldap-clients openldap-servers migrationtools openldap-devel nss-pam-ldapd bind-dyndb-ldap compat-openldap perl-LDAP krb5-server-ldap php-ldap openssl

2. 配置slapd主配置文件

openldap的主配置文件是/etc/openldap/slapd.conf文件,但是在新版的openldap中,采用了目录树的配置方式。 详情可参考: man 5 slapd-config 也就是将配置存放在/etc/openldap/slapd.d目录中。 配置的示例文件是 /usr/share/openldap-servers/slapd.ldif ,把它复制到 /root 目录下: cp /usr/share/openldap-servers/slapd.ldif /root/ 编辑 /root/slapd.ldif 文件内容,去掉注释,文件全文如下:   dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/openldap/slapd.args olcPidFile: /var/run/openldap/slapd.pid olcTLSCACertificatePath: /etc/openldap/certs olcTLSCertificateFile: /etc/openldap/certs/ldap.crt olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key   dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema   include: file:///etc/openldap/schema/corba.ldif include: file:///etc/openldap/schema/core.ldif include: file:///etc/openldap/schema/cosine.ldif include: file:///etc/openldap/schema/duaconf.ldif include: file:///etc/openldap/schema/dyngroup.ldif include: file:///etc/openldap/schema/inetorgperson.ldif include: file:///etc/openldap/schema/java.ldif include: file:///etc/openldap/schema/misc.ldif include: file:///etc/openldap/schema/nis.ldif include: file:///etc/openldap/schema/openldap.ldif include: file:///etc/openldap/schema/ppolicy.ldif include: file:///etc/openldap/schema/collective.ldif   dn: olcDatabase=frontend,cn=config objectClass: olcDatabaseConfig olcDatabase: frontend   dn: olcDatabase=config,cn=config objectClass: olcDatabaseConfig olcDatabase: config olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none   dn: olcDatabase=monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: monitor olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none   dn: olcDatabase=bdb,cn=config objectClass: olcDatabaseConfig objectClass: olcBdbConfig olcDatabase: bdb olcSuffix: dc=example,dc=com olcRootDN: cn=Manager,dc=example,dc=com olcRootPW: {SSHA}7fNBMv/sSDvmHWT5VXPZ2opL52o9/QkI olcDbDirectory: /var/lib/ldap olcDbIndex: objectClass eq,pres olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub olcDbIndex: uidNumber,gidNumber,loginShell eq,pres olcDbIndex: uid,memberUid eq,pres,sub olcDbIndex: nisMapName,nisMapEntry eq,pres,sub   有几点需要注意: 1) 上文中的空行不能省略,它表示一个DN的结束; 2) include部分是有先后顺序的,不要随意改变顺序; 3) 有多处 dc=example,dc=com ,这是因为我的LDAP域是 example.com ,如果你的LDAP域是 subdomain1.domain1.com ,则应该为 dc=subdomain1,dc=domain1,dc=com 的形式。 4) man手册中EXAMPLE那一节,有一段: dn: olcDatabase=bdb,cn=config objectClass: olcDatabaseConfig objectClass: olcBdbConfig olcDatabase: bdb 而/usr/share/openldap-servers/slapd.ldif的原文是hdb而不是bdb,经测试hdb和bdb都能正常加载。 5) olcRootPW那一行是密码加密后的哈希值,是用slappasswd命令算出来的。 # slappasswd New password: Re-enter new password: {SSHA}7fNBMv/sSDvmHWT5VXPZ2opL52o9/QkI 将这段哈希值复制粘贴到olcRootPW那一行。 6) 最后的olcDbIndex那5行,是对数据进行索引,有些数据如objectClass和uidNumber不支持sub操作,所以不建立sub索引。   清空原有配置: rm -rfv /etc/openldap/slapd.d/* 将 /root/slapd.ldif 加载进 /etc/openldap/slapd.d 目录: slapadd -F /etc/openldap/slapd.d -n 0 -l /root/slapd.ldif   测试配置文件是否正确: slaptest -u -F /etc/openldap/slapd.d 若正确则提示: config file testing succeeded 修改配置文件的所有者,否则无法读取这些配置: chown -Rv ldap.ldap /etc/openldap/slapd.d  

3. 创建数据库配置文件

  cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown -Rv ldap.ldap /var/lib/ldap/DB_CONFIG  

4. 配置TLS加密

  如果要通过客户端的sssd进行LDAP认证,必须开启TLS加密。 在 man sssd-ldap 的手册中有如下内容: If you want to authenticate against an LDAP server either TLS/SSL or LDAPS is required. sssd does not support authentication over an unencrypted channel. 大意是,如果用LDAP认证,要么开启TLS/SSL,要么使用LDAPS,sssd不支持不加密的认证通道。 这里我们生成一个自签名的证书。   生成服务器的RSA私钥: openssl genrsa -out ldap.key 1024 生成签名请求: openssl req -new -key ldap.key -out ldap.csr 会提示输入服务器的主机名,这里一定要填写正确: Common Name (eg, your name or your server's hostname) []:gateway.example.com 生成自签名的公钥: openssl x509 -req -days 3653 -in ldap.csr -signkey ldap.key -out ldap.crt   把 ldap.key 和 ldap.crt 复制到 /etc/openldap/certs 目录: cp -v ldap.key ldap.crt /etc/openldap/certs chown -Rv ldap.ldap /etc/openldap/certs/ chmod 700 /etc/openldap/certs/   这个路径,是跟 slapd.ldif 文件里的这3行对应的: olcTLSCACertificatePath: /etc/openldap/certs olcTLSCertificateFile: /etc/openldap/certs/ldap.crt olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key  

5. 启动服务

  启动slapd服务并查看状态: systemctl start slapd.service systemctl status slapd.service –luser systemctl enable slapd.service???//设置此服务为开机自启动

6. 添加LDAP用户

创建组test1,test2,test3 创建8个用户ceshi1-8,家目录为/home/remoteuser/ 将ceshi1-2归为组test1成员,ceshi3-4 归为组test2成员,ceshi5-6归为组test3成员。ceshi7-8 默认 [root@ruichi253 certs]# useradd ceshi1 -d /home/remoteuser/ceshi1 -g test1 [root@ruichi253 certs]# useradd ceshi2 -d /home/remoteuser/ceshi2 -g test1 验证

7. 导入用户数据

修改配置文件/usr/share/migrationtools/migrate_common.ph找到这两个变量,修改为: # Default DNS domain $DEFAULT_MAIL_DOMAIN = "example.com"; # Default base $DEFAULT_BASE = "dc=example,dc=com";  

A、创建基本数据库模版文件:

/usr/share/migrationtools/migrate_base.pl > /root/base.ldif

B、创建用户数据模版:

/usr/share/migrationtools/migrate_passwd.pl /etc/passwd /root/user.ldif 编辑user.ldif,只留下之前创建的8个(ceshi1-ceshi8)LDAP用户的相关信息,其他用户的信息都删掉。 user.ldif中所有的DN都是属于People这个OU,而People这个OU是在base.ldif中定义的。 user.ldif中所有的DN都是继承自以下4个类: objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount 其中posixAccount和shadowAccount提供了uidNumber、gidNumber、homeDirectory、loginShell、userPassword这些属性。  

C、创建组数据模板:

/usr/share/migrationtools/migrate_group.pl /etc/group /root/group.ldif 编辑group.ldif,只留下之前创建的5个(test1-test3,ceshi7,ceshi8)LDAP用户相关的组的信息,其他用户的信息都删掉。 user.ldif中所有的DN都是属于Group这个OU,而Group这个OU是在base.ldif中定义的。

D、创建网络组数据模板

将LDAP服务端/etc/netgroup(手动创建)文件中的主机(LDAP域客户端主机)作为网络组主机,导入域中。 [root@ruichi253 ~]# cat /etc/netgroup Group1?(ruichi250,,) (ruichi252,,) Group 2 (node1,,) (node3,,) 以上定义2个组,组group1(成员:ruichi250,ruichi252) ?group2(成员:node1 node3) /usr/share/migrationtools/migrate_netgroup.pl?/etc/netgroup ?>/root/netgroup.ldif

E、导入数据

用刚刚创建的三个模版文件导入数据,注意执行顺序,否则会出错,因为OU都是在base.ldif中定义的。 提示输入密码,即为slapd.ldif中olcRootPW的密码: ldapadd -D "cn=Manager,dc=example,dc=com" -W -x -f base.ldif ldapadd -D "cn=Manager,dc=example,dc=com" -W -x -f user.ldif ldapadd -D "cn=Manager,dc=example,dc=com" -W -x -f group.ldif ldapadd -D "cn=Manager,dc=example,dc=com" -W -x -f netgroup.ldif

8. 配置用户家目录

LDAP用户登陆后,用户的home目录在服务器上,这里用NFS服务提供LDAP用户home目录。 编辑配置文件/etc/exports,内容如下: /home/remoteuser ???*(rw) 启动服务: systemctl start rpcbind.service systemctl start nfs-server.service 注意先启动rpcbind,否则NFS有可能启动失败。 可以用 showmount -e 命令查看已开启的NFS目录。 用netstat命令查看端口监听情况,389端口是LDAP,2049端口是NFS。 # netstat -ntl | grep -E "389|2049" tcp ???????0 ?????0 0.0.0.0:2049 ???????????0.0.0.0:* ??????????????LISTEN tcp ???????0 ?????0 0.0.0.0:389 ????????????0.0.0.0:* ??????????????LISTEN tcp6 ??????0 ?????0 :::2049 ????????????????:::* ???????????????????LISTEN tcp6 ??????0 ?????0 :::389 ?????????????????:::* ???????????????????LISTEN 将服务设为开机自动启动: systemctl enable rpcbind.service systemctl enable nfs-server.service  

9. 设置防火墙

确保防火墙没有阻挡LDAP服务和NFS服务: firewall-cmd --permanent --add-service=ldap firewall-cmd --permanent --add-service=ldaps firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=mountd firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --reload 此文档配置过程中,防火墙以及selinux都是关闭状态。

10. 配置日志

编辑rsyslog配置文件: vi /etc/rsyslog.conf 加上一行: local4.* ???/var/log/ldap.log 然后touch /var/log/ldap.log 重启rsyslog: systemctl restart rsyslog.service 如果slapd启动出问题,可查看/var/log/messages文件,比如: systemctl status slapd.service -l tail -n20 -f /var/log/messages

11、映射ip与主机名

将netgroup中定义的客户端IP写入到域hosts文件中 服务器配置到此结束。  

二、配置LDAP客户端

 

1. 安装LDAP认证相关软件包

yum -y install sssd-ldap sssd* nss-pam-ldapd?openldap*

2. 开启LDAP验证

终端执行命令authconfig-tui User Information ???????Authentication [ ] Cache Information ??[ ] Use MD5 Passwords [*] Use LDAP ????????????[*] Use Shadow Passwords [ ] Use NIS ???????????????[*] Use LDAP Authentication [ ] Use IPAv2 ???????????[ ] Use Kerberos [ ] Use Winbind ????????[ ] Use Fingerprint reader [ ] Use Winbind Authentication [*] Local authorization is sufficient   用Tab键切换到Next,回车。   [*] Use TLS Server: ldap://ruichi253 Base DN: dc=example,dc=com   这里server输入不要用IP地址,原因是:如果使用TLS认证,证书里是服务器的主机名,如果使用严格的认证,会认证失败。 用Tab键移动光标到OK,回车。   如果没有配置DNS服务,则可以在执行authconfig-tui之前,在/etc/hosts文件中加上一行:“服务器IP ?服务器主机名”,例如: 192.168.0.253 ?ruichi253

3. 读取TLS加密的LDAP数据

由于使用了自签名证书,所以客户端并没有下载CA证书,而生产环境是应该有CA证书的。通常是把证书下载到客户端的 /etc/openldap/certs 目录,然后执行 cacertdir_rehash /etc/openldap/certs 命令。 编辑 /etc/openldap/ldap.conf 文件,在TLS_CACERTDIR那一行上方添加一行: TLS_REQCERT allow 然后执行LDAP查询命令: ldapsearch -x -b "dc=example,dc=com" "objectclass=*" -ZZ?| less 就可以显示LDAP的数据,注意最后的 -ZZ 是强制使用TLS加密。 编辑 /etc/sssd/sssd.conf 文件,在ldap_uri那一行下方添加一行: ldap_tls_reqcert = allow 重启sssd服务: systemctl restart sssd   这2个allow允许在证书颁发者不受信任的情况下,仍然建立会话。这并不安全,但可以用于自签名的实验。   如果成功,则可以用id命令看到这些LDAP用户:

4. 配置autofs(域用户登入不需要家目录,略过)

LDAP用户的HOME目录,是通过autofs从服务器端的NFS服务挂载到本地的。如果没有挂载,则LDAP用户就没有HOME目录,不能创建自己的文件。 修改/etc/auto.master,原有内容不要动,在最后添加一行: /home/remoteuser ???auto.nfs   /home/remoteuser即autofs挂载的路径,auto.nfs是自定义的,该字段必须跟下文的配置文件名相对应。   保存退出,然后建立 /home/remoteuser 目录,以后LDAP用户的目录会通过autofs自动挂载到该目录: mkdir -pv /home/remoteuser   为什么不将LDAP用户的目录挂载到 /home 目录呢?如果那么做,挂载后本地用户的目录就无法访问了,所以不推荐挂载到 /home 。   创建 /etc/auto.nfs 文件,文件名必须跟上面自定义的字段auto.nfs相对应,内容如下: * ???-fstype=nfs,rw ???ruichi253:/home/remoteuser/&   这个文件的格式是这样: 用户名 ???挂载选项 ???服务器IP:NFS目录路径   所以如果有2个用户user1和user2,可以写成: user1 ???-fstype=nfs,rw,sync ???ruichi253:/home/remoteuser/user1 user2 ???-fstype=nfs,rw,sync ???ruichi253:/home/remoteuser/user2   如果有很多用户,则用户名可以用通配符*,NFS路径字段中用&表示跟用户名同名的目录,例如: * ???-fstype=nfs,rw,sync ???ruichi253:/home/remoteuser/& 修改/etc/sysconfig/autofs,末尾添加一行: DISABLE_DIRECT=0   配置完毕,启动autofs服务: systemctl stop autofs.service systemctl start autofs.service systemctl enable autofs.service   这时 ls /home/remoteuser 显示没有文件,mount命令显示: /etc/auto.misc on /misc type autofs (rw,relatime,fd=6,pgrp=6603,timeout=300,minproto=5,maxproto=5,indirect)  

5. 用LDAP用户登录

客户端配置到此结束。

posted on 2016-10-31 21:03  歪歪121  阅读(367)  评论(0)    收藏  举报