На самом деле, речь в этой статье пойдёт не только о наследовании прав на файлы и каталоги в операционных системах семейства Linux. Однако наследование прав доступа будет первой и основной темой, которая будет здесь затронута.
Многие пользователи Windows в курсе, как работает система наследования прав. Суть её в том, что пользователи и группы будут иметь те же права на файлы и каталоги, которые они имели по отношению к родительскому каталогу. В Linux механизм наследования работает схожим образом и называется «правами по умолчанию». Несмотря на своё название, права по умолчанию вовсе не задаются автоматически. Их нужно прописать отдельно. Для примера используем каталог пользователя test:
setfacl -d -m u::rwx,g::r-x,o::r-x /home/test/
-d указывает, что команда задаёт права по умолчанию, -m на редактирование прав.
Как видим на скриншоте, использование команды getfacl показало, что в свойствах каталога появились строчки, начинающиеся с default. Именно они и говорят нам о правах по умолчанию для владельца, ассоциированной группы и всех остальных. Не будем забывать, что ACL дозволяет установку прав доступа для отдельных пользователей и групп. Воспользуемся данной возможностью:
setfacl -d -m u:tux:rwx /home/test
Этой командой мы дали пользователю tux те же права по умолчанию, что и у владельца каталога.
Для удаления прав по умолчанию используется команда
setfacl -k /home/test/
Если нужно удалить права по умолчанию и в подкаталогах, то добавьте ключ -R, указывающий на рекурсивное действие:
setfacl -R -k /home/test/
Кроме наследования прав есть и другие особенности ACL, которые будет полезно рассмотреть. Первым делом рассмотрим сохранение (или нет) ACL-прав при операциях над файлами и папками:
- перемещение файлов и каталогов сохраняет ACL-доступы;
- копирование файлов и каталогов не сохраняет ACL-доступы, если не использован ключ -p;
- архивирование и распаковка должны проводиться утилитой star (вместо tar).
Как видим, логика операций здесь довольно проста.
Другой интересной возможностью в работе с ACL-правами доступа будут так называемые автоматические операции.
Первой из таких операций является перенос ACL-прав. Это значит, что мы снимаем ACL-права с одного объекта и придаём их другому. Ранее мы рассматривали файл file_test в каталоге /home/test/. Перенесём ACL-доступы с него на файл file_test2 командой
getfacl /home/test/file_test | setfacl --set-file=- /home/test/file_test2
На скриншоте выше можно наблюдать права на файл file_test2 до и после применения команды по переносу ACL-прав.
Если же нужно не перенести, а скопировать ACL-права с одного объекта на другой, то здесь поможет другая команда:
getfacl /home/test/file_test | setfacl -M- /home/test/file_test2
Эта команда не заменит права, как предыдущая, а добавит их к уже существующим.
Еще одним неплохим приемом может стать копирование ACL-прав на каталог в права по умолчанию этого же каталога. По сути, это то же самое, что мы провернули в начале статьи. Вот только тогда мы могли задать любые другие права по умолчанию. А вот если нам надо именно скопировать текущие права, то будет проще воспользоваться следующей командой:
getfacl --access /home/test/dir1/ | setfacl -d -M- /home/test/dir2/
Здесь dir1 и dir2 являются каталогами, между которыми мы копируем права по умолчанию.
Статьи по теме: