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 .