CentOS7中安装Subversion 1.9.7(续2)

前面两篇文章主要介绍了SVN的安装和使用http/https方式访问SVN,但是SVN登录使用的验证方式仍然是明文密码形式,本文主要调查如何使用已有的OpenLDAP服务器进行SVN服务器的登录和验证。

我们先在CentOS 7上安装OpenLDAP服务器,安装方法参照这个链接

https://www.itzgeek.com/how-tos/linux/centos-how-tos/step-step-openldap-server-configuration-centos-7-rhel-7.html

1.安装OpenLDAP

1.1 安装LDAP服务器

执行以下命令安装OpenLDAP

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服务已经启动。

1.2 设置LDAP服务器的root用户密码

1.3 配置LDAP服务器

我们切换到 /etc/openldap/slapd.d/目录下,创建db.ldif文件,内容如下:

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

执行结果如下图所示:

再创建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

执行后的结果如下图所示

1.4 创建LDAP服务器证书

执行以下指令创建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信息

1.5 创建LDAP数据库

拷贝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

信息如下图所示

1.6 开启LDAP防火墙

为了方便管理LDAP服务器,也便于远端服务器访问LDAP服务器,我们需要开启LDAP服务器的防火墙,执行以下指令

firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload

或者

firewall-cmd --permanent --add-port=[LDAP服务器端口号]
systemctl restart firewalld.service

1.7 开启LDAP日志

配置rsyslog记录LDAP服务器的事件日志到/var/log/ldap.log文件

我们修改/etc/rsyslog.conf文件,在文件最后添加以下语句:

local4.* /var/log/ldap.log

重启rsyslog服务器,conf文件的修改即生效

systemctl restart rsyslog

1.8 LDAP服务器连接验证

我们使用Apache Directory Studio对我们安装的LDAP服务器进行连接验证,连接参数如下图所示

其中Bind DN or user我们使用base.ldif中创建的管理员用户,密码则是base.ldif中设置的olcRootPW的明文密码。

连接成功后可以看到LDAP服务器的节点树结构,以及我们创建的svnuser2用户。

2.配置SVN服务器使用LDAP验证

首先安装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用户验证通过。

猜你喜欢

转载自my.oschina.net/u/237688/blog/1633778
今日推荐