一、 环境准备
1、Centos 系统:CentOS7系统安装
2、Nginx 软件: Nginx基本配置(后期如有可能更改为 Nginx提供代理服务)
SVN,即Subversion, 主要用户版本管理,在不使用的其它组件的情况下,它使用
/svn 安装路径 / 版本库 /conf/
下的svnserve.conf
管理系统配置,passwd
管理用户密码,authz
管理用户组及 SVN 路径、权限。
每次新增版本库,就要配置这些文件。每次增加用户、用户组、路径、访问权限,都要手动修改这些文件,极易出现问题。所以我们这里使用
iF.SVNAdmin
采用 Web 页面来配置系统(主要用来配置用户访问路径及权限),- 使用
LDAP
来做用户认证。
这样在LDAP
配置完成后就不用手动配置svnserve.conf
,passwd
, authz
这几个配置文件了。
我们先以本地配置为主,然后再通过修改配置来配置成 SVN+iF.SVNAdmin+LDAP
访问。
二、 软件安装
svn 服务器有 2 种运行方式:独立服务器和借助 apache 运行,我们使用 Apache 代理运行。svn 存储版本数据也有 2 种方式:BDB(一种事务安全型表类型)和 FSFS(一种不需要数据库的存储系统)。因为 BDB 方式在服务器中断时,有可能锁住数据,所以还是 FSFS 方式更安全一点。
2.1 安装 APACHE、Subversion
1、安装网站代理服务 Apache
yum install httpd -y
2、安装 SVN server
yum imstall subversion -y
# 查看软件版本及安装状态
svnserve -version
3、安装其它相关插件
yum install mod_dav_svn -y
查看安装结果。安装完成后会生成mod_dav_svn.so
,mod_authz_svn.so
两个文件。
三、 软件本地配置
3.1 创建版本库
1、创建版本库目录
此路径可随意设置,但必须和后面要配置文件/etc/httpd/conf.d/subversion.conf
配置一样。
# 为了方便 Apache 管理,我把目录放置到 WEB 目录下。
mkdir /var/www/svn
2、创建版本库
可以创建多个,这里创建两个,通过设置,两个版本库共用一套本地认证系统。
# 创建名称为 documents 的版本库
svnadmin create /var/www/svn/documents
# 创建名称为 product 的版本库
svnadmin create /var/www/svn/product
查看版本库目录及内容、权限,可以看到现在文件所有者是当前系统用户,而不是 WEB 需要用的apache
用户
3、修改目录权限
chown -R apache:apache /var/www/svn/documents/
chown -R apache:apache /var/www/svn/product/
查看权限,已经将用户和组更改为 apache 用户及用户组。
3.2 配置版本库
1、将配置文件复制到版本库父目录
# 将任意一个版本库复制到版本库的父目录,当然你也可以每个版本库都有一套独立的认证系统
cp -a product/conf/* ./
此目录下的 passwd 文件可能在添加用户时失效,不能添加,可自己创建一个同名文件。
使用命令创建用户 admin (用户名后面不要输入空格)
htpasswd /var/www/svn/passwd admin
2、修改权限配置文件设置用户组、路径、权限
vi /var/www/svn/authz
原始文件的`21 行`用于设置用户组,要求在`/var/www/svn/passswd`文件内必须有此用户,每两个用户之间用`英文逗号`隔开。可以设置多个用户组,同一用户尽量不要在多个组中。
原始文件`25 行`用户设置根路径权限:
**“=”号前**
`*` 为`所有用户`,
`@XXX`为`用户组`,
`XXX`为`单个用户`。
**“=”后**
`空`代表`不可读写`
`r` 代表`只读`,
`rw` 代表`读写`。
`rw` 优先级最高,其次是`r`, 然后是`空`,用户和所在用户组可以在同一路径下,权限以`r`,`rw` 为准。
原始文件 30 行设置子路径,权限设置规则同根路径。
最后结果如下:
# 用户组
[groups]
# 用户组及其成员
admin=admin,yunlong.liu
# 根路径
[/]
# 管理员组可读写
@admin = rw
# documents 路径
[documents:/]
# 管理员组可读写
@admin = rw
# 所有用户只读
* = r
# docunemts:/01_test 二级目录路径
[docunemts:/01_test]
# 管理员可读写
@admin = rw
# 单个用户只读
yunlong.liu = r
# 单个用户不可读写,具体为,在用户不可见该目录
test = r
# product 路径
[product:/]
# 管理员可读写
@admin = rw
# 单个用户只读
test = r
3.3 Apache 配置代理服务
cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf
vi /etc/httpd/conf.d/subversion.conf
添加以下语句
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthzSVNAccessFile /var/www/svn/authz
AuthUserFile /var/www/svn/passwd
Require valid-user
</Location>
重启 apache
systemctl restart httpd
四、 使用 iF.AVNAdmin 管理 SVN
在 svn 管理中,每次变动,都得手动修改配置文件,极易出错,所以我们选择使用 iF.SVNAdmin 程序来管理 SVN, 通过网页配置自动修改 /etc/openvpn/ 下的 passwd 和 authz 文件。
4.1 安装 iF.SVNAdmin
这个软件只是一个 php 网页程序,挂载在 Apache 下运行。前面已经安装过 Apache 和 PHP,这里不再重复。
1、下载并解压软件
wget http://sourceforge.net/projects/ifsvnadmin/files/svnadmin-1.6.2.zip/download
unzip download
2、修改程序文件
复制程序文件到网页目录下
cp -r iF.SVNAdmin-stable-1.6.2/ /var/www/html/svnadmin
3、修改用户属主
#修改数据目录为所有用户可写(777)
chmod -R 777 /var/www/html/svnadmin/data/
#网页文件属主改变为 apache.
chown -R apache:apache /var/www/html/svnadmin/
修改 passwd 用户文件,authz 权限文件属主为 apache:apache
chown -R apache:apache /var/www/svn/
5、重新启动 httpd 服务
systemctl restart httpd
4.2 配置 iF.SVNAdmin
1、登录网址 http://SVNAdminHost/svnadmin/settings.php
2、修改配置
- Subversion 授权文件 :为你在服务器上 SVN 授权文件(authz) 的绝对路径。
- 用户身份验证文件:为你在服务器上 SVN 用户密码 (passwd) 的绝对路径
- 代码仓库的父目录 (SVNParentPath) 为服务器上 SVN 代码库的上级目录
- 其它默认
- 点击 Test 按纽,测试一下,如果显示 Test passed, 则成功了,保存一下。
这个页面在配置时,直接单击目标单元格,会自动出现相应选项,直接选择默认就行了。
3、选择一个用户做为管理员,保存退出
4、输入用户名、密码登录管理系统
4.3 内部配置简介
图例中以编号对应功能如下所示
- 代码仓库:可以查看、添加、删除版本库
- 用户:可以查看、添加、修改、删除用户(使用 LDAP 后仅能查看)及用户的访问路径权限
- 组:可以查看、添加、修改、删除用户组,管理用户组下的用户和路径权限
- 访问路径:可查看、添加、删除访问路径,修改访问用户、用户组的访问权限。
- 设置:可以修改 SVN 的访问设置,本节配置和下节配置均在此配置。
- Session:可以修改当前用户密码,退出系统登录。
- 点击五星可以增加所在行为访问路径。
- 这这里可以查看路径。
五、 使用 iF.SVNAdmin 管理 +LDAP 认证管理 SVN
因为前面已经将各类软件基本安装、调试完毕,这里仅做小的修改。安装部分插件。
其中需要php-ldap
,mod_ldap
两个模块。
5.1 安装相关组件
1、SVN 服务器上安装 php-ldap mod_ldap 模块
yum install php-ldap
yum install mod_ldap
#重启 httpd 加载上面两个模块
systemctl restart httpd
5.2 修改后台配置
访问网址:http://172.17.1.12/svnadmin/settings.php
修改如下
Subversion 授权相关
Subversion 授权文件: /var/www/svn/authz
数据提供方相关
User view provider type: ldap
User edit provider type: off
Group view provider type: ldap
Group edit provider type: off
Repository view provider type: svnclient
Repository edit provider type: svnclient
Subversion 设置相关
代码仓库的父目录 (SVNParentPath): /var/www/svn
'svn.exe' 或 'svn'可执行文件: /usr/bin/svn
'svnadmin.exe' 或 'svnadmin' 可执行文件: /usr/bin/svnadmin
LDAP 连接信息相关
LDAP 主机地址:ldap://172.17.1.12:389/
Bind DN:cn=root,dc=cafintech,dc=com # 这里设置你的 LDAP 管理账号,或者仅有查询权限的账号
Bind password: # 上面用户的密码
LDAP 用户信息相关
Base DN: ou=People,DC=cafintech,DC=com # 搜索用户路径
Search filter: (&(objectClass=person) (ou=svn)) # 用户限定表达式
Attributes: cn # LDAP 传输到 SVN 的用户名属性
LDAP 用户组信息相关
Base DN: ou=Groups,DC=cafintech,DC=com
Search filter: (&(objectClass=groupOfUniqueNames)(ou=svn))
Attributes:cn
Groups to user attribute: uniqueMember
Groups to user attribute value: dn
保存。
同步一下数据,做好备份,把/var/www/svn/authz
文件保存好,因为同步时会修改这个文件,如果出错就得恢复这个文件。
- 如果是新回调服务器无需做此步
- 如果已经用了用户,数据,并配置了相关路径权限,一定要保证你 LDAP 中的用户名与你原系统中用户名一致,否则就不能使用原用户名登录,所有权限得重新配置。
- 在用户列表中选择一个用户,添加超级管理员权限
至此,你的 LDAP 用户可以登录 iF.SVNAdmin 后台进行查看了,但是访问 SVN 时提示没有此用户,或者密码错误(看日志),我们继续修改配置文件。
5.3 修改 SVN 配置文件
1、修改配置文件
vi /etc/httpd/conf.d/subversion.conf
#下面前三行来自文件 /etc/httpd/conf.modules.d/10-subversion.conf 用于配置库文件
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 /svn>
DAV svn
SVNParentPath /var/www/svn #SVN 父路径
#SVNPath /var/www/svn
SVNListParentPath on #是否可以列出父路径
AuthBasicProvider ldap #认证方式主 ldap
AuthType Basic #认证类型为基本
AuthName "Subversion repository" #版本名称
AuthLDAPURL "ldap://172.17.1.16:389/dc=cafintech,dc=com" #LDAP 路径
#绑定的管理员用户 不使用 iF.SVNAdmin 配置时,一定要加上这两项
#AuthLDAPBindDN "cn=Manager,dc=cafintech,dc=com"
#AuthLDAPBindPassword **************** #绑定的管理员密码
AuthzSVNAccessFile /var/www/svn/authz #权限认证文件
#AuthUserFile /var/www/svn/passwd #不使用 LDAP 认证的本地认证用户名密码
Require valid-user #验证用户
</Location>
7、重启 httpd
systemctl restart httpd
设置示例图
5.4 LDAP 的相关配合设置
LDAP 管理端对用户的设置
- 在
Groups
下新增ou
用于分类, - 然后新增
groupOfUniqueNames
,RDN
为cn
, - 增加
uniqueMember
并赋值为一个用户的完整DN
. - 增加
ou
属性值为svn
(也可以是其它,但是要和前面配置的Search filter
配置相结合)
到此,SVN 已经和 LDAP 集成进行统一认证了。
文章引用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin