环境说明:
- apache作为前端访问入口和功能整合
- svn的认证使用apache代理openLDAP完成
- svn的权限和授权受限于svn本身的机制,目前任然使用其原生配置文件方式。
- openLDAP提供用户身份认证数据提供和用户统一管理
ps:系统环境为 Centos 7.0
一、yum仓库配置
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
二、openldap配置
1、安装openldap包
yum install -y openldap openldap-clients openldap-servers migrationtools
2、配置openldap server
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
修改两行:
olcSuffix: dc=hongxue,dc=com
olcRootDN: cn=root,dc=hongxue,dc=com
添加一行:
olcRootPW: 123456
3、配置监控数据库配置文件
vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
将olcAccess中的cn及dc修改成自己的配置
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=root,dc=hongxue,dc=com" read by * none
4、准备LDAP数据库
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /var/lib/ldap
5、测试配置文件
[root@centos7-200 ~]# slaptest -u
57e7c444 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
57e7c444 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded # 测试通过
6、启动及设置开机自启动启动服务
systemctl start slapd
systemctl enable slapd
7、查看启动状态及监听端口
systemctl status slapd.service
netstat -anpt |grep slapd
8、添加下面的LDAP服务器(也可按照自己的需求进行添加)
cd /etc/openldap/schema/
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif
9、修改配置文件migrate_common.ph
cd /usr/share/migrationtools/
vim migrate_common.ph
修改61行:
$NAMINGCONTEXT{'group'} = "ou=Groups";
修改71行:
$DEFAULT_MAIL_DOMAIN = "hongxue.com";
修改74行:
$DEFAULT_BASE = "dc=hongxue,dc=com";
修改90行:
$EXTENDED_SCHEMA = 1;
10、生成域名DIT base.ldif文件
/usr/share/migrationtools/migrate_base.pl > /root/base.ldif
11、加载base.ldif文件到openldap数据库
ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f /root/base.ldif
12、创建用户并设置密码
mkdir /home/guests
useradd -d /home/guests/ldapuser1 ldapuser1
useradd -d /home/guests/ldapuser2 ldapuser2
useradd -d /home/guests/hongxue hongxue
echo 'password' | passwd --stdin hongxue
echo 'password' | passwd --stdin ldapuser1
echo 'password' | passwd --stdin ldapuser2
13、过滤出用户信息并保存
getent passwd | tail -n 3 > /root/users
getent shadow | tail -n 3 > /root/shadow
getent group | tail -n 3 > /root/groups
14、通过用户信息并生成ldif文件
修改 /usr/share/migrationtools/migrate_passwd.pl 文件的188行,将/etc/shadow改为/root/shadow,接着生成ldif文件,如下:
cd /usr/share/migrationtools/
./migrate_passwd.pl /root/users > users.ldif
./migrate_passwd.pl /root/groups > groups.ldif
15、更新这些用户和组的LDIF文件到LDAP数据库
ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f users.ldif
ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f groups.ldif
16、搜索LDAP DIT的所有记录
ldapsearch -x -b "dc=hongxue,dc=com" -H ldap://127.0.0.1
三、安装Apache服务
yum -y install httpd
四、安装Subversion服务
ps:下面安装的mod_dav_svn包这边介绍下:
Apache httpd module for Subversion server
yum -y install subversion
yum -y install mod_dav_svn
五、配置httpd及subversion服务
安装完成之后在 /etc/httpd/conf.modules.d 目录下会生成一个叫做 10-subversion.conf 的模板
1、拷贝subversion.conf模板
cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf
2、authz_svn和dav_svn模块
打开subversion.conf文件后默认有加载authz_svn和dav_svn模块,模块的路径为 /etc/httpd/modules
3、配置subversion.conf
下列配置中有几点做下说明:
1)SVNParentPath:svn服务路径
2)AuthzSVNAccessFile:svn的权限配置文件
3)AuthLDAPURL:搭建的openldap url地址
4)AuthLDAPBindDN:配置 openldap的cn、dc
5)AuthLDAPBindPassword:配置openldap的管理员密码
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
<Location /opt/svn>
DAV svn
SVNParentPath /opt/svn
SVNListParentPath On
AuthzSVNAccessFile /opt/svn/authz
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion repository"
AuthLDAPURL "ldap://192.168.1.200:389/dc=hongxue,dc=com?uid?sub?(objectClass=*)"
AuthLDAPBindDN "cn=root,dc=hongxue,dc=com"
AuthLDAPBindPassword "123456"
Require valid-user
</Location>
4、启动Apache服务
systemctl start httpd.service
systemctl status httpd.service
如有报错:Unknown Authn provider: ldap
解决:yum -y install mod_ldap
5、svn服务配置
mkdir /opt/svn # 创建svn版本库目录
svnserve -d -r /opt/svn # 启动svn服务
svnadmin create Test # 创建一个svn版本库
chown apache.apache -R /opt/svn # 授权,不然web会有errorlog
6、svn授权
vim /opt/svn/authz
添加如下内容:
[groups]
admin=hongxue
users=ldapuser1,ldapuser2
[/]
@admin = rw
[Test:/]
@users = r
六、通过openldap用户访问svn
1、admin用户hongxue访问 /
admin用户hongxue访问 /Test-1
2、普通用户ldapuser1访问 /Test
普通用户ldapuser1访问 /test-1,由于未配置该项目的权限,所有访问拒绝
至此已经结束,有兴趣的朋友可是通过svn工具来上传下载看看。
参考文档:
http://blog.chinaunix.net/uid-21926461-id-5676013.html
http://www.linuxidc.com/Linux/2015-03/114627.htm