Eu preciso ter alguns usuários autenticados em um banco de dados do Active Directory e gostaria de usar mod_authnz_pam
over mod_authnz_ldap
para isso. Os usuários terão acesso a determinadas pastas, restritas pelos grupos a que pertencem.
O problema é que mod_authnz_pam
pode autorizar usuários usando Require valid-user
ou Require user <username>
, mas não com Require group <groupname>
(a menos que eu especifique um arquivo de grupo, que não é minha intenção). Descobri que há esse mod_lookup_identity
, que funciona com mod_authnz_pam
, recupera as informações do grupo e as armazena em um env var.
Minha pergunta é: como posso usar este env var, que será configurado na autenticação do usuário, para autorizar esse mesmo usuário?
EDIT: Eu parcialmente descobri: eu posso usar Require env
e / ou Require expr
, referindo-se ao env var, que é REMOTE_USER_GROUPS
neste caso. Meu problema agora é que estou lutando com a ordem de avaliação da diretiva httpd
Require
. Dada a seguinte configuração:
<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>
Eu posso visualizar a pasta folder01
quando eu fizer login na raiz do servidor. Mas quando tento acessar a pasta em si, nem tenho a chance de autenticar. 403 me esmaga. Tenho 100% de certeza de que o Require expr
está funcionando porque não consigo visualizar a pasta folder01
quando altero o regex para qualquer coisa que não contenha o grupo válido do user01.
O log de erros mostra: [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
pode acessar folder01
se eu alterar a diretiva de Require expr
para Require user user01
.
Descobri que quando Require expr
é avaliado, REMOTE_USER_GROUPS
é SET quando efetuo login na raiz do servidor, mas UNSET quando efetuo login na pasta e, portanto, a autorização falha.
EDIT2: aumentar LogLevel
para debug
revelou que a consulta de mod só é chamada quando o Directory
inteiro foi autenticado / autorizado. É por isso que o env var é definido para o próximo Directory
(se você tiver Option Indexes
on), mas não para o que eu faço login. Eu acho que é o fim da linha.