在RHEL6.3上实现SVN+LDAP+APACHE(真实项目)

环境:

AD:windows 2008 R2 x86_64:192.168.101.12:gz.newp.local

SVN:RHEL 6.3 x86_64:192.168.130.25

仓库:/data/gz/svn/it


一. 配置好yum源

详细请看我的另一篇文章《RHEL常用源》


二. 安装
yum install httpd httpd-devel subversion mod_dav_svn


a. 确定已经安装了svn模块:mod_dav_svn
#cd /etc/httpd/modules
#ls | grep svn
mod_authz_svn.so
mod_dav_svn.so

如果要确认是否成功的安装了svn可以通过如下的命令进行验证:
svn �Cversion


b. 确认apache能正常启动。

测试Apache是否可以正常启动:

#service httpd start

在浏览器中访问:http://localhost, 如果能看到Apache的页面,则说明Apache已经正常启动。


c. 进入到/etc/httpd/conf.d目录下用vim打开subversion.conf配置文件
一定要保证下面的两句话存在于配置文件中,否则无法加载svn的模块(一般用YUM安装的话,下面两个模块在安装的过程中已经改好了)。

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so


三. 建立仓库

#mkdir -p /data/gz/svn

#chown -R apache:apache /data                          //必须要把目录权限给apache,否则会报http 500内部服务器错误

#svnadmin create /data/gz/svn/it

#cd /data/gz/svn/it

#ls

conf     dav     db     format     hooks     locks     README.txt

如果目录下有这些文件,表示仓库创建成功。


四. 编辑/etc/httpd/conf/http.d

# vim /etc/httpd/conf/http.d

  1. NameVirtualHost *
  2. <VirtualHost *>
  3.          DocumentRoot /data/gz/svn/baomiban           //这里最好不要指向你所有的仓库,如果你指向了/data/gz/svn ,那么apache就不知道时候将请求提交给subversion模块
  4.          ServerName svn.newp.local
  5.          LogLevel warn
  6.          ServerSignature on
  7.         <Directory “/data/gz/svn”>
  8.                      Options Indexes FollowSymLinks MultiViews
  9.                      Order allow,deny
  10.                      allow from all
  11.          </Directory>
  12. </VirtualHost>

五. 编辑ldap配置文件

# vim   /etc/openldap/ldap.conf
添加一行

REFERRALS       off


六. 尝试用ldapsearch连接AD域控
# ldapsearch -x -b “CN=administrator,CN=Users,DC=gz,DC=newp,DC=local” -D “[email protected]” -W


这个命令的意思是:

使用svnuser的身份去查询gz.newp.local域中的Users这个OU里的administrator信息,然后返回一大堆东西,比较有用的就是其中的sAMAccountName,这个就是下文AuthLDAPURL中用到的关键字


命令的详细用法请点击《查询windows AD域的DN》查看


七. 修改httpd.conf

就一下内容添加到上面新建的虚拟主机中
  1. <Location “/svn”>
  2.        SVNParentPath “/data/gz/svn”        //仓库的父目录

  3.        SVNListParentPath on                        //时候允许理出仓库的父目录

  4.        AuthBasicProvider ldap                      //身份验证的提供方式
  5.        AuthType Basic
  6.        AuthzLDAPAuthoritative off
  7.        AuthName “itrepo”                              //验证时会出现的名字,随便写一个,不影响
  8.        AuthLDAPURL “ldap://192.168.101.12:389/OU=Users,DC=gz,DC=newp,DC=local?sAMAccountName?sub?(objectClass=*)” NONE                             //这句的意思是,gz.newp.local域中的Users的OU里的用户才能使用这个仓库
  9.        AuthLDAPBindDN “[email protected]”          //ldap查询时使用的身份,在域中随便建个普通用户就行
  10.        AuthLDAPBindPassword 123456a!                             //svnuser这个用户的域密码
  11.        AuthSVNAccessFile /data/gz/svn/access.acl           //仓库的权限配置文件,ldap是身份验证,这个是权限验证,规定你时候对某个仓库或目录由读写的权限,名字可以随便取
  12.        require valid-user
  13. </Location>
重启httpd
# service httpd restart


八. 修改access.acl

# vim /data/gz/svn/access.acl
[it:/]
* = r
rajaruan = rw



[/]                              这个表示所有仓库的根目录

[A:/]                        这个表示A仓库的根目录
[A:/it/rajaruan]    这个表示A仓库中,rajaruan这个目录


错误汇总:

一.http 500 内部服务器错误

解决办法:

1.检查你的域用户是否在OU=Users,DC=gz,DC=newp,DC=local这个OU里

2.检查apache是否有权限

3.检查AuthLDAPBindDN指定的用户时候存在


二.http 403 禁止访问

解决办法:

1.检查access.acl文件,是否具有权限


三.http 401 未授权

查一下apache的error_log

[error] [client 192.168.101.234] user rajaruan not found: /svn/it


这个应该是ldap没有连接到域控制器,或者找不到OU=Users,DC=gz,DC=newp,DC=local这个OU

检查一下你的AuthLDAPURL是否正确

你可能感兴趣的:(apache,windows,SVN,subversion,RHEL,LDAP,ad)