apache SVN权限的问题困扰了我多长时间

chcon -R -h -t httpd_sys_content_t <SVN Root 目录>

 CentOs5.5上配置SVN1.6.13

我是采用RPM包来装的(本文是服务器端的安装),apache用的是原来安装系统的时候安装的apache。

1.首先下载所需要的RPM包

1)mod_dav_svn-1.6.13-1.i386.rpm
2)neon-0.28.4-1.i386.rpm
3)neon-devel-0.28.4-1.i386.rpm
4)sqlite-3.5.9-2.i386.rpm
5)sqlite-devel-3.5.9-2.i386.rpm
6)subversion-1.6.13-1.i386.rpm
7)subversion-devel-1.6.13-1.i386.rpm
大家可以到http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/1.6.13/下载所需要的软件,这边还有其它版本所需要的文件。
2.开始安装
1)先升级sqlite。
请注意,rpm管理本身对sqlite有依赖,所以不能卸载sqlite,如果卸载,会出现rpm命令不可用的问题,最好直接升级至最新版本的sqlite。
#rpm -Uvh sqlite-3.5.9-2.i386.rpm
注:可能出现以下问题
sqlite = 3.3.6-5 is needed by (installed) sqlite-devel-3.3.6-5.i386
那就先用#rpm -e sqlite-devel-3.3.6-5.i386把这个文件给卸载了,后面会再安装(sqlite-devel-3.5.9-2.i386.rpm)
2)安装neon-0.28.4-1.i386.rpm
# rpm -Uvh neon-0.28.4-1.i386.rpm 
error: Failed dependencies:
libneon.so.25 is needed by (installed) cadaver-0.22.3-4.el5.i386
# rpm -e cadaver-0.22.3-4.el5.i386
# rpm -Uvh neon-0.28.4-1.i386.rpm
Preparing...                ########################################### [100%]
   1:neon                   ########################################### [100%]
3)安装neon-devel
[root@localhost data]# rpm -Uvh neon-devel-0.28.4-1.i386.rpm 
Preparing...                ########################################### [100%]
   1:neon-devel             ########################################### [100%]
4)安装subversion
[root@localhost data]# rpm -ivh subversion-1.6.13-1.i386.rpm 
Preparing...                ########################################### [100%]
   1:subversion             ########################################### [100%]
5)安装mod_dav_svn-1.6.13-1.i386.rpm
[root@localhost data]# rpm -Uvh mod_dav_svn-1.6.13-1.i386.rpm
Preparing...                ########################################### [100%]
   1:mod_dav_svn            ########################################### [100%]
6)安装sqlite-devel
[root@localhost data]# rpm -ivh sqlite-devel-3.5.9-2.i386.rpm 
Preparing...                ########################################### [100%]
   1:sqlite-devel           ########################################### [100%]
7).安装subversion-devel
[root@localhost data]# rpm -ivh subversion-devel-1.6.13-1.i386.rpm
Preparing...                ########################################### [100%]
   1:subversion-devel       ########################################### [100%]
3.配置

1)初始化repository

 创建svn的项目库父路径,我把/svn/repos做为svn的项目库父路径。这个目录是任意的,如果是多个项目库则必须在同一个父路径下

 #mkdir /svn/repos

 我们通过如下命令初始化一个svn项目库zf

 #svnadmin create /svn/repos/zf

 重复上面的命令创建多个项目库,如

 #svnadmin create /svn/repos/chenproject

 指定存储方式来报建SVN库:

 #svnadmin create --fs-type fsfs /svn/repos/TelecomRepositorys

 #svnadmin create --fs-type bdb /svn/repos/TelecomRepositorys

 注:默认是bdb(Berkeley DB)的存储方式,不过一般人更喜欢fsfs的存储库方式

2)创建登陆的用户,有两种方式:以文件的形式,以数据库的形式(mysql)

a)以文件的形式

        在/svn目录下创建登陆用户文件.htpasswd以及2个用户chen1,chen2

        #htpasswd -c /svn/.htpasswd chen1

        #htpasswd /svn/.htpasswd chen2

注:-c是第一次那建文件时要用。在后面添加用户的时候,就不用-c选项.如果是自己安装了apaceh,那么找到apache的bin目录找到htpasswd 

 b)以数据库的形式

         #mysql -u root -p

          #mysql>create database svn_auth;

          mysql>user svn_auth

         创建用户svn

        mysql>GRANT ALL PRIVILEGES ON *.* TO svn@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

       创建表users

       mysql> CREATE TABLE users (

           ->   user_name CHAR(30) NOT NULL,

          ->   user_passwd CHAR(20) NOT NULL,

          ->   PRIMARY KEY (user_name)

          -> );

       添加2个测试帐号

         mysql> insert into users values('chen1', ENCRYPT('password'));

         mysql> insert into user values('chen2', ENCRYPT('password'));

4.SVN访问控制

  在/svn目录下创建访问控制文件文件svnaccess,名字任意,不过在以后的配置过程中你必须使用正确的名字,文件内容为
[groups]   
# harryharry_and_sally = harry,sally     
[/]   
*=rw  
注:意思是对所有的项目,所有人都有读写(rw)的权限,当然我们还可以对某个项目单独进行限制,设置如下
[groups]   
# harryharry_and_sally = harry,sally     
[zf:/]   
chen1=r  
*=rw  
 意思是对于项目库zf,用户chen1只有读权限,其他人有读写权限
5.Apache和SVN集成
 编辑apache的配置文件/etc/httpd/conf/httpd.conf文件或者/etc/httpd/conf.d/subversion.conf文件
 如果你使用登陆文件认证的方式,添加如下内容 
<Location /svn>  
DAV svn                           
SVNParentPath /svn/repos                           
AuthzSVNAccessFile /svn/svnaccess                           
AuthType Basic                           
AuthName "SVN Repositorys"                           
AuthUserFile /svn/.htpasswd                           
Require valid-user      
</Location>  
如果是用上面的方式,可能会出现提示authzSVNAccessFile有问题,要确保httpd.conf或是subversion.conf中有添加以下模块
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
 如果你使用数据库认证的方式,添加如下内容
<Location /svn>                      
DAV svn                       
SVNParentPath /svn/repos                       
AuthzSVNAccessFile /svn/svnaccess                       
AuthName "SVN Repositorys"                       
AuthType Basic                       
AuthMYSQLEnable on                       
AuthMYSQLUser svn                       
AuthMySQLPassword password                       
AuthMYSQLDB svn_auth                       
AuthMYSQLUserTable users                       
AuthMYSQLNameField user_name                       
AuthMYSQLPasswordField user_passwd                       
Require valid-user               
</Location> 
注:我们可以看到/svn/svnaccess,/svn/.htpasswd是我们创建的文件,如果名字自定义的话,请在http.conf配置正确,同样需要正确配置的还有数据库用户svn,数据库svn_auth,表名users等等。
6.安全访问设置[必须设置,否则svn无法访问]
 修改目录的属主和访问权限
 #chown apache.apache -R /svn
 #chmod 755 -R /svn    
注:如果有开启selinux,那么会出现问题,解决方法:
 .禁用SELinux(不推荐)
或者
在SELinux图形管理界面中勾上Disable SELinux protection for httpd daemon这个选项,否则apache这个虚拟用户无法访问/svn目录,当然  你也可以用更好的方法设置apache的访问权限.
7.重新启动Apache服务器
 #service httpd restart
  或者
 #/etc/init.d/httpd restart
7. 键入下面的url看是否能正确的访问svn。
 http://localhost/svn/zf
若页面有东西,说明成功。

相关推荐