SVN 联合 LDAP 的安装调试(原创)

一、 环境准备

1、Centos 系统:CentOS7系统安装
2、Nginx 软件: Nginx基本配置(后期如有可能更改为 Nginx提供代理服务)

SVN,即Subversion, 主要用户版本管理,在不使用的其它组件的情况下,它使用

  1. /svn 安装路径 / 版本库 /conf/ 下的svnserve.conf 管理系统配置,
  2. passwd管理用户密码,
  3. authz 管理用户组及 SVN 路径、权限。

每次新增版本库,就要配置这些文件。每次增加用户、用户组、路径、访问权限,都要手动修改这些文件,极易出现问题。所以我们这里使用

  1. iF.SVNAdmin采用 Web 页面来配置系统(主要用来配置用户访问路径及权限),
  2. 使用LDAP来做用户认证。

这样在LDAP配置完成后就不用手动配置svnserve.confpasswdauthz这几个配置文件了。

我们先以本地配置为主,然后再通过修改配置来配置成 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

SVN安装版本及状态

3、安装其它相关插件

yum install mod_dav_svn -y

查看安装结果。安装完成后会生成mod_dav_svn.somod_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 行设置子路径,权限设置规则同根路径。

权限配置文件(authz)修改

最后结果如下:

# 用户组
[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

使用TortoiseSVN测试服务

四、 使用 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, 则成功了,保存一下。

这个页面在配置时,直接单击目标单元格,会自动出现相应选项,直接选择默认就行了。

iFSVNAdmin后台连接配置

3、选择一个用户做为管理员,保存退出

iFSVNAdmin 管理员配置

4、输入用户名、密码登录管理系统

iFSVNAdmin管理后台登录

4.3 内部配置简介

图例中以编号对应功能如下所示

  1. 代码仓库:可以查看、添加、删除版本库
  2. 用户:可以查看、添加、修改、删除用户(使用 LDAP 后仅能查看)及用户的访问路径权限
  3. 组:可以查看、添加、修改、删除用户组,管理用户组下的用户和路径权限
  4. 访问路径:可查看、添加、删除访问路径,修改访问用户、用户组的访问权限。
  5. 设置:可以修改 SVN 的访问设置,本节配置和下节配置均在此配置。
  6. Session:可以修改当前用户密码,退出系统登录。
  7. 点击五星可以增加所在行为访问路径。
  8. 这这里可以查看路径。

iFSVNAdmin管理后台配置页面功能

五、 使用 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

设置示例图

安装

iFSVNAdmin 管理后台设置

5.4 LDAP 的相关配合设置

LDAP 管理端对用户的设置

  1. Groups下新增ou 用于分类,
  2. 然后新增groupOfUniqueNames,RDNcn,
  3. 增加uniqueMember并赋值为一个用户的完整DN.
  4. 增加ou属性值为svn(也可以是其它,但是要和前面配置的Search filter配置相结合)

LDAP 管理端设置

到此,SVN 已经和 LDAP 集成进行统一认证了。

文章引用


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin

文章标题:SVN 联合 LDAP 的安装调试(原创)

字数:2.7k

本文作者:Longger

发布时间:2018-02-02, 16:23:27

最后更新:2024-11-04, 19:55:57

原始链接:https://www.longger.xin/article/51016.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

github