2013-10-31 48 views
2

我需要实施一种解决方案来使用双因素认证来保护SVN访问。理想情况下,我想使用Google身份验证器和基本身份验证。我将如何着手实施这样的解决方案?SVN双因素认证

我在考虑开发一个必须首先通过浏览器进行身份验证的Web代理页面,一旦通过身份验证,后续的SVN命令就会通过。这似乎是可行的还是有更好的解决方案?

谢谢!

+0

我不太确定,但我会检查是否有Apache认证解决方案可以完成这项工作。 –

+0

该代理是在WAN还是LAN上访问? – bahrep

+0

我能够通过设置Apache集成来解决这个问题。一旦我获得所有记录的步骤后,我会为他人提供更多详细信息。 – BryceH

回答

8

这些指示将适用于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 cp /etc/apache2/sites-available/default /etc/apache2/sites-available/svnserver 
$ sudo vim /etc/apache2/sites-available/svnserver 

在打开文件更改虚拟主机*到虚拟主机*:

$ 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 

通过敲击输入

创建虚拟主机接受了证书localhost值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创造附加仓库

谷歌身份验证

安装PAM和下载,并建立谷歌身份验证:

$ 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 

谷歌验证Apache模块

下载和安装谷歌验证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 
在打开的文件

,变线1:

APXS=apxs2 

然后换行7点的位置安装,保存并关闭该文件:

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

替换mod_authn_google。c。与从R21项目工地这里的代码: 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 

在打开的文件变化

$ 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和谷歌身份验证器进行配置。现在可以添加用户。

添加用户

首先,用户需要将其添加为系统用户,以便他们在谷歌验证客户端

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

谷歌身份验证适当地显示出来会问几个问题。这些应根据所部署的环境进行审查。

复制是回答第一个问题后,打印的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 

修改打开的文件,包括线为QR码的网址和类似于下面的行,保存并关闭:

" PASSWORD=myTestPassword 

现在应该配置所有东西。要登录,请浏览至URL并使用用户名和密码+6个字符的Google身份验证器代码。