Pat*_*Pat 8 permissions authentication apache2
我正在尝试使用 AuthExternal 和 pwauth 在我的 Apache2 服务器上设置基本身份验证。因此使用系统用户而不是另一个用户 db 来执行身份验证。
我可以无缝安装和启用所有内容。Apache2 (2.4.12-2ubuntu2)、libapache2-mod-authnz-external (3.3.2-0.1) 和 pwauth (2.3.11-0.1)。它都在我的 Ubuntu 15.10 桌面版和 Linux 4.2.0-30-generic 上运行。没什么特别的,所有标准的willy repo 都安装了。
Apache2 正在运行并且 AuthExternal 模块已正确加载,至少据我所知:
me@bla:~$ systemctl status apache2.service | grep Active
Active: active (running) since Thu 2016-02-25 13:41:02 CET; 33s ago
me@bla:~$ apache2ctl -M | grep external
authnz_external_module (shared)
Run Code Online (Sandbox Code Playgroud)
我已经定义了要使用的模块以及要在 VHost 配置文件中应用身份验证的 Derictory。请参阅下面的 /etc/apache2/sites-enabled/000-default.conf:
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/sec>
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user pat
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在浏览器中打开 loclahost/sec 时,系统会提示我登录。我以用户身份提供 pat 和他的密码,然后等待魔法发生。不幸的是,我收到一个内部服务器错误,而不是预期的 index.html 'Hello World'....
因此,我检查了 apache2 错误日志,并在其中找到了“无效的 AuthExternal 关键字 (pwauth)”。经过一番挖掘,我意识到这个错误是由 AuthExternal 引发的,因为它找不到指定的 pwauth。所以我通过运行来检查:
sudo -u www-data which pwauth
Run Code Online (Sandbox Code Playgroud)
返回的路径与上述配置文件中指定的路径相同,因此可以排除....
然后我尝试将 AuthExternal 重定向到 shell 脚本以独立于 pwauth 测试模块。该脚本只是将一个字符串附加到文件中,以便我查看它是否被 AuthExternal 调用。我在文件上运行 'chmod u+s a+x' 以允许它以 root 权限运行,因为 pwauth 需要它来访问 passwd,然后再试一次。我也尝试了没有 u+s 的情况,因为这里不需要它,但这并没有好转。这个测试让我想到,我的 apache2 有问题,而不是 pwauth。
我用 Cromium 和 Firefox 测试了所有这些,在他的情况下并不重要,但你知道......人们永远无法确定,对吧?我还尝试了所有我能想到的关于我放置指令的地方的变化。全部直接在 appache2.conf 中,appache2.conf 中的目录和包含在 ./conf-enable/security.conf 中的模块,security 中的模块和 vhost 中的目录等......这些变化都没有帮助,有些变化最糟糕的是...
然后我做了很多谷歌搜索......但我只能从 httpd.conf 时代找到关于这个主题的信息,这些信息不再适用。即使它仍然提供一些有效和有用的提示......此外,大多数(如果不是全部)这些线程都使用 .htaccess 方法。我试图通过使用 Directory 指令来避免这种情况,以避免由 .htaccess 引起的性能不足。
无论如何,我不知道在哪里看或尝试什么。老实说,我正在绕圈子,并希望得到任何提示、想法或解决方案,让我走得更远。
结果证明,AddExternalAuth 和 SetExternalAuthMethod 必须放在 VirtualHost 声明中。因此,以下配置工作得很好:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
<Directory /var/www/html/sec>
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user pat
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我仍然不明白为什么在全局范围内完成声明的场景,因此直接在 apache2.conf 中,不起作用。尽管如此,最初的问题已经解决了......