Может кто-нибудь объяснить мне, как umask
влияет маска по умолчанию для вновь создаваемых файлов, если ACL активированы? Есть ли документация по этому поводу?
Пример:
$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx . # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc x.c -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx #effective:rw-
group::---
mask::rw-
other::---
Я бы ожидал mask:rwx
. На самом деле после установки, umask
например, 027
я получаю ожидаемое поведение.
linux
permissions
posix
acl
jofel
источник
источник
mask::rw-
. Но это не совсем твой вопрос, верно?mask::rw-
а неmask::rwx
который был маской по умолчанию каталога.Ответы:
Я нашел этот пример под названием: ACL и MASK в Linux . В этой статье демонстрируются следующие примеры, которые, как мне кажется, помогают понять, как работают ACL и как они
umask
взаимодействуют друг с другом.Задний план
При создании файла в системе Linux
0666
применяются разрешения по умолчанию , тогда как при создании каталога0777
применяются разрешения по умолчанию .пример 1 - файл
Предположим, мы установили наш umask на 077 и коснулись файла. Мы можем использовать,
strace
чтобы увидеть, что на самом деле происходит, когда мы делаем это:В этом примере мы видим, что системный вызов
open()
выполняется с разрешениями 0666, однако, когдаumask 077
ядро затем применяет его, следующие разрешения удаляются (---rwxrwx
), и у нас остаётсяrw-------
0600.пример - 2 каталог
Та же концепция может быть применена к каталогам, за исключением того, что вместо разрешений по умолчанию 0666, они 0777.
На этот раз мы используем
mkdir
команду. Затемmkdir
команда вызывает системный вызовmkdir()
. В приведенном выше примере мы видим, чтоmkdir
команда вызвалаmkdir()
системный вызов с разрешениями по умолчанию0777
(rwxrwxrwx
). На этот раз с umask022
удаляются следующие разрешения (----w--w-
), поэтому мы оставляем 0755 (rwxr-xr-x
) при создании каталогов.пример 3 (применение ACL по умолчанию)
Теперь давайте создадим каталог и продемонстрируем, что происходит, когда к нему применяется ACL по умолчанию вместе с файлом внутри него.
Теперь давайте создадим файл
aclfile
:Теперь получите разрешения для вновь созданного файла:
Обратите внимание на маску
mask::rw-
. Почему это неmask::rwx
так, как когда каталог был создан?Проверьте
luvly
файл журнала, чтобы увидеть, какие разрешения по умолчанию были использованы для создания файла:Это где это немного сбивает с толку. С маской, установленной
rwx
при создании каталога, вы ожидаете того же поведения при создании файла, но это не работает таким образом. Это потому, что ядро вызываетopen()
функцию с разрешениями по умолчанию0666
.Подвести итоги
chmod
.Ссылки
источник
chmod("file",0760)
->mask:rw
,chmod("file",0770)
->mask:rwx
). Может быть, я должен начать новый вопрос об этом ...в целях безопасности операционная система Linux не допускает автоматического создания файла с битом выполнения. Это сделано для того, чтобы кибер-злоумышленники не могли записывать программы в такие файлы и выполнять их, если они получат доступ к вашему серверу. Это всего лишь мера предосторожности. Вам навсегда придется вручную установить бит выполнения для файлов после их создания с помощью утилиты chmod
источник