Trac 手记(二) : 安全配置

上篇文章完成了使 Subversion 和 Trac 接入 Apache 的方法,如果是个人使用 Trac 的话,只需要再配下 trac 的账户就可以使用。

但是如果是团队使用的话,无论是本地局域网或者公共网络,直接访问 SVN 仓库或 Trac 都是不安全的,如果所处的网络处于被监控状态,任何提交的信息都可能被捕获到,这就是为什么有 HTTPS 的原因。

因此,在进一步深入 Trac 之前,我们必须先谈谈配置安全的、基于 Apache 的 Subversion 和 Trac 构建的ALM (Application Lifecycle Management) 系统。

在开始之前,如果您没有看过我的上一篇文章 :Trac 手记(一) : Windows 下安装 Trac ,请务必先看一下。

1) 配置基于 SSL 的 Apache

众所周知,HTTP 所有的内容基本都是明文传输的,这就为病毒、盗号等网络黑暗提供了方便。许多人也许都见过,在登录到某个网站时浏览器总会有以下提示:

就是提醒用户进入了 HTTPS 安全连接,这种情况下通常信息不会泄漏。

本节的目标就是配置 Apache 使用 SSL,使得在实施 Trac 和 SVN 时,避免别有用心者通过捕获数据包来获得不属于自己的账户,从而实施破坏。

1.1) 安装 Apache with OpenSSL

下载集成 OpenSSL 的 Apache 并安装。

1.2) 创建安全证书

在 D:Apachebin 目录运行以下命令:

按照提示填写内容,该命令生成一个未签名的证书:包含 server.csr、 privkey.pem 文件。

openssl req -config ../conf/openssl.cnf -new -out server.csr

然后生成私匙:server.key

openssl rsa -in privkey.pem -out server.key

对证书进行签名:

openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 9999

最后删除 .rnd、privkey.pem,保存 server.csr 到安全的地方或直接删除。
把剩下的 server.crt、server.key 复制到 D:Apacheconf 目录。

1.3) 配置Apache SSL

复制 D:\Apache\conf\extra\httpd-ssl.confD:\Apache\conf\ssl.conf

修改:SSLMutex "file:D:/Apache/logs/ssl_mutex"SSLMutex default

修改:<VirtualHost _default_:443> 为:<VirtualHost *:443>

根据需要,可能还需要修改 : SSLCertificateFile 和 SSLCertificateKeyFile,分别代表上面描述的 server.crt 和 server.key 的路径。
修改 httpd.conf 加载以 SSL 模块 :

LoadModule ssl_module modules/mod_ssl.so

在 httpd.conf 的末尾加上一句 :

Include "conf/ssl.conf"

启动 Apache,如果启动成功,访问页面无问题,则代表成功。

值得注意的问题 :
在配置 Apache 的过程中,我碰到了总是无法启动 Apache 的问题,经过检查发现是 QQ 占用 443 端口。
所以,如果你在配置过程中发现 Apache 无法启动,用 netstat 命令或其它工具(IceSword、TcpViewer等)检查下端口占用状态,如果 443 被 QQ 之类的软件的占用掉,就用华南虎头铡把它喀嚓掉。

2) Subversion 安全配置

类似上节所述,更改 SVN 的访问控制如下:

1
2
3
4
5
6
7
8
9
10
11
12
<Location /svn/>
  DAV svn
  SVNParentPath "G:\ALM\SVN"
  SVNListParentPath On
  AuthzSVNAccessFile "G:\ALM\Authz\SVN.acp"

  SSLRequireSSL
  AuthType Basic
  AuthName "Authorization realm"
  AuthUserFile "G:\ALM\Authz\Users.acp"
  Require valid-user
</Location>

上面配置中的 SVN.acp 文件格式和 Subversion 配置的 /repos/conf/authz 文件格式相同,用以管理用户分组和访问权限。

而 Users.acp 则是由 D:Apachebinhtpasswd.exe 创建的,供 Trac 和SVN 使用,实现用户间的互通。

由此,整个 SVN 库的访问都必须通过 https ,具有极高的安全性。

3) Trac 安全配置

Trac 已经为我们准备好验证用户所需的大多东西,我们只需要配置登录机制即可。

3.1) 安全配置

1
2
3
4
5
6
<Location /trac/login>
    AuthType Basic
    AuthName "Trac login"
    AuthUserFile G:\ALM\Authz\Users.acp
    Require valid-user
</Location>

配置和 SVN 相同的帐号。

3.2) 使用 HTTPS 验证登录

明文 HTTP 协议易泄密,因此还需要为登录的 URL 设定为 HTTPS 协议登录。

取消 httpd.conf 中的以下模块的注释,以启用重定向:

LoadModule rewrite_module modules/mod_rewrite.so

在 httpd.conf 末尾加入以下代码,用以将登录重定向到 HTTPS:

1
2
3
RewriteEngine On  
RewriteCond %{SERVER_PORT} !^443$  
RewriteRule ^(/trac/login)$ https://%{SERVER_NAME}$1 [L,R]

将 ssl.conf 的以下代码:

1
</VirtualHost>

修改为:

1
2
3
4
RewriteEngine On
RewriteCond %{SERVER_PORT} !^8080$
RewriteRule !^(/trac/login)$ http://%{SERVER_NAME}:8080$1 [L,R]
</VirtualHost>

上述配置的作用为,当请求登录 trac 时,重定向到 HTTPS,对于任何非登录 trac 的url,重定向为 HTTP。

4) 结束语

至此,该 Trac 系统基本安装完成,不过目前依然不够,在下一节,我会介绍 Trac 系统中的一些基本概念以及如何进行Trac 的权限管理。

**警告 **: 本文所使用的是 Trac 0.11b1 版,不保证对文章内容对其他版本适用。
同样也不推荐你在实际环境部署使用该beta版,如出现任何问题,概与本人无关。
如果你存在任何有关问题,请 mail 我 : rszealic{at}gmail.com

版权 : 保留对本文的一切修改、发布等权力。任何人想要转载本文部分或全部内容时,必须保留包括作者 Zealic、出处、版权,共三项信息。对本文的参考引用,则不受限制。

5) 参考

Zealic @ 2008-01-06

View Comments |
Categories: tech
Tags:

Related posts