我需要使用双因素身份验证来实现保护SVN访问的解决方案。理想情况下,我想使用Google身份验证器和Basic身份验证。我将如何继续实施这样的解决方案?
我正在考虑开发一个必须首先通过浏览器进行身份验证的Web代理页面,一旦通过身份验证,就会通过SVN命令。这看起来可行还是有更好的解决方案?
谢谢!
答案 0 :(得分: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 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
重启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
在打开的文件中,将第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和Google身份验证器。现在可以添加用户。
添加用户
首先,需要将用户添加为系统用户,以便他们在Google Auth客户端中正确显示
$ sudo adduser firstName.lastName --force-badname
$ sudo su - firstName.LastName
# google-authenticator
Google身份验证员会问几个问题。应根据部署的环境来审核这些内容。
复制回答第一个问题后打印的网址 - 这是QR码的网址,用于将密钥添加到您的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身份验证器代码。