Nesse caso, como o ACL_MASK não contém bits (e, portanto, a ACL não pode conceder permissões), o kernel do Linux pula totalmente a verificação de ACL. A operação passa apenas para verificar os "outros" bits de permissão (que permitem o acesso).
Isso pode ser um bug que foi introduzido em 2004 na reescrita "suporte genérico à ACL" (commit 42017c2e
no tglx / history, dc4ceab7
no unificado). Você pode vê-lo na função acl_permission_check () em fs/namei.c
(observe que a 'máscara 'variável não não refere-se ao ACL_MASK, mas aos bits de acesso desejados):
static int acl_permission_check(struct inode *inode, int mask) { unsigned int mode = inode->i_mode; if (likely(uid_eq(current_fsuid(), inode->i_uid))) ... else { if (IS_POSIXACL(inode) && (mode & S_IRWXG)) { int error = check_acl(inode, mask); if (error != -EAGAIN) return error; } ...
Como observação: quando você usa sh /file1
, somente , a permissão + r se aplica ao arquivo1, porque você não está pedindo ao kernel para executar o arquivo - você está executando apenas sh
.