Centos 6.5上Apache + PAM + SVN服務安裝配置(使用本地系統用戶認證)

類別:原創 服務器 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/test1http://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 參數指定的文件來進行控制


至此 全部配置完成

相關文章
相關標籤/搜索