ubuntu+svn+apache配置

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命令行使用者

说明一:关于权限需要说明几点


svn访问的方式

版本库有几种访问的方式

  • file://   通过这个协议你可以直接访问权限,只在同一个系统中(本地磁盘)起作用,无法通过网络访问
  • http:// 通过apche2的dav_svn.so建立到subversion的通信,可以通过网络访问(默认port:80)
  • https:// 和http://一样,不过是通过加密SSL来访问(默认port :443)
  • svn:// 通过svnserver服务器访问存储库,可以通过网络访问(默认port :3690)
  • svn+ssh:// 和svn://类似,不过是通过SSH隧道访问(默认port:22)

安装apache2 subversion等软件

sudo apt-get install subversion apache2 libapache2-svn

apache2 在ubunt上的目录说明

关于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

创建svn版本库、账号密码

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

apache2的模块配置

apache2的so文件

apache的.so文件,例如dav_svn.so 可以在访问apache时把请求指向到svn,它的存放的位置是 /usr/lib/apache2/modules。

ubuntu+svn+apache配置_第1张图片

但是光有这些文件apache并不代表apache2配置svn和ldap就会生效。在ubuntu中,apache2的配置目录与win上有很大不同:

  • 在windows中,直接去掉http.conf里模块前面的‘;’就启用了该模块;
  • 在ubuntu中,配置的启用和停用会更加优雅,只需要通过命令行启用apache上的mod_dav_svn.so  mod_ladp.so模块就可以了。

那么如何启用/停用apache2的.so文件呢?我们先看apache2的配置目录

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中的模块,代表了该模块已启用

dav_svn模块启用/禁用

禁用模块

#任意目录下
sudo a2dismod authz_svn

 

再次查看,发现authz_svn.load已经消失了,说明这个命令删除了该软链接

 启用模块

#任意目录下 
sudo a2enmod authz_svn

 ubuntu+svn+apache配置_第2张图片

配置apache2,搭建http访问svn方案

检查dav_svn是否已经启用

上面已经说了如何查看模块是否已经启用

ls /etc/apache2/mods-enabled/

 如果没有dav_svn.conf和dav_svn.load,说明没有启用dav_svn模块,启动该模块

#任意目录下
sudo a2enmod dav_svn

配置dav_svn.conf

上面已经说过,.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"

解决apache2其他配置问题

做了上面的配置之后,并不代表着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

ubuntu+svn+apache配置_第3张图片

当然,这些具体的提示信息只有上面的命令才会看到,/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启动成功了

ubuntu+svn+apache配置_第4张图片

远端访问 IP/8000 , it works!

ubuntu+svn+apache配置_第5张图片

访问IP:port/svn,弹框输入用户名密码,说明配置成功

ubuntu+svn+apache配置_第6张图片

配置apache2,增加LDAP访问方式

检查dav_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

配置dav_svn.conf

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

访问

浏览器访问

ubuntu+svn+apache配置_第7张图片

现在SVN命令行使用者

设置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

你可能感兴趣的:(linux,apache,svn,ubuntu)