SVN双因素认证

5
我需要实现一种解决方案,使用双因素认证来保护SVN访问安全。理想情况下,我想使用Google Authenticator以及基本身份验证。如何实施这样的解决方案?
我在考虑开发一个Web代理页面,必须通过浏览器进行身份验证,一旦验证成功,接下来的SVN命令将通过代理页面。这个方案可行吗?还是有更好的解决方案?
谢谢!

我不是很确定,但我会检查是否有一个Apache身份验证解决方案可以完成这项工作。 - randy-wandisco
这个代理将在广域网还是局域网上访问? - bahrep
我通过设置Apache集成解决了这个问题。一旦我记录下所有步骤,我会为其他人提供更多详细信息。 - BryceH
1个回答

11

这些步骤适用于Ubuntu 12.04。需要注意的是,这些步骤来自于网络上的不同来源。没有一个确定的指南来完成此设置。

首先,如果还未安装,请安装更新和C/C++编译器:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential

安装Subversion和Apache:

$ sudo apt-get install subversion
$ sudo apt-get install libapache2-svn apache2

启用 SSL:

$ sudo a2enmod ssl
$ sudo vi /etc/apache2/ports.conf

在打开的文件中将“NameVirtualHost *”更改为“NameVirtualHost *:443”
生成证书:
$ sudo apt-get install ssl-cert
$ sudo mkdir /etc/apache2/ssl
$ sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

通过按回车键接受本地主机的证书值

创建虚拟主机:

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/svnserver
$ sudo vim /etc/apache2/sites-available/svnserver 

在打开的文件中将 VirtualHost * 更改为 VirtualHost *:443

在打开的文件中 ServerAdmin 标签下添加以下内容,然后保存并关闭:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

启用该网站:

$ sudo a2ensite svnserver
$ sudo vi /etc/apache2/apache2.conf

将以下行添加到打开的文件中,保存并关闭:

ServerName localhost

重启 Apache:

$ sudo /etc/init.d/apache2 restart

将代码库添加到SVN:

$ sudo mkdir /var/svn
$ REPOS=myFirstRepo
$ sudo svnadmin create /var/svn/$REPOS
$ sudo chown -R www-data:www-data /var/svn/$REPOS
$ sudo chmod -R g+ws /var/svn/$REPOS

重复除了mkdir /var/svn之外的一切以创建其他版本库。

Google身份验证器

安装PAM并下载并构建Google身份验证器:

$ sudo apt-get install libpam0g-dev
$ cd ~
$ sudo wget http://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
$ sudo tar -jxf libpam-google*
$ cd libpam-google*
$ sudo make install

Google Auth Apache模块

下载并安装Google Auth Apache模块:

$ wget https://google-authenticator-apache-module.googlecode.com/files/GoogleAuthApache.src.r10.bz2
$ sudo tar -jxf GoogleAuthApache.src.r10.bz2 
$ cd google-authenticator*
$ sudo apt-get install apache2-prefork-dev
$ sudo vi Makefile

在打开的文件中,将第一行更改为:
APXS=apxs2

然后将第7行更改为指向要安装的位置,并保存并关闭文件:

install: all
     sudo cp .libs/mod_authn_google.so /usr/lib/apache2/modules/

使用项目网站上r21的代码替换mod_authn_google.c: https://code.google.com/p/google-authenticator-apache-module/source/detail?r=21 (这是添加真正的双因素认证时)

$ sudo make install

在Apache中设置双因素认证:

$ cd /etc/apache2/
$ sudo mkdir two-factor 
$ sudo vi httpd.conf

在打开的文件中添加以下行,保存并关闭:
Loadmodule authn_google_module /usr/lib/apache2/modules/mod_authn_google.so

$ sudo vi ports.conf

在打开的文件中将 "change" 改为 "to".
$ cd /etc/apache2/mods-available
$ sudo vi dav_svn.conf

在打开的文件中添加下面的文本,保存并关闭:

<Location /svn>
    DAV svn 
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "Google Authenticator Code"
    AuthBasicProvider "google_authenticator"
    Require valid-user
    GoogleAuthUserPath /etc/apache2/two-factor/
    GoogleAuthCookieLife 3600
    GoogleAuthEntryWindow 2
    SSLRequireSSL
</Location>

重启Apache:

$ sudo /etc/init.d/apache2 restart

在这个时候,SVN、Apache和Google Authenticator已经配置完成。现在可以添加用户。

添加用户

首先,需要将用户添加为系统用户,以便他们能够适当地显示在Google Auth客户端中。

$ sudo adduser firstName.lastName --force-badname
$ sudo su - firstName.LastName
# google-authenticator

Google Authenticator会提出几个问题。这些问题应根据部署环境进行审查。

在回答第一个问题后,复制打印的URL-这是用于添加密钥到您的Google身份验证客户端的QR码的URL。

# exit
$ cd /etc/apache2/two-factor
$ sudo cp /home/firstName.lastName/.google_authenticator firstName.lastName
$ sudo chown -R :www-data /etc/apache2/two-factor/  
$ sudo chmod g+r firstName.lastName
$ sudo vi firstName.lastName

修改已打开的文件,加入类似下面这行代码,保存并关闭:

" PASSWORD=myTestPassword

现在应该已经配置好了一切。要登录,请浏览到URL并使用用户名、密码和6个字符的谷歌身份验证器代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接