類別:原創 服務器 php
本文參考html
svn 基礎搭建 參考 http://jedy82.blog.51cto.com/425872/1395834linux
http://blog.csdn.net/sxhong/article/details/9176881
svn 操做命令 參考 http://blog.csdn.net/gexiaobaohelloworld/article/details/7752862apache
本地用戶訪問權限配置參考:http://f2blog.ssorc.tw/rewrite.php/read-309.htmlvim
第一:說明,軟件說明,和安裝的目的
架設基於linux下的SVN服務器,進行版本控制,並使用本地系統用戶名和密碼進行登錄認證。 服務器
第二:本例操做環境
所使用的系統環境爲 Centos 6.5 64位操做系統 ide
[root@tian ~]# uname -a
Linux tian.test.com 2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@tian ~]# hostname
tian.test.com
[root@tian ~]# more /etc/redhat-release
CentOS release 6.5 (Final)
[root@tian ~]# svn
第三:服務器安裝和基本配置
1. 安裝必須的軟件包
mod_dav_svn
subversion
httpd 測試
[root@tian ~]# yum install mod_dav_svn subversion httpd -y
[root@tian ~]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Apr 3 2014 23:56:16
[root@tian ~]#
[root@tian ~]# svnserve --version
svnserve, version 1.6.11 (r934486)
compiled Mar 6 2014, 10:49:10 ui
後面省略
[root@tian ~]#
2.建立svn倉庫
有了SVN軟件後還須要創建SVN庫,創建兩個示例庫test1 test2
[root@tian ~]# mkdir /svndata
[root@tian ~]# svnadmin create /svndata/test1/
執行上面的命令後,自動創建多個文件, 分別是conf, db, format, hooks, locks, README.txt
[root@tian ~]# ls /svndata/test1/
conf db format hooks locks README.txt
[root@tian ~]# svnadmin create /svndata/test2
[root@tian ~]#
[root@tian ~]# cat /etc/httpd/conf/httpd.conf | grep apache | grep -v "#"
User apache
Group apache
[root@tian ~]#
[root@tian ~]# grep apache /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
[root@tian ~]#
[root@tian ~]# chown apache -R /svndata
[root@tian ~]# chmod -R 700 /svndata
[root@tian ~]# ll /svndata/
total 8
drwx------ 6 apache root 4096 Apr 16 10:14 test1
drwx------ 6 apache root 4096 Apr 16 10:32 test2
3.配置apache
[root@tian ~]# vi /etc/httpd/conf/httpd.conf
\\修改ServerName,不然啓動apache會報錯 修改後以下
[root@tian ~]# cat /etc/httpd/conf/httpd.conf | egrep ServerName |egrep -v "^#|^$"
ServerName localhost
4.查看svn的apache模塊
[root@tian ~]# ll /etc/httpd/modules/mod_* | grep svn
-rwxr-xr-x 1 root root 13456 Mar 6 18:52 /etc/httpd/modules/mod_authz_svn.so
-rwxr-xr-x 1 root root 153472 Mar 6 18:52 /etc/httpd/modules/mod_dav_svn.so
[root@tian ~]#
5.簡單配置svn
[root@tian ~]# vim /etc/httpd/conf.d/subversion.conf
[root@tian ~]# cat /etc/httpd/conf.d/subversion.conf |egrep -v "^#|^$"
subversion.conf的詳細內容(去掉註釋後):
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/test1>
DAV svn
SVNPath /svndata/test1
</Location>
<Location /svn/test2>
DAV svn
SVNPath /svndata/test2
</Location>
[root@tian ~]#
6.啓動httpd服務
[root@tian ~]# service httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
[root@tian ~]#
7.開機啓動httpd服務
[root@tian ~]# chkconfig httpd on
這個配置的內容是最基本,沒有指定認證方式,因此是能夠匿名訪問的,在訪問時使用的路徑是:http://host/svn/test1 及 http://host/svn/test2
第四:進階配置(使用http方式認證)
1.設置密碼文件
[root@tian ~]# htpasswd -cm /etc/svn-passwd-file-test1 tian
New password:
Re-type new password:
Adding password for user tian
[root@tian ~]# more /etc/svn-passwd-file-test1
tian:$apr1$Np79jiyx$TAATTmBzK5DM8zP2hJJsm/
[root@tian ~]#
2.設置權限文件
[root@tian ~]# cat >> /etc/svn-authz-file-test1 <<EOF
[/]
tian=rw
EOF
[root@tian ~]# more /etc/svn-authz-file-test1
[/]
tian=rw
[root@tian ~]#
[root@tian ~]# cp /etc/svn-passwd-file-test1 /etc/svn-passwd-file-test2
[root@tian ~]# cp /etc/svn-authz-file-test1 /etc/svn-authz-file-test2
[root@tian ~]#
3.修改配置文件
[root@tian ~]# vim /etc/httpd/conf.d/subversion.conf
subversion.conf的詳細內容:
[root@tian ~]# cat /etc/httpd/conf.d/subversion.conf |egrep -v "^#|^$"
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/test1>
DAV svn
SVNPath /svndata/test1
AuthType Basic
AuthName "Authorization Realm"
AuthzSVNAccessFile /etc/svn-authz-file-test1 \\ 權限認證文件
AuthUserFile /etc/svn-passwd-file-test1 \\ 密碼文件
Require valid-user
</Location>
<Location /svn/test2>
DAV svn
SVNPath /svndata/test2
AuthType Basic
AuthName "Authorization Realm"
AuthzSVNAccessFile /etc/svn-authz-file-test2 \\ 權限認證文件
AuthUserFile /etc/svn-passwd-file-test2 \\ 密碼文件
Require valid-user
</Location>
[root@tian ~]#
4.重啓服務
[root@tian ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@tian ~]#
這個配置的內容是中指定了認證方式,在訪問時使用的路徑是:http://host/svn/test1 或 http://host/svn/test2
輸入用戶名和密碼能夠登陸表示成功!
5.測試
[root@tian ~]# svn co --username tian --password 123456 http://127.0.0.1/svn/test1 svn/test1
Checked out revision 0.
[root@tian ~]# ls svn/test1/
[root@tian ~]# touch svn/test1/aa
[root@tian ~]# touch svn/test1/bb
[root@tian ~]# svn add svn/test1/aa svn/test1/bb
A svn/test1/aa
A svn/test1/bb
[root@tian ~]# svn ci -m "test" svn/test1/aa svn/test1/bb
Adding svn/test1/aa
Adding svn/test1/bb
Transmitting file data ..
Committed revision 1.
[root@tian ~]#
[root@tian ~]# ls svn/test1/
aa bb
[root@tian ~]# svn update svn/test1/
At revision 1.
[root@tian ~]#
第五:進階配置(使用pam認證,使用本地系統用戶)
1.安裝pam模塊
[root@tian ~]# ls /etc/httpd/modules/mod_auth_pam.so
ls: cannot access /etc/httpd/modules/mod_auth_pam.so : No such file or directory
[root@tian ~]# ls /etc/httpd/modules/mod_auth_sys_group.so
ls: cannot access /etc/httpd/modules/mod_auth_sys_group.so: No such file or directory
[root@tian ~]#
[root@tian ~]# rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm \\ 安裝epel的yum源,此源中提供 mod_auth_pam模塊
[root@tian ~]#
[root@tian ~]# yum install -y mod_auth_pam
[root@tian ~]#
[root@tian ~]# ls /etc/httpd/modules/mod_auth_pam.so
/etc/httpd/modules/mod_auth_pam.so
[root@tian ~]# ls /etc/httpd/modules/mod_auth_sys_group.so
/etc/httpd/modules/mod_auth_sys_group.so
[root@tian ~]#
2.檢查默認的pam配置
[root@tian ~]# more /etc/httpd/conf.d/auth_pam.conf
LoadModule auth_pam_module modules/mod_auth_pam.so
LoadModule auth_sys_group_module modules/mod_auth_sys_group.so
[root@tian ~]# more /etc/pam.d/httpd
#%PAM-1.0
auth include password-auth
account include password-auth
# Comment out the previous account line and uncomment the following line if
# you wish to allow logins that don't have a system account
#account required pam_permit.so
[root@tian ~]#
3.新建測試用戶和svn用戶組,並進行相關配置
新建能夠訪問svn的用戶組,這裏是svn (gid 504),並只有svn組裏的用戶才能訪問svn資源,注意必定要將運行httpd的用戶加入到此組中,不然,httpd程序沒法讀取 /etc/shadow 文件,形成svn不能成功認證
[root@tian ~]# groupadd svn
[root@tian ~]# grep svn /etc/group
svn:x:504:
[root@tian ~]# useradd test
[root@tian ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
[root@tian ~]#
[root@tian ~]# usermod -a -G svn test
[root@tian ~]# cat /etc/httpd/conf/httpd.conf | grep apache | grep -v "#"
User apache
Group apache
[root@tian ~]#
[root@tian ~]# usermod -a -G svn apache
[root@tian ~]# grep svn /etc/group
svn:x:504:test,apache
[root@tian ~]# chgrp svn /etc/shadow
[root@tian ~]# ll /etc/shadow
-r--r----- 1 root svn 938 Apr 16 11:57 /etc/shadow
[root@tian ~]#
4.設置權限文件
[root@tian ~]# cat >> /etc/svn-authz-file-test1 <<EOF
[/]
test=rw
EOF
[root@tian ~]# more /etc/svn-authz-file-test1
[/]
tian=rw
[/]
test=rw
[root@tian ~]#
5.修改配置文件,使用本地系統用戶
說明:此處咱們對兩個svn資源分別使用兩種驗證方式:
test1,使用本地系統用戶驗證(用戶必須屬於svn用戶組)
test2,使用svn的密碼文件進行驗證,用戶不是本地系統用戶
[root@tian ~]# cat /etc/httpd/conf.d/subversion.conf |egrep -v "^#|^$"
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/test1>
DAV svn
SVNPath /svndata/test1
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/svn-passwd-file-test1 \\仍使用 svn-passwd-file-test1 文件控制訪問權限
Require group svn \\只有屬於本地用戶組svn中的用戶才能訪問
</Location>
<Location /svn/test2>
DAV svn
SVNPath /svndata/test2
AuthType Basic
AuthName "Authorization Realm"
AuthzSVNAccessFile /etc/svn-authz-file-test2
AuthUserFile /etc/svn-passwd-file-test2 \\ 使用此處指定文件中的用戶名和密碼進行驗證
Require valid-user
</Location>
[root@tian ~]#
6.重啓服務
[root@tian ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@tian ~]#
7.測試
test1 使用本地系統用戶組svn中的用戶進行驗證
test2 使用密碼文件進行認證
[root@tian ~]# svn co --username test --password test123 http://127.0.0.1/svn/test1 svn/test1
Checked out revision 1.
[root@tian ~]# svn update svn/test1/
At revision 1.
[root@tian ~]# svn co --username tian --password 123456 http://127.0.0.1/svn/test2 svn/test2
Checked out revision 0.
[root@tian ~]# svn update svn/test2
At revision 0.
[root@tian ~]#
[root@tian ~]# ls svn/test1
aa bb
[root@tian ~]# ls svn/test2
[root@tian ~]#
第六:補充 更多信息
1. 在上面的配置中經過SVNPath指定了一個代碼倉庫。可是在實際應用,每每是有多個倉庫存放不一樣的項目代碼,這時能夠將SVNPath改成:
SVNParentPath /svndata
但此時的不足是,因各倉庫的權限控制使用的是一個權限控制文件,因此各倉庫的權限保持的徹底一致
2.當有多個項目時 ,實際上是建議設置多個目錄,分別進行權限控制,以下
<Location /svn/test1>
DAV svn
SVNPath /svndata/test1/
AuthType Basic
AuthName "Authorization Realm"
AuthzSVNAccessFile /etc/svn-authz-file-test1
AuthUserFile /etc/svn-passwd-file-test1
Require valid-user
</Location>
<Location /svn/test2>
DAV svn
SVNPath /svndata/test2/
AuthType Basic
AuthName "Authorization Realm"
AuthzSVNAccessFile /etc/svn-authz-file-test2
AuthUserFile /etc/svn-passwd-file-test2
Require valid-user
</Location>
3. 使用htpasswd添加用戶時,認證文件svn-auth-file不存在時,使用:
htpasswd -cm /etc/svn-auth-file-test2 tester01
會建立一個的文件,而且添加tester01用戶。而此後再增長用戶,使用:
htpasswd /etc/svn-auth-filetest2 tester02
4. 新增長代碼庫後,必定修改文件夾權限,否者客戶端會獲得Permission Denied的提示。
5. 每次修改過配置文件之後,都要從新啓動httpd服務。
6. svn中指定用戶使用訪問的方法
Require group svn \\ 只有屬於本地用戶組svn中的用戶才能訪問
Require user test \\ 只有test用戶才能訪問
7. 必須注意,若是使用本地系統用戶進行驗證,必定要確保運行httpd的用戶能讀取/etc/shadow中的內容
8. 不管使用那種認證方式,權限控制均可以使用 AuthzSVNAccessFile 參數指定的文件來進行控制
至此 全部配置完成