版本管控工具-subversion
一、SVN服务器搭建
1.1 安装Subversion
yum install -y subversion

1.2 版本查看
svn --version

1.3 创建仓库
[root@localhost ~]# mkdir -p /home/svn/
[root@localhost ~]# cd /home/svn/
[root@localhost svn]# svnadmin create test
[root@localhost svn]# ll
总用量 0
drwxr-xr-x. 6 root root 86 2月 14 15:57 test
1.4 配置SVN
svnserve配置文件通常由3个文本文件组成:

- svn服务配置文件:在conf目录下,文件名为svnserve.conf
- 用户名口令文件:在conf目录下,文件名为passwd
- 权限配置文件:在conf目录下,文件名为authz
1.4.1 svnserve.conf文件
该文件由一个[general]配置段组成。格式:<配置项>=<值>**
配置项分为以下5项:
anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:read
auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:write
password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:passwd
authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:authz
realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
将svnserve.conf修改成如下内容:
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm = /home/svn/test
说明:
设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为conf目录下的passwd,权限配置文件为版本库conf目录下的authz,版本库的认证域为:/home/svn/test
1.4.2 passwd文件
该文件由一个[users]配置段组成,格式:<用户名>=<口令> 注:口令为未经过任何处理的明文。
修改成如下:
[users]
admin = admin
test = test
1.4.3 authz文件
该文件由[groups]配置段和若干版本库路径权限段组成
[groups]配置段格式:<用户组>=<用户列表>
用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"
版本库路径权限段格式:
[<版本库名>:<路径>]如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。
可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:[/tmp]
版本库路径权限段中配置行格式有如下三种:
<用户名> = <权限>
<用户组> = <权限>
* = <权限>
其中,"*"表示任何用户;权限的取值范围为''、'r'和'rw',''表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。注意:每行配置只能配置单个用户或用户组。
示例:

每一个section都命名了一个版本库(repository)和其对应的路径(path),option name是已认证的用户名(即在passwd文件中定义的用户),而option value是用户对仓库指定路径的访问级别,分为r(read-only)只读和rw(read/write)读写这两种。注意下,特别强调每一部分配置的名称可以是[repos-name:path]或[path]这两种格式。
搞清楚了这些概念后,修改配置文件如下:
####在最后面增加如下内容,[/] 是相对svn库src目录下的访问路径,可根据路径分配目录访问权限:
[/]
admin = rw
* =
####如下是配置test用户只有对svn/test的目录,具有可读写权限
[/test]
test = rw
* =
总结:
SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。
1.5 启动SVN
svnserve -d -r /home/svn/test/
1.6 检测进程
[root@localhost conf]# ps -ef | grep svn
root 17089 1 0 16:13 ? 00:00:00 svnserve -d -r /home/svn/test/
root 17242 8526 0 16:14 pts/0 00:00:00 grep --color=auto svn
[root@localhost conf]#
1.7 检测端口
[root@localhost conf]# netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
[root@localhost conf]#
1.8 停止SVN
pkill -9 svn
1.9 客户端测试SVN


1.10 添加文件测试


1.11 关闭SELinux
1.11.1 查看状态
[root@localhost svn]# getenforce
Enforcing
[root@localhost svn]# /usr/sbin/sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Process contexts:
Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context: system_u:system_r:init_t:s0
/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023
File contexts:
Controlling terminal: unconfined_u:object_r:user_devpts_t:s0
/etc/passwd system_u:object_r:passwd_file_t:s0
/etc/shadow system_u:object_r:shadow_t:s0
/bin/bash system_u:object_r:shell_exec_t:s0
/bin/login system_u:object_r:login_exec_t:s0
/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty system_u:object_r:getty_exec_t:s0
/sbin/init system_u:object_r:bin_t:s0 -> system_u:object_r:init_exec_t:s0
/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
[root@localhost svn]#
1.11.2 临时关闭
##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
setenforce 0
1.11.3 永久关闭
#将SELINUX=enforcing改为SELINUX=disabled
#设置后需要重启才能生效
vi /etc/selinux/config
二、安装HTTPD支持HTTP访问
2.1 安装httpd、mod_dav_svn
yum install -y httpd mod_dav_svn

