前面两篇文章主要介绍了SVN的安装和使用http/https方式访问SVN,可是SVN登陆使用的验证方式仍然是明文密码形式,本文主要调查如何使用已有的OpenLDAP服务器进行SVN服务器的登陆和验证。html
咱们先在CentOS 7上安装OpenLDAP服务器,安装方法参照这个连接node
https://www.itzgeek.com/how-tos/linux/centos-how-tos/step-step-openldap-server-configuration-centos-7-rhel-7.htmllinux
执行如下命令安装OpenLDAPsql
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
安装完成后启动LDAP服务数据库
systemctl enable slapd.service systemctl start slapd.service
启动完成后,查看端口号,能够看到LDAP服务已经启动。centos
咱们切换到 /etc/openldap/slapd.d/目录下,建立db.ldif文件,内容以下:api
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=rick,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=manager,dc=rick,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}NQpsOl1hX39ub2NYtubl85F0+pEtcM0K
执行如下命令,使db.ldif文件生效,修改/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif文件的实际内容(不建议直接修改olcDatabase={2}hdb.ldif文件,下面修改monitor文件也是同样)浏览器
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
执行结果以下图所示:bash
再建立monitor.ldif文件服务器
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=manager,dc=rick,dc=com" read by * none
执行ldapmodify命令更新cn=config/olcDatabase={1}monitor.ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
执行后的结果以下图所示
执行如下指令建立LDAP服务器证书文件
openssl req -new -x509 -nodes -out /etc/openldap/certs/rickldapcert.pem -keyout /etc/openldap/certs/rickldapkey.pem -days 365
指令执行后,在/etc/openldap/certs目录下生成两个pem文件
接下来咱们将这两个pem文件的全部权赋给ldap用户(在安装OpenLDAP时建立),以便在使用ldap用户启动
LDAP服务器时使用这两个pem文件。
chown -R ldap:ldap /etc/openldap/certs/*.pem
建立certs.ldif文件,标明在LDAP服务器中使用这两个pem文件。
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/rickldapcert.pem dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/rickldapkey.pem
执行LDAPModify命令,导入certs.ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
执行结果以下图所示
执行下列命令肯定上述LDAP服务器配置修改是否有效
slaptest -u
若是配置无误,会显示config file testing succeeded信息
拷贝LDAP数据库配置样例文件到/var/lib/ldap目录下,并改变样例文件全部者为ldap用户。
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap:ldap /var/lib/ldap/*
添加consine和nis LDAP schemas
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
执行后的结果以下图所示
建立rick域生成所需的base.ldif文件
dn: dc=rick,dc=com dc: rick objectClass: top objectClass: domain dn: cn=Manager,dc=rick,dc=com objectClass: organizationalRole cn: Manager description: LDAP Manager dn: ou=People,dc=rick,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=rick,dc=com objectClass: organizationalUnit ou: Group
执行下列命令,加载base.ldif文件,添加rick域
ldapadd -x -W -D "cn=Manager,dc=rick,dc=com" -f base.ldif
执行结果以下图所示
建立SVN访问的用户svnuser2,配置文件svnuser2.ldif以下
dn: uid=svnuser2,ou=People,dc=rick,dc=com objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: svnuser2 uid: svnuser2 uidNumber: 9999 gidNumber: 100 homeDirectory: /home/svnuser2 loginShell: /bin/bash gecos: svnuser2 [Admin (at) Rick] userPassword: {crypt}x shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
加载svnuser2.ldif文件,建立LDAP用户svnuser2
ldapadd -x -W -D "cn=Manager,dc=rick,dc=com" -f svnuser2.ldif
执行结果以下图所示
设置svnuser2用户的密码为123456
ldappasswd -s 123456 -W -D "cn=Manager,dc=rick,dc=com" -x "uid=svnuser2,ou=People,dc=rick,dc=com"
其中-D 是表示登陆的root用户,-x 表示是须要设置的LDAP用户的路径,-s表示须要设置的密码。
设置完成后,咱们查看svnuser2用户的信息
ldapsearch -x cn=svnuser2 -b dc=rick,dc=com
信息以下图所示
为了方便管理LDAP服务器,也便于远端服务器访问LDAP服务器,咱们须要开启LDAP服务器的防火墙,执行如下指令
firewall-cmd --permanent --add-service=ldap firewall-cmd --reload
或者
firewall-cmd --permanent --add-port=[LDAP服务器端口号] systemctl restart firewalld.service
配置rsyslog记录LDAP服务器的事件日志到/var/log/ldap.log文件
咱们修改/etc/rsyslog.conf文件,在文件最后添加如下语句:
local4.* /var/log/ldap.log
重启rsyslog服务器,conf文件的修改即生效
systemctl restart rsyslog
咱们使用Apache Directory Studio对咱们安装的LDAP服务器进行链接验证,链接参数以下图所示
其中Bind DN or user咱们使用base.ldif中建立的管理员用户,密码则是base.ldif中设置的olcRootPW的明文密码。
链接成功后能够看到LDAP服务器的节点树结构,以及咱们建立的svnuser2用户。
首先安装mod_ldap模块
yum install -y mod_ldap
安装完成后访问/etc/httpd/conf.d/subversion.conf文件,配置使用LDAP方式验证登陆
<Location /rootSvn> DAV svn SVNPath /opt/svnRepos/ SVNListParentPath On AuthType Basic AuthBasicProvider ldap AuthName "SVN Repo" Require valid-user AuthzSVNAccessFile /opt/svnRepos/conf/authz #AuthUserFile /opt/svnRepos/conf/http_passwd AuthLDAPURL "ldap://192.168.56.103:389/ou=People,dc=rick,dc=com?uid?sub?(objectClass=*)" AuthLDAPBindDN "cn=Manager,dc=rick,dc=com" AuthLDAPBindPassword [LDAP管理员用户登陆密码] </Location>
AuthLDAPURL行表示咱们使用192.168.56.103(咱们安装的LDAP服务器)上的
ou=People,dc=rick,dc=com节点下全部具备uid的用户节点进行SVN用户登陆验证。
AuthLDAPBindDN是LDAP管理员账号,AuthLDAPBindPassword是管理员账号密码,和使用Apache Directory Studio登陆时配置信息一致。
AuthBasicProvider ldap一行表示使用ldap做为用户登陆验证。
AuthzSVNAccessFile一行保持不变,表示用户访问SVN的权限仍然在authz文件中配置。
再修改/opt/svnRepos/conf/authz文件,添加svnuser2用户的访问权限。
[/] ..... svnuser2=rw
修改完成后重启httpd服务。
咱们使用浏览器访问SVN服务器,弹出用户名/密码输入框
咱们输入svnuser2和LDAP密码,登陆成功后显示SVN目录
须要说明的是,以前设置的svnuser2密码默认是按SSHA方法存储密码的,在进行SVN用户和密码验证时会出现验证不经过的状况,为了不这种状况,建议使用Apache Directory Studio登陆LDAP服务器后修改SVN用户密码为plain text方式保存,我以后会继续研究如何使用SSHA保存密码的前提下保证SVN用户验证经过。