centos+apache+subversion+LDAP :https://blog.csdn.net/qq_41566366/article/details/117356703
window + apache + subversion :window + svn + apache——全网第二好的配置方案_Rocket MAN的博客-CSDN博客
目录
svn访问的方式
安装apache2 subversion等软件
apache2 在ubunt上的目录说明
创建svn版本库、账号密码
apache2的模块配置
apache2的so文件
apache2配置目录介绍
模块状态查询
dav_svn模块启用/禁用
配置apache2,搭建http访问svn方案
检查dav_svn是否已经启用
配置dav_svn.conf
解决apache2其他配置问题
配置apache2,增加LDAP访问方式
检查dav_svn是否已经启用
配置dav_svn.conf
访问
现在SVN命令行使用者
说明一:关于权限需要说明几点
版本库有几种访问的方式
sudo apt-get install subversion apache2 libapache2-svn
关于apache安装目录说明,apache与win安装的目录相差很大,win中,一个软件所有东西会放在一个目录,在linux中,软件会分别放在不同位置。
可以参考:ubuntu apache2配置详解(含虚拟主机配置方法)
/usr/share/apache2 安装目录
/usr/lib/apache2/modules lib文件,如apache与subversion通讯的dav_svn.so安装后就会放在这里
/etc/init.d/apache2 启动脚本 如 ./apache2 restart
/etc/apache2 apache2的配置目录
/var/log/apache2 apache2的日志文件,包括access.log和error.log
su root && mkdir /var/lib/svn/
chown www-data:www-data /var/lib/svn/
切换到www-data ,常规切换方式行不通
su -l www-data -s /bin/bash
创建svn仓库
svnadmin create /var/lib/svn/my_repo
创建账号
htpasswd -cmb /var/lib/svn/passwd admin 1
此时,你能看到在/svn 下有一个新文件 passwd
ls
my_repo passwd
cat passwd
admin:$apr1$2bMjzUdQ$KDrUBq64VAa8p0cXzbunx0
apache的.so文件,例如dav_svn.so 可以在访问apache时把请求指向到svn,它的存放的位置是 /usr/lib/apache2/modules。
但是光有这些文件apache并不代表apache2配置svn和ldap就会生效。在ubuntu中,apache2的配置目录与win上有很大不同:
那么如何启用/停用apache2的.so文件呢?我们先看apache2的配置目录
安装目录中介绍过,apache2的配置目录是/etc/apache2
如下,我们可以看到,模块的配置分为两个目录 mods-available mods-enabled,其中 mods-available 专注于模块的配置, mods-enabled专注于模块的启用/停用。
这样划分的好处在于,把配置和启停用分开,如果不需要使用某个配置项,可以删除它的软链接,而不需要去动原来的配置文件。
--/etc/apache2
----apache2.conf //apache2的主要配置文件,里面使用includes引入 mods-enabled下所有文件,引入ports.conf ,引入conf-enabled sites-enabled 下的所有文件
----apache2.conf.in
----conf-avaliable //真正的配置文件
----conf-enabled //conf-available内部文件的软链接
----envvars
----magis
----mods-available //真正的模块配置文件
----mods-enabled //mods-available内部文件的软链接
----posts.conf
----sites-available
----site-enabled
ls /etc/apache2/mods-enabled/
在mods-enabled中的模块,代表了该模块已启用
禁用模块
#任意目录下
sudo a2dismod authz_svn
再次查看,发现authz_svn.load已经消失了,说明这个命令删除了该软链接
启用模块
#任意目录下
sudo a2enmod authz_svn
上面已经说了如何查看模块是否已经启用
ls /etc/apache2/mods-enabled/
如果没有dav_svn.conf和dav_svn.load,说明没有启用dav_svn模块,启动该模块
#任意目录下
sudo a2enmod dav_svn
上面已经说过,.so的配置在/etc/apache2/mods-enabled/中。配置项如下即可
关于Location的配置项中SVNPath和SVNParentPath区别,可以参考 window + svn + apache——全网第二好的配置方案 中的 配置apache与subversion ,里面有详细说明
vi /etc/apache2/mods-enabled/dav_svn.conf
DAV svn /var/lib/svn #多个版本库
SVNPath /var/lib/svn/my_repo #单个版本库
#SVNParentPath /var/lib/svn/
AuthUserFile /var/lib/svn/passwd
Require valid-user
AuthType basic
AuthName "Subversion"
做了上面的配置之后,并不代表着svn就可以使用了,我们需要检查apache自身配置是否有问题
检查apache2服务器配置是否正确
重启服务器之前,先检查apache2服务器配置是否有问题
sudo apache2ctl configtest
错误1:module dav_module is already loaded
问题原因: dav.load 和 dav_svn.load 冲突了
解决方法 :#951753 - AH01574: module dav_module is already loaded, skipping - Debian Bug report logs
vim /etc/apache2/mods-available/dav.load
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
=====>
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
错误2:Could not reliably determine the server's fully qualified domain name, using 127.0.1.1.
问题原因:这是一个友好的警告,当然你也可以不用理会直接重启服务器
解决方法:
vim /etc/apache2/apache2.conf
#增加 ServerName localhost
重启apache
sudo systemctl reload apache2
或者:
/etc/init.d/apache2 restart
显示信息为:
[....] Restarting apache2 (via systemctl): apache2.service==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'apache2.service'.
Authenticating as: xxx,,, (xxx)
Password:
==== AUTHENTICATION COMPLETE ===
. ok
ok,就说明启动成功了吗,不是的,我们看看还得关注端口的情况
检查apache端口是否启动成功
经过上面检查配置是否正确可以检测语法问题,但是并不代表apache2就没问题了。默认情况下apache2端口是80,下面我们看看端口是否被占用
1)可以通过下面命令检查端口是否被占用
#建议加上sudo ,否则不会显示所属为root的程序。 Not all processes could be identified, non-owned process info will not be shown,
#you would have to be root to see it all.
sudo netstat -nlp | grep :80
2)当然除此以外,还可以通过下面命令看看apache2启动是否正常,在显示信息中, Active:inactive(dead) 说明并没有启动成功, 提示无法绑定到90端口,因为端口已被占用
sudo systemctl status apache2
当然,这些具体的提示信息只有上面的命令才会看到,/etc/init.d/apache2 restart 不会显示没有启动成功的原因。
更改apache port端口
apache的port文件在/etc/apache2/ports.conf,修改80为8000
sudo vim ports.conf
Listen 80
...
=>
Listen 8000
...
再次执行重启apache,然后查看apache状态,Active:active(running)变绿了,说明apache启动成功了
远端访问 IP/8000 , it works!
访问IP:port/svn,弹框输入用户名密码,说明配置成功
上面已经说了如何查看模块是否已经启用
ls /etc/apache2/mods-enabled/
如果没有dav_svn.conf和dav_svn.load,说明没有启用dav_svn模块,启动该模块
sudo a2enmod ldap
sudo a2enmod authnz_ldap
sudo a2enmod headers
重启服务器
sudo service apache2 restart
//或者 /etc/init.d/apache2 restart
vi /etc/apache2/mods-enabled/dav_svn.conf
DAV svn
#Edit your Parent path of SVN if you have multiple repos
SVNParentPath /home/svn
AuthName "Enter your LDAP credentials"
AuthType Basic
#Creating User restriction for repos
AuthzSVNAccessFile /etc/apache2/dav_svn.authz
# Use LDAP auth against an active directory
AuthBasicProvider ldap
AuthLDAPBindDN "CN=ldap,OU=developer,DC=your_domain,DC=edu"
AuthLDAPBindPassword your_password
AuthLDAPURL ldap://192.168.26.2:389/OU=developer,DC=your_domain,DC=edu?sAMAccountName?sub?(objectClass=*) NONE
Require ldap-attribute objectClass=user
浏览器访问
设置svn命令仅www-data组合root用户可以使用
有时候为了安全考虑,我们会设置仅某些用户或组可以使用svn bash命令 ,如svn info ,svn list等等
~$ ll -a /usr/bin | grep svn
-rwxr-xr-x 1 root root 291264 Jul 27 2019 svn*
-rwxr-xr-x 1 root root 85200 Jul 27 2019 svnadmin*
-rwxr-xr-x 1 root root 23072 Jul 27 2019 svnauthz*
-rwxr-xr-x 1 root root 23080 Jul 27 2019 svnauthz-validate*
-rwxr-xr-x 1 root root 60376 Jul 27 2019 svnbench*
-rwxr-xr-x 1 root root 35752 Jul 27 2019 svndumpfilter*
-rwxr-xr-x 1 root root 35504 Jul 27 2019 svnfsfs*
-rwxr-xr-x 1 root root 68888 Jul 27 2019 svnlook*
-rwxr-xr-x 1 root root 27440 Jul 27 2019 svnmucc*
-rwxr-xr-x 1 root root 52488 Jul 27 2019 svnrdump*
-rwxr-xr-x 1 root root 94704 Jul 27 2019 svnserve*
-rwxr-xr-x 1 root root 52128 Jul 27 2019 svnsync*
-rwxr-xr-x 1 root root 14928 Jul 27 2019 svnversion*
sudo chmod 750 /usr/bin/svn
#sudo chown root:www-data /usr/bin/svn
sudo service apache2 restart
现在,只有root用户或者sudo用户或者www-data用户可以使用svn命令了
1、svn的权限只分‘r’和‘w’,和linux目录不一样,没有‘x’执行权限,r代表读,w代表写、修改、删除权限;
2、如果需要设置默认全员权限,可以使用‘*=‘,例如*=代表全员无读写权限,*=r 代表全员可读,*=rw代表全员可读写。如下,代表根目录全员不可读写
[/]
*=
3、同一目录权限可以追加,例如实现全仅管理员可读写,其他人无权读写。第一行限制了多诱人,但第二行给了admin读写权限;
[/]
*=
@admin=rw
4、不同目录权限可以继承
例如admin组成员在根目录中已经有rw权限,那么在下面的子目录中,如果没有特别说明,都是有rw权限的。在子目录中要有权限,不管是r还是rw,在上一层的父目录中也一定要有r权限。
关于这块的详细说明,请看Apache与Svn的整合及apache的账号权限设置 最后一段
需要特别注意的是使用‘*=’(所有人禁止读写),“*=r”(所有人只读) ,"*=rw"(所有人读写权限)时,他所在的目录将重置该目录的权限,使得本目录及以下权限无法继承上级目录权限。
如下:代表admin对repo1拥有读写权限,但是D2任何人都没有权限
[/]
*=
@admin=r
[repo1:/]
@admin=rw
[repo2:/]
*=
参考:
Welcome to Talend Help Center
Installing Subversion And Configuring Access Through Different Protocols On Ubuntu 11.10