2.2 检查Apache、mod_dav_svn是否安装成功
[root@localhost conf]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 16 2020 16:18:20
[root@localhost conf]# find / -name mod_dav_svn.so
/usr/lib64/httpd/modules/mod_dav_svn.so
[root@localhost conf]# find / -name mod_authz_svn.so
/usr/lib64/httpd/modules/mod_authz_svn.so
[root@localhost conf]#
2.3 修改配置文件
地址为/etc/httpd/conf.d/subversion.conf(没有则新建),內容为:
[root@localhost conf]# touch /etc/httpd/conf.d/subversion.conf
[root@localhost conf]# cat /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /home/svn
AuthType Basic
AuthName "Authorization SVN"
AuthzSVNAccessFile /home/svn/authz
AuthUserFile /home/svn/passwd
Require valid-user
</Location>
2.4 创建用户文件passwd
[root@localhost svn]# touch /home/svn/passwd
[root@localhost svn]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月 14 16:42 passwd
drwxr-xr-x. 6 root root 86 2月 14 15:57 test
[root@localhost svn]# htpasswd /home/svn/passwd admin
New password:
Re-type new password:
Adding password for user admin
[root@localhost svn]# ll
总用量 4
-rw-r--r--. 1 root root 44 2月 14 16:42 passwd
drwxr-xr-x. 6 root root 86 2月 14 15:57 test
[root@localhost svn]# cat passwd
admin:$apr1$3jlXPfui$fVb9lAnF9ttbZ0U2khvMf1
[root@localhost svn]#
htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
语法
htpasswd(选项)(参数)选项
-c:创建一个加密文件;
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
-m:默认采用MD5算法对密码进行加密;
-d:采用CRYPT算法对密码进行加密;
-p:不对密码进行进行加密,即明文密码;
-s:采用SHA算法对密码进行加密;
-b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
-D:删除指定的用户。参数
用户:要创建或者更新密码的用户名;
密码:用户的新密码。实例
利用htpasswd命令添加用户
#在bin目录下生成一个.passwd文件,用户名admin,密码:pwdadmin,默认采用MD5加密方式。htpasswd -bc .passwd admin pwdadmin
在原有密码文件中增加下一个用户
#去掉-c选项,即可在第一个用户之后添加第二个用户,依此类推。htpasswd -b .passwd test 123456
不更新密码文件,只显示加密后的用户名和密码
#不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。htpasswd -nb test 123456
利用htpasswd命令删除用户名和密码
htpasswd -D .passwd test
利用htpasswd命令修改密码
#即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。htpasswd -D .passwd test htpasswd -b .passwd test 123456
2.5 创建权限文件authz
[root@localhost svn]# cp /home/svn/test/conf/authz /home/svn/
[root@localhost svn]# ll
总用量 8
-rw-r--r--. 1 root root 1333 2月 14 16:44 authz
-rw-r--r--. 1 root root 44 2月 14 16:42 passwd
drwxr-xr-x. 6 root root 86 2月 14 15:57 test
[root@localhost svn]#
2.6 配置apache对SVN目录权限
[root@localhost svn]# chown -R apache:apache test/
[root@localhost svn]# ll
总用量 8
-rw-r--r--. 1 root root 1333 2月 14 16:44 authz
-rw-r--r--. 1 root root 44 2月 14 16:42 passwd
drwxr-xr-x. 6 apache apache 86 2月 14 15:57 test
[root@localhost svn]#
2.7 配置httpd
# 修改 AllowOverride None改为AllowOverride All
vim /etc/httpd/conf/httpd.conf
2.8 启动Apache
Apache常用命令如下:
httpd -v #查看已经安装的httpd的版本
rpm -qa | grep httpd #查看是否已经安装了httpd
ps -ef | grep httpd #查看httpd的进程
service httpd status #查看httpd的运行状态
service httpd stop #可以停止httpd
service httpd start #可以启动httpd

2.8.1 配置服务器名称
# 将服务器名称改为localhost
vim /etc/httpd/conf/httpd.conf
# 重启HTTPD重启
systemctl restart httpd


2.8.2 测试页面

2.9 登录页面


2.10 检出项目


