在CentOS 7上为用户主目录设置具有SSL + NFS的OpenLDAP服务器
在CentOS 7上设置OpenLDAP服务器并部署NFS以导出用户的主目录。
软件
本文使用的软件:
- CentOS的7
- OpenLDAP 2.4.40
- nfs-utils 1.3.0
OpenLDAP设置
我们的OpenLDAP服务器位于10.8.8.0/24局域网中。
安装和SSL配置
# yum install -y openldap-servers openldap-clients
生成带有证书签名请求的RSA私钥。
# cd /etc/pki/tls/private # DOMAIN=ldap # openssl genrsa -out "$DOMAIN".key 2048 && chmod 0600 "$DOMAIN".key # openssl req -new -sha256 -key "$DOMAIN".key -out "$DOMAIN".csr
现在我们可以获得一些CA来签署我们的CSR,或者我们可以自己签署:
# openssl x509 -req -days 1825 -sha256 -in "$DOMAIN".csr -signkey "$DOMAIN".key \ -out "$DOMAIN".crt
将PKCS#1转换为PKCS#8:
# openssl pkcs8 -topk8 -inform pem -in "$DOMAIN".key \ -outform pem -nocrypt -out "$DOMAIN".pem
确保ldap组可以读取私钥:
# chmod 640 "$DOMAIN".crt "$DOMAIN".key "$DOMAIN".pem # chgrp ldap "$DOMAIN".crt "$DOMAIN".key "$DOMAIN".pem # mv "$DOMAIN".crt ../certs/
打开“/etc/sysconfig/slapd”进行编辑,然后添加以下内容以启用LDAPS:
SLAPD_URLS="ldapi:///ldap://0.0.0.0:389/ldaps://0.0.0.0:636/"
启用并启动服务:
# systemctl enable slapd.service # systemctl start slapd.service
配置防火墙:
# iptables -A INPUT -s 10.8.8.0/24 -p tcp -m multiport --dport 389,636 -j ACCEPT
导入基本的OpenLDAP模式并创建数据库
相当多的LDAP模式可用,根据需要导入。
# ldapadd -Y EXTERNAL -H ldapi:///-f /etc/openldap/schema/cosine.ldif # ldapadd -Y EXTERNAL -H ldapi:///-f /etc/openldap/schema/nis.ldif # ldapadd -Y EXTERNAL -H ldapi:///-f /etc/openldap/schema/inetorgperson.ldif
尽管只有root才能运行slapadd,但slapd服务以ldap用户身份运行。
因此,目录服务器无法修改slapadd创建的任何文件。
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chmod 0600 /var/lib/ldap/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap/ # slaptest
配置OpenLDAP
我们需要一个目录来存储临时配置文件:
# mkdir /root/ldifconfigs/&& cd /root/ldifconfigs/
为LDAP管理员帐户生成userPassword值:
# slappasswd -h {SSHA} New password: Re-enter new password: {SSHA}qFEhyuvWKiLGtOISbhbRlSijlMQGCAGh
我们的初始LDAP配置文件'initial_config.ldif'可以在下面看到。
我们启用所有日志记录,将密码哈希设置为SSHA(而不是SHA),提供SSL证书和密钥的路径,放置一个高密码套件以供使用。
RootDN条目是用户的专有名称(DN),该用户不受访问控制或者为LDAP目录上的操作设置的管理限制参数的限制。
我们使用'cn = admin,dc = top'。
请注意,由于我们打算在树下使用多个域(顶部域组件),因此将后缀设置为“ dc = top”。
我们还为只读访问定义了一个来宾帐户“ cn = autobind,dc = top”。
对于诸如nslcd之类的服务,这主要是在不允许匿名绑定时绑定到LDAP服务器。
然后是一个访问控制列表,该列表确定谁可以针对OpenLDAP服务器进行身份验证:
- 管理员帐户(rootDN)具有完全访问权限,
- 自动绑定帐户可以是只读的,
- 为匿名用户提供了对userPassword属性的访问权限,以进行初始连接,
- 由于具有“通过自写”权限,所有用户都可以对其密码进行读取访问。
创建文件。
# cat > ./initial_config.ldif << EOF dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: -1 replace: olcPasswordHash olcPasswordHash: {SSHA} replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/pki/tls/certs/startssl.ca.crt replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/pki/tls/certs/ldap.crt replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/pki/tls/private/ldap.pem replace: olcTLSCipherSuite olcTLSCipherSuite: HIGH replace: olcTLSVerifyClient olcTLSVerifyClient: never dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=top" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=top replace: olcRootDN olcRootDN: cn=admin,dc=top replace: olcRootPW olcRootPW: {SSHA}qFEhyuvWKiLGtOISbhbRlSijlMQGCAGh replace: olcLastMod olcLastMod: TRUE replace: olcDbCheckpoint olcDbCheckpoint: 512 30 replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=top" write by dn="cn=autobind,dc=top" read by self write by anonymous auth by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=top" write by dn="cn=autobind,dc=top" read by self write by users read by anonymous auth by * none EOF
应用配置表格文件:
# ldapadd -Y EXTERNAL -H ldapi:///-f ./initial_config.ldif
创建一个基本配置文件。
这定义了顶级域组件“ dc = top”以及管理员和自动绑定用户。
# cat > ./base.ldif << EOF dn: dc=top objectClass: top objectClass: dcObject objectclass: organization o: top dc: top dn: cn=admin,dc=top objectClass: simpleSecurityObject objectclass: organizationalRole description: LDAP Admin Access userPassword: {SSHA}qFEhyuvWKiLGtOISbhbRlSijlMQGC315 dn: cn=autobind,dc=top objectClass: simpleSecurityObject objectclass: organizationalRole description: LDAP Read-only Access userPassword: EOF
应用更改,然后为自动绑定帐户创建密码(我们将userPassword字段有意留为空白)。
# ldapadd -x -D cn=admin,dc=top -W -f ./base.ldif # ldappasswd -x -D cn=admin,dc=top -W -S cn=autobind,dc=top
现在,我们将创建一个名为theitroad.com的域,其中包含几个用于用户和组的组织单位。
# cat > ./theitroad.com.ldif << EOF dn: dc=theitroad.com,dc=top o: theitroad.com dc: theitroad.com objectClass: dcObject objectClass: organization dn: ou=Users,dc=theitroad.com,dc=top objectClass: organizationalUnit ou: Users dn: ou=Groups,dc=theitroad.com,dc=top objectClass: organizationalUnit ou: Groups EOF
应用更改:
# ldapadd -x -D cn=admin,dc=top -W -f ./theitroad.com.ldif
创建域后,我们可以添加一些用户。
对于已经在系统上创建了多个本地用户帐户的用户,明智的方法是使用MigrationTools实用程序。
MigrationTools是一组Perl脚本,用于将用户,组,别名,主机,网络组,网络和服务从现有名称服务(平面文件,NIS和NetInfo)迁移到LDAP。
我们将创建两个LDAP用户,alice和vincent,以及它们各自的组。
主目录('/home/guests /)'将通过NFS导出。
注意shadowLastChange值。
我们需要objectClass:person来分配姓氏,objectClass:inetOrgPerson来分配邮件和给定名称,再加上objectClass:posixAccount来设置用户密码。
# cat > ./users.ldif << EOF dn: uid=alice,ou=Users,dc=theitroad.com,dc=top uid: alice uidNumber: 5001 gidNumber: 5001 objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}biYSGrLyQG/+ntABuIYF2rXyzDgZdBaU cn: Alice Abernathy gn: Alice sn: Abernathy mail: Hyman@theitroad shadowLastChange: 16890 shadowMin: 0 shadowMax: 99999 shadowWarning: 14 shadowInactive: 3 loginShell: /bin/bash homeDirectory: /home/guests/alice dn: cn=alice,ou=Groups,dc=theitroad.com,dc=top gidNumber: 5001 objectClass: top objectClass: posixGroup cn: alice dn: uid=vincent,ou=Users,dc=theitroad.com,dc=top uid: vincent uidNumber: 5002 gidNumber: 5002 objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}biYSGrLyQG/+ntABuIYF2rXyzDgZdBaU cn: Vincent Valentine gn: Vincent sn: Valentine mail: Hyman@theitroad shadowLastChange: 16890 shadowMin: 0 shadowMax: 99999 shadowWarning: 14 shadowInactive: 3 loginShell: /bin/bash homeDirectory: /home/guests/vincent dn: cn=vincent,ou=Groups,dc=theitroad.com,dc=top gidNumber: 5002 objectClass: top objectClass: posixGroup cn: vincent EOF
申请:
# ldapadd -x -D cn=admin,dc=top -W -f ./users.ldif
如果我们想更改预定义的密码,可以通过发出以下命令来进行更改:
# ldappasswd -x -D cn=admin,dc=top -W -S uid=alice,ou=users,dc=theitroad.com,dc=top # ldappasswd -x -D cn=admin,dc=top -W -S uid=vincent,ou=users,dc=theitroad.com,dc=top
LDAP结构如下所示:
可以在顶级域组件下轻松添加更多域和用户。
NFS设置
软件包安装和防火墙
安装nfs实用程序,启用并启动服务:
# yum install nfs-utils # systemctl enable rpcbind && systemctl start rpcbind # systemctl enable nfs-server && systemctl start nfs-server
为NFS配置防火墙(rpc-bind,nfs和mountd):
# iptables -A INPUT -s 10.8.8.0/24 -p tcp -m multiport --dport 111,2049,20048 -j ACCEPT # iptables -A INPUT -s 10.8.8.0/24 -p udp -m multiport --dport 111,2049,20048 -j ACCEPT
创建主目录并配置导出
为LDAP用户alice和vincent创建主目录。
请注意我们最初在LDAP上创建用户时使用的用户ID和组ID号。
# mkdir -m0750 -p /home/guests/{alice,vincent} # chown 5001:5001 /home/guests/alice/ # chown 5002:5002 /home/guests/vincent/
配置NFS导出:
# cat /etc/exports /home/guests 10.8.8.0/24(rw,sync,no_subtree_check,root_squash)
# exportfs -rav exporting 10.8.8.0/24:/home/guests
查看“相关文章”部分,了解如何配置CentOS 7以通过NFS自动挂载使用LDAP身份验证。
自动挂载配置应如下所示(其中10.8.8.2是NFS服务器的IP):
# cat /etc/auto.guests * -rw 10.8.8.2:/home/guests/&