Linux SVNServer建立,并支撑https拜访ITeye - 超凡娱乐

Linux SVNServer建立,并支撑https拜访ITeye

2019年03月14日13时36分09秒 | 作者: 秋荷 | 标签: 拜访,文件,装备 | 浏览: 2553

1.Subversion装置进程
参阅http://blog.csdn.net/zhaiqi618/article/details/5741060
装置包下载地址,SVN版别1.6.12 :

http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/1.6.12/rhel5/x86_64/

neon-0.28.4-1.x86_64.rpm  28-Mar-2009 18:57  267K
  sqlite-3.5.9-2.x86_64.rpm  28-Mar-2009 18:51  547K

subversion-1.6.12-1.rhel5.x86_64.rpm  19-Jun-2010 19:58  3.6M

mod_dav_svn-1.6.12-1.rhel5.x86_64.rpm  19-Jun-2010 19:58  261K
前两个是依靠包,第三个是主装置包,第四个是用于支撑http拜访的包(参阅文章中还装置了dev包,自己实践中未装置,不影响运用)
装置进程如下:
首要检查SVN版别并卸载旧的版别

以root用户上传svn装置包到效劳器并测验装置。

[root@testbed1 svn]# rpm -qa | grep subversion

[root@testbed1 bin]# rpm -e subversion-1.4.2-4.el5

error: "subversion-1.4.2-4.el5" specifies multiple packages



[root@testbed1 bin]# rpm -e allmatches subversion-1.4.2-4.el5

[root@testbed1 svn]# rpm -ivh subversion-1.6.12-1.rhel5.x86_64.rpm

error: Failed dependencies:

  libneon.so.27()(64bit) is needed by subversion-1.6.12-1.x86_64

  neon = 0.26.1 is needed by subversion-1.6.12-1.x86_64

  sqlite = 3.4 is needed by subversion-1.6.12-1.x86_64


此刻直接装置subversion提示包依靠未满意,所以要晋级neon及sqlite

先晋级sqlite,请注意,rpm办理自身对sqlite有依靠,所以不能卸载sqlite,假如卸载,会呈现rpm指令不可用的问题,最好直接晋级至最新版别的sqlite。

[root@testbed1 svn]# rpm -Uvh sqlite-3.5.9-2.x86_64.rpm

Preparing...  # [100%]

  1:sqlite  # [100%]

[root@testbed1 svn]# rpm -Uvh neon-0.28.4-1.x86_64.rpm

Preparing...  # [100%]

  1:neon  # [100%]

[root@testbed1 svn]# rpm -ivh subversion-1.6.12-1.rhel5.x86_64.rpm

Preparing...  # [100%]

  1:subversion  # [100%]

[root@testbed1 svn]# rpm -Uvh mod_dav_svn-1.6.12-1.rhel5.x86_64.rpm

Preparing...  # [100%]

  1:mod_dav_svn  # [100%]



最终装置验证

[root@testbed1 ~]# svnserve version

svnserve, version 1.6.12 (r955767)

  compiled Jun 19 2010, 10:46:32



Copyright (C) 2000-2009 CollabNet.

Subversion is open source software, see http://subversion.tigris.org/

This product includes software developed by CollabNet (http://www.Collab.Net/).



The following repository back-end (FS) modules are available:



* fs_base : Module for working with a Berkeley DB repository.

* fs_fs : Module for working with a plain file (FSFS) repository.



Cyrus SASL authentication is available.


2. 树立版别库,并完成svn://办法拜访
本段参阅:http://www.linuxde.net/2011/06/138.html
# mkdir /svndata  创立svn数据目录(目录可自行拟定)
# svnadmin create /svndata/kuming  kuming就是版别库的姓名,能够改动!

装备svn装备文件(为了便利办理,这儿多个库调用相同的装备文件。)

#每个版别库创立之后都会生成svnserve.conf主配文件
# vim /svndata/kuming/conf/svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = /svndata/conf/passwd
authz-db = /svndata/conf/authz
realm = kuming

# mkdir /svndata/conf
# vim /svndata/conf/passwd  //svn用户装备文件

[users]
user1 = password1
user2 = password2
user3 = password3
user4 = password4

# vim /svndata/conf/authz  //svn权限操控装备文件

[groups] #设置组
group1 = user1,user2 #多用户用逗号离隔

[/] #根目录权限设置(就是“kuming”这个文件夹)
user3 = rw #用户1权限是:可读写
user4 = r #用户2权限是:可读,不可写
user = #什么都没写代表没有任何权限

@group1 = rw #设置组权限

[kuming:/123] #设置根目录下“123”文件夹的权限
#阐明“123”这个文件件怎样创立?这是在SVN效劳器装备好之后,创立一个权限很高的用户在客户端登录SVN
#然后创立一个文件夹“123”。

发动效劳器

# svnserve -d -r /svndata
-d表明以daemon办法(后台运转)运转
-r /svndata指定根目录是/svndata
封闭SVN 效劳器
# killall svnserve

# ps aux | grep svnserve  检查效劳,端口:3690

客户端运用的软件是TortoiseSVN,阅读办法:翻开版别库阅读器输入:svn://ip-addr/kuming/文件夹名


至此现已根本完成一个SVNServer,但此刻只能运用svn://协议拜访,且对版别库中途径的拜访授权战略很简单,很难满意实践需求。如想要给某用户只拜访子目录/aaa/bbb/ccc的权限,有必要给其拜访父目录的权限,即有必要至少给其根目录的读权限,但实践中咱们不期望这样,由于咱们不想让该用户拜访其它目录,尽管能够经过杂乱的战略到达意图,但不利于保护。比方跟着时刻开展,当增加新目录时,有必要针对新目录写相应的授权战略。

好消息是,假如运用http协议拜访SVN,则不会呈现上面的状况。即给某用户拜访某子目录的权限时不需求给其父目录的拜访权限。下面介绍怎么完成http拜访SVN。

3.装备httpd,完成http拜访
参阅http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authn.digest
http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
接下来就是装备 Apache 的 httpd.conf 文件,让 Apache 在发动的时分加载dav模块。

需求增加的内容如下:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
Location /kuming
  DAV svn
  SVNPath /svndata/kuming
/Location

首要需求启用 dav_module,然后加载 dav_svn_module。Location 标签指出拜访的 URL 以及在效劳器上的实践方位。装备结束后重新发动 Apache(service httpd restart),翻开阅读器,输入 http://效劳器IP/kuming 即可拜访SVN效劳器。

假如想要指定多个版别库,能够用多个 Location 标签,也能够运用 SVNParentPath 替代 SVNPath,例如在 /svndata 下有多个版别库 repos1,repos2 等等,用如下办法指定:

Location /svn
  DAV svn
  SVNParentPath /svndata
/Location

"SVNParentPath /svndata" 表明 /etc/svn 下的每个子目录都是一个版别库。能够经过 http://效劳器IP/svn/repos1,http://效劳器IP/svn/repos2 来拜访。


此刻任何人都能够拜访版别库(http://办法不运用svn://办法的用户认证机制,且不需求发动svnserve),而且有彻底的写操作权限。也就是说任何人都能够匿名读取,修正,提交,以及删去版别库中的内容。下面介绍怎么进行认证,参阅:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authn.digest

上面的官网中说到两种认证办法,Basic authentication和Digest authentication。此处直接介绍第二种办法,

Location /svn
  DAV svn
  SVNParentPath /svndata

  # Authentication: Digest
  AuthName "Subversion repository"
  AuthType Digest
  AuthDigestProvider file
  AuthUserFile /etc/svn-auth.htdigest

  # Authorization: Authenticated users only
  Require valid-user
/Location

The password file can be created as follows:(以下指令中"Subversion repository"就是上面的AuthName)

$ # First time: use -c to create the file
$ htdigest -c /etc/svn-auth.htdigest "Subversion repository" harry
Adding password for harry in realm Subversion repository.
New password: *****
Re-type new password: *****
$ htdigest /etc/svn-auth.htdigest "Subversion repository" sally
Adding user sally in realm Subversion repository
New password: *******
Re-type new password: *******
$

重启apache效劳即可完成以http办法拜访SVN时进行认证。此刻仅完成了对用户的认证,还未完成对目录的授权。

4. 装备途径拜访战略
能够运用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。修正 httpd.conf 文件,增加
LoadModule authz_svn_module  modules/mod_authz_svn.so

现在能够在 Location 标签中运用 authz 的功用了。一个根本的 authz 装备如下:
Location /svn
  DAV svn
  SVNParentPath /svndata

  # Authentication: Digest
  AuthName "Subversion repository"
  AuthType Digest
  AuthDigestProvider file
  AuthUserFile /etc/svn-auth.htdigest

  AuthzSVNAccessFile /svndata/conf/authz

  # Authorization: Authenticated users only
  Require valid-user
/Location
AuthzSVNAccessFile 指向的是 authz 的战略文件,具体的权限操控能够在这个战略文件中指定。

此刻现已完成认证及授权功用,当战略文件中有以下战略时
[/branches/dev/subfolder]
user0 = rw

用户user0只能拜访subfolder目录及其子目录,这样根本满意开发需求,但还不完美,且还未完成如文章标题所写的https办法拜访。

5.用 SSL 完成安全的网络传输
参阅:http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
SSL 的证书和密钥
首要,咱们需求找到 openssl 程序及其装备文件 openssl.cnf,运转如下指令来生成 128 位的 RSA 私有密钥文件
my-server.key:(以下openssl指令主张运用绝对途径/usr/bin/openssl,由于有此软件包也包括openssl指令)
openssl genrsa -des3 -out my-server.key 1024
Loading screen into random state - done
Generating RSA private key, 1024 bit long modulus
.....++++++
........++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:********
Verifying - Enter pass phrase for server.key:********
指令运转期间需求用户输入并承认自己的暗码。
现在,咱们需求 SSL 的认证证书,证书是由 CA(certificate authority) 发放而且认证的。一般状况下,假如 Subversion 的用户不是太多,安全状况不是很杂乱,咱们也能够生成一个自签名的认证证书,然后省去了向 CA 请求认证的费事。如下指令:
(以下openssl可运用绝对途径/usr/bin/openssl, openssl.cnf文件也可运用绝对途径/etc/ssl/openssl.cnf或/usr/lib/ssl/openssl.cnf,依据实践状况挑选)

openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf

Country Name (2 letter code) [GB]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your servers hostname) []:此处输入主机名
Email Address []:

以上两个指令都需求用户输入那个 key 文件的暗码,以及一些网络设置信息,如域名,邮箱等等,这儿输入的效劳器域名应该与 Apache 装备文件傍边的共同。现在,咱们能够在 Apache 的 conf 目录下新建一个 ssl 目录,将 my-server.key 和 my-server.crt 文件都移动到 ssl 目录里边。然后修正 ssl.conf 文件,将 SSLCertificateKeyFile 和 SSLCertificateFile 项指向这两个文件。(原文如此,实践中不需求)

假如 Apache 的 module 目录里边没有 mod_ssl.so 文件,能够将事前准备好的文件复制曩昔。然后,咱们能够设置 Apache 的装备文件 httpd.conf,将 ssl 模块参加其间:

LoadModule ssl_module modules/mod_ssl.so

然后,在装备文件 httpd.conf的最终,加上如下 SSL 相关装备项:

SSLMutex default
SSLRandomSeed startup builtin
SSLSessionCache none
ErrorLog logs/SSL.log
LogLevel info
VirtualHost ip地址:443
  SSLEngine On
  SSLCertificateFile conf/ssl/my-server.crt
  SSLCertificateKeyFile conf/ssl/my-server.key
/VirtualHost

这样,根本的设置作业就完成了。重新发动 Apache 效劳器,现在能够用 https 协议替代 http 协议来拜访版别库了。假如要限制版别库只能用 https 拜访,咱们能够在 Apache 装备文件傍边 Subversion 部分加上 “SSLRequireSSL”。如下:

Location /svn
  DAV svn
  SVNParentPath /svndata

  # Authentication: Digest
  AuthName "Subversion repository"
  AuthType Digest
  AuthDigestProvider file
  AuthUserFile /etc/svn-auth.htdigest

  AuthzSVNAccessFile /svndata/conf/authz

  SSLRequireSSL

  # Authorization: Authenticated users only
  Require valid-user
/Location

此刻目录授权能够完成如下要求,当战略文件中有以下战略时
[/branches/dev/subfolder]
user0 = rw

用户user0只能拜访subfolder目录及其子目录,不能拜访父目录且看不到父目录其它子目录。

6. 体系权限问题
目前为止还没完,由于linux文件体系权限问题,在提交代码时有或许遇到相似如下过错:

Cant open file /xx/xxx/db/txn-current-lock:Permission denied

这或许是由于SVN库文件是运用root用户创立的,apache运用无写权限请测验履行 chmod -R o+w /xx/xxx指令(其间/xx/xxx是SVN库房文件地址),当即收效。假如问题还未处理,请google其它处理方案。

7.证书与主机名不匹配问题
假如检查/var/log/httpd/ssl_error_log文件,发现如下过错日志
RSA server certificate CommonName (CN) `localhost.localdomain does NOT match server name!?

或许是由于mod_ssl模块默许加载了/etc/pki/tls/certs/localhost.crt证书,处理办法是修正conf.d/ssl.conf装备文件,将其间virtualhost 部分装备删去,重启httpd效劳即可。
参阅:http://stackoverflow.com/questions/19153353/see-server-name-according-to-ssl-certificates

8. 发动时免输暗码
当装备运用ssl办法发动httpd效劳后,每次发动都需求输入暗码,这样就不能使效劳开机自发动。
一种处理办法是生成免暗码的key文件,办法如下:

/path/to/openssl rsa -in /path/to/originalkeywithpass.key -out /path/to/newkeywithnopass.key

运用新的key文件就无需输入暗码发动了。
参阅:https://wiki.apache.org/httpd/RemoveSSLCertPassPhrase
参阅文章中还有另一种处理办法,根本原理是在效劳发动要求暗码时以脚本办法主动呼应一个暗码,然后完成无需手动输入暗码的意图。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章