Списки контроля доступа
Команды getfacl и setfacl
В Системах с установленными списками контроля доступа обычно все равно действуют стандартные принципы управления доступом, которые часто называются минимальным списком контроля доступа. Команда getfacl отображает эти права в виде ACL:
user$ touch файл1
user$ getfacl файл1
file: файл1
owner: kofler
group: kofler
user::rw-
group::r--
other::r--
user$ ls -l файл1
-rw-r--r-- 1 kofler... файл2
С помощью setfacl можно определить новые права доступа. Следующие команды предоставляют пользователю gabi и всем членам группы docuteam доступ к файлу с правом читать и изменять этот файл, однако закрывают пользователю kathrin какой-либо доступ к файлу:
user$ setfacl -m gabi:rw файл1
user$ setfacl -m g:docuteam:rw файл1
user$ setfacl -m kathrin:- файл1
Список прав команды getfacl немного длиннее. Теперь ls показывает на месте прав доступа для членов группы специальную ACL-маску. За буквами, означающими доступ, следует символ "+", указывающий на наличие правил ACL.
user$ getfacl файл1
file: файл1
owner: kofler
group: kofler
user::rw-
user:gabi:rw-
user:kathrin:---
group::r--
group:docuteam:rw-
mask::rw-
other::r--
user$ ls -l файл1
-rw-rw-r--+ 1 kofler... файл1
Как правило, списки контроля доступа применяются для того, чтобы предоставить определенному пользователю доступ к его файлам, не давая такого доступа всем остальным пользователям. В таком случае потребуется обратиться к администратору, чтобы он создал группу, к которой будет принадлежать сам пользователь и те пользователи, вместе с которыми предполагается обрабатывать файлы. При использовании ACL нужно выполнить команду:
setfacl -m пользователь:rw файл.
Маски
Маска ограничивает права, предоставляемые правилами ACL. Если, например, для маски ACL устанавливается значение r, то ни одно правило не может дать пользователю права изменять или выполнять файлы. Таким образом, ACL-маска имеет приоритет над правилами ACL. Но в любом случае она никак не влияет на обычные права доступа, которые предоставляются пользователю или группе пользователей традиционным способом.
При изменении правила ACL командой setfacl маска автоматически рассчитывается заново так, чтобы могли выполняться все прочие правила ACL. Данная маска отображается с помощью команды getfacl и также учитывается командой:
ls -l
Можно явным образом настроить маску с помощью команды:
setfacl -m:rwx file
ограничив, таким образом, права ACL. Следует учитывать, что маска действует лишь до тех пор, пока не будет определено новое правило ACL. В таком случае маска ACL будет автоматически пересчитана (если только не запрещено с помощью параметра -n).
Наследование
При работе с каталогами можно установить второй набор правил для стандартных списков контроля доступа. Стандартные ACL не управляют доступом к каталогу, а служат образцом для новых файлов. Любой файл, создаваемый внутри данного каталога, наследует стандартные списки контроля доступа, указанные для этого каталога. При одновременном применении нескольких списков контроля доступа новый каталог с правильно подобранными стандартными ACL может применяться в работе в качестве отправной точки.
Совместимость
Распространение списков контроля доступа сильно осложняется тем, что многие стандартные команды и практически все пользовательские программы просто игнорируют ACL. Если просто скопировать файл с правилами ACL с помощью команды cp, то в скопированном файле правила ACL не сохранятся. То же самое произойдет, если открыть файл в текстовом редакторе OpenOffice или Gimp и сохранить его под другим именем. При использовании команды cp будет полезен параметр -p, но у большинства других команд и программ подобные параметры отсутствуют, либо эти программы вообще не приспособлены к работе с ACL.
Проблемы возникают и при резервном копировании. Команды tar и rsync элиминируют правила ACL. Файловая система CD и DVD не рассчитана на работу с ACL, так что сохраняемая в них информация теряется.
Есть два выхода: во-первых, можно применять вместо tar версию star, совместимую с ACL, во-вторых, перед резервным копированием можно создавать отдельный текстовый файл, в который заносятся ACL-правила всех копируемых файлов. После резервного копирования правил ACL восстанавливаются на основании этого файла.
getfacl -R --skip-base. > acl-backup (Сохранение ACL-правил)
setfacl --restore=acl-backup (Восстановление ACL-правил)