前面兩篇文章主要介紹了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用戶驗證經過。