您的位置:首页 > 运维架构 > Apache

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

2013-08-14 11:45 375 查看
环境:
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 –version

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
NameVirtualHost *
<VirtualHost *>
DocumentRoot /data/gz/svn/baomiban //这里最好不要指向你所有的仓库,如果你指向了/data/gz/svn ,那么apache就不知道时候将请求提交给subversion模块
ServerName svn.newp.local
LogLevel warn
ServerSignature on
<Directory “/data/gz/svn”>
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
</Directory>
</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 “svnuser@gz.newp.local” -W

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

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

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

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

AuthBasicProvider ldap //身份验证的提供方式
AuthType Basic
AuthzLDAPAuthoritative off
AuthName “itrepo” //验证时会出现的名字,随便写一个,不影响

AuthLDAPURL “ldap://192.168.101.12:389/OU=Users,DC=gz,DC=newp,DC=local?sAMAccountName?sub?(objectClass=*)” NONE //这句的意思是,gz.newp.local域中的Users的OU里的用户才能使用这个仓库
AuthLDAPBindDN “svnuser@gz.newp.local” //ldap查询时使用的身份,在域中随便建个普通用户就行
AuthLDAPBindPassword 123456a! //svnuser这个用户的域密码
AuthSVNAccessFile /data/gz/svn/access.acl //仓库的权限配置文件,ldap是身份验证,这个是权限验证,规定你时候对某个仓库或目录由读写的权限,名字可以随便取

require valid-user
</Location>
重启httpd# service httpd restart

八. 修改access.acl
# vim /data/gz/svn/access.acl[it:/]* = rrajaruan = 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是否正确

本文出自 “rajaruan” 博客,请务必保留此出处http://rajaruan.blog.51cto.com/2771737/1272761
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: