这件事情的起因是我在代码服务器上配置了一个cgit,直接通过浏览器查看代码,但是这个页面需要访问权限,我觉得直接使用系统账户是个好主意,但是不确定安全性如何。
实现方法是为apache2配置mod_authnz_external,让这个模块调用一个自己写的外部验证程序。帐号密码等参数的传递有若干种方式,我采用了环境变量,因为需要的代码最少,就是上一篇文章的那个。
在/etc/apache2/http.conf中加入
AddExternalAuth cgit_auth /usr/bin/cgitauth SetExternalAuthMethod cgit_auth environment <Directory "/srv/www/htdocs/cgit/"> AllowOverride None Options casino online ExecCGI DirectoryIndex /cgi-bin/cgit/cgit.cgi Order allow,deny Allow from all </Directory> <Directory "/srv/www/cgi-bin/"> AuthType Basic AuthName "What"s up?" AuthBasicProvider external AuthExternal cgit_auth Require valid-user </Directory>
cgit_auth 是验证程序的标识符,/usr/sbin/cgitauth是其路径,environment 表示使用环境变量传递参数。
第一个Directory只是把/cgit/的index指定为cgit的cgi程序(这话怪怪的……)
第一个Directory对所有/cgi-bin开始的路径进行验证,反正服务器不跑别的东西,这就没关系了。