5

我需要实施一个解决方案来使用两因素身份验证来保护 SVN 访问。理想情况下,我想将 Google Authenticator 与 Basic auth 一起使用。我将如何着手实施这样的解决方案?

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

谢谢!

4

1 回答 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

通过按 Enter 接受证书的 localhost 值

创建虚拟主机:

$ 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

重启阿帕奇:

$ 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 并下载并构建 Google Authenticator:

$ 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 身份验证 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

在打开的文件中,将第 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>

重启阿帕奇:

$ 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 - 这是 QR 码的 URL,用于将密钥添加到您的 Google Auth 客户端

# 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 个字符的 Google 身份验证器代码。

于 2013-11-05T02:38:13.293 回答