我需要根据 Active Directory 数据库对一些用户进行身份验证,并且我想为此使用mod_authnz_pam
over 。mod_authnz_ldap
用户将有权访问某些文件夹,但受其所属组的限制。
问题是可以使用ormod_authnz_pam
来授权用户,但不能使用 with (除非我指定一个组文件,这不是我的意图)。我发现有 this ,它与 一起使用,检索组信息并将其存储到环境变量中。Require valid-user
Require user <username>
Require group <groupname>
mod_lookup_identity
mod_authnz_pam
我的问题是,如何使用这个将在用户身份验证上设置的环境变量来授权同一个用户?
编辑:我部分地弄清楚了:我可以使用Require env
and/or Require expr
,指的是环境变量,REMOTE_USER_GROUPS
在本例中就是这样。我现在的问题是我正在努力处理httpd
的Require
指令评估顺序。给出以下配置:
<VirtualHost *:80>
DocumentRoot /var/www/sftp
ServerName mysite.com.br
ErrorLog logs/mysite.log
<Directory "/var/www/sftp">
Options Indexes
AuthType Basic
AuthName "private area"
AuthBasicProvider PAM
AuthPAMService httpd-sssd-auth
LookupUserGroups REMOTE_USER_GROUPS :
Require valid-user
</Directory>
<Directory "/var/www/sftp/folder01">
Options Indexes
LookupUserGroups REMOTE_USER_GROUPS :
<RequireAll>
Require valid-user
Require expr reqenv('REMOTE_USER_GROUPS') =~ /group01/
</RequireAll>
</Directory>
folder01
当我登录到服务器根目录时,我可以可视化文件夹。但是当我尝试访问文件夹本身时,我什至没有机会进行身份验证。 403把我打垮了。我 100% 确定它正在工作,因为当我将正则表达式更改为不包含 user01 的有效组的任何内容时,Require expr
我无法可视化文件夹。folder01
错误日志显示:[Fri Jul 29 18:49:51.817402 2016] [authz_core:error] [pid 9921] [client 10.221.1.187:32196] AH01630: client denied by server configuration: /var/www/sftp/user01
user01
folder01
如果我将指令从 更改Require expr
为,则可以访问Require user user01
。
我发现当Require expr
评估时,REMOTE_USER_GROUPS
当我登录到服务器根目录时是SET,但当我登录到文件夹时是UNSET,因此授权失败。
编辑2:增加LogLevel
显示debug
只有在整体Directory
经过身份验证/授权后才会调用 mod 查找。这就是为什么环境变量被设置为下一个Directory
(如果你有的Option Indexes
话),而不是我登录的那个。我想这就是终点了。