我在考虑开发一个Web代理页面,必须通过浏览器进行身份验证,一旦验证成功,接下来的SVN命令将通过代理页面。这个方案可行吗?还是有更好的解决方案?
谢谢!
这些步骤适用于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
$ 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
$ 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个字符的谷歌身份验证器代码。