В этом случае, поскольку ACL_MASK вообще не содержит битов (и, следовательно, ACL не может предоставить никаких разрешений), ядро Linux полностью пропускает проверку ACL. Операция сводится к проверке «других» битов разрешения (которые разрешают доступ).
Это может быть ошибка, которая была введена в 2004 году при переписывании «универсальной поддержки ACL» (commit 42017c2e
в tglx / history, dc4ceab7
в унифицированном). Вы можете увидеть это в функции acl_permission_check () в fs/namei.c
(обратите внимание, что переменная 'mask' относится не к ACL_MASK, а к требуемым битам доступа):
static int acl_permission_check (struct inode * inode, int mask) { unsigned int mode = inode-> i_mode; если (вероятно (uid_eq (current_fsuid (), inode-> i_uid))) ... еще { if (IS_POSIXACL (inode) && (mode & S_IRWXG)) { int error = check_acl (inode, mask); если (ошибка! = -EAGAIN) ошибка возврата; } ...
Примечание: когда вы используете sh /file1
, только разрешение + r применяется к file1, потому что вы не запрашиваете ядро выполнить файл - вы выполняете только sh
.