我目前有我的 apache 服务器通过 htpasswd 创建的密码文件进行身份验证。配置如下:
AuthType Basic
AuthName "Secured Site"
AuthUserFile "/etc/apache2/users.passwd"
我如何才能将其更改为通过本地系统帐户进行身份验证,并将其限制为仅指定组中的本地系统帐户子集?
答案1
根据 David Z 的建议,您可以使用 mod-authnz-external。将其与验证码例如。
如果您正在运行 Debian 或衍生版本:
apt-get install libapache2-mod-authnz-external pwauth
a2enmod authnz_external
在您的配置中,添加
<IfModule mod_authnz_external.c>
DefineExternalAuth pwauth pipe /usr/sbin/pwauth
</IfModule>
在目录部分或 .htaccess 文件中:
AuthType Basic
AuthName "Login"
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
# or
# Require user jules jim ...
apache2ctl restart
最后使用或重新加载配置service apache2 reload
。
也可以看看本文档。
答案2
你可能想研究一下mod_auth_pam
。PAM 是“可插入式身份验证模块”系统,标准 Linux(我假设这是 Linux)系统登录机制依赖 PAM 进行身份验证。
另一个选择是mod_authnz_external
,它将直接查看/etc/shadow
文件来验证帐户。
编辑:显然mod_auth_pam
不再维护(不幸的是),所以也许mod_authnz_external
是更好的选择......
答案3
Apache 模块mod_auth_pam
会为你完成这个。你启用模块,配置文件应该类似于
AuthType Basic
AuthName "secure area"
require group staff
require user webmaster
一切就绪。
答案4
我刚刚遇到了同样的问题。这是我的解决方案,因为mod_auth_pam
已经失效了,没有人解决原始问题,
“通过本地系统帐户进行身份验证...在指定的组中“
我使用的是 Ubuntu 18.04,因此请根据自己的系统对软件包安装进行调整。在此示例中,我托管了一个目录/var/www/data
,并且只希望组中的用户data
有权访问。我假设您已运行 Apache 安装并且data
已创建了组。
如前所述,您需要获取pwauth
和authnz
软件。此外,您还需要mod-authz-unixgroup
组身份验证。您可以使用以下方式安装它们:
apt install libapache2-mod-authz-unixgroup libapache2-mod-authnz-external pwauth
接下来,使用以下命令更改 pwauth 的权限(此操作已于 2020-06-02 修复,但我将保留此权限以用于旧版本),
chmod u+s /usr/sbin/pwauth
然后,编写你的 apache2 VirtualHost 配置。这是一个非常简单的例子,
<VirtualHost *:80>
# Host Info
ServerName cool.things
ServerAdmin [email protected]
DocumentRoot /var/www
# Where the logs go
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Setup external authentication
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
# Load an _h5ai index
<Directory "/var/www/data">
Options Indexes FollowSymLinks MultiViews
DirectoryIndex index.html index.php /data/_h5ai/public/index.php
# Setup Basic Authentication
AuthType Basic
AuthName "data group members only"
AuthBasicProvider external
AuthExternal pwauth
# Only allow members of the "data" group
Require unix-group data
</Directory>
</VirtualHost>
最后,您需要重新加载、重新启动并检查 Apache 的状态是否有错误。
service apache2 reload
service apache2 restart
service apache2 status