使用 mod_lookup_identity 进行 Apache 组授权

使用 mod_lookup_identity 进行 Apache 组授权

我需要根据 Active Directory 数据库对一些用户进行身份验证,并且我想为此使用mod_authnz_pamover 。mod_authnz_ldap用户将有权访问某些文件夹,但受其所属组的限制。

问题是可以使用ormod_authnz_pam来授权用户,但不能使用 with (除非我指定一个组文件,这不是我的意图)。我发现有 this ,它与 一起使用,检索组信息并将其存储到环境变量中。Require valid-userRequire user <username>Require group <groupname>mod_lookup_identitymod_authnz_pam

我的问题是,如何使用这个将在用户身份验证上设置的环境变量来授权同一个用户?

编辑:我部分地弄清楚了:我可以使用Require envand/or Require expr,指的是环境变量,REMOTE_USER_GROUPS在本例中就是这样。我现在的问题是我正在努力处理httpdRequire指令评估顺序。给出以下配置:

<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

user01folder01如果我将指令从 更改Require expr为,则可以访问Require user user01

我发现当Require expr评估时,REMOTE_USER_GROUPS当我登录到服务器根目录时是SET,但当我登录到文件夹时是UNSET,因此授权失败。

编辑2:增加LogLevel显示debug只有在整体Directory经过身份验证/授权后才会调用 mod 查找。这就是为什么环境变量被设置为下一个Directory(如果你有的Option Indexes话),而不是我登录的那个。我想这就是终点了。

相关内容