IT-Service - Управление списками контроля доступа
Пятница, 31 Август 2012 09:39

Управление списками контроля доступа

Автор 
Оцените материал
(0 голосов)

Для просмотра установленных прав ACL используется программа getfacl.

getfacl файл

Для установки и удаления ACL используется программа setfacl.

 

setfacl [параметры] [{-m|-x} ACL] файлы
setfacl [параметры] [{-M|-X} файл] файлы

Для добавления и изменения ACL используется параметр –m. Например, чтобы добавить права доступа для пользователя user1, необходимо выполнить следующую команду:

$ setfacl -m u:user1:r test
$

После –m записывается ACL. Формат записи достаточно простой. Если первый символ u, то добавляются права для указанного после двоеточия пользователя. Если первый символ g — определяются права для группы. Если m — определяется маска. Сами права записываются в символьном виде.

Теперь можно посмотреть, какие ACL установлены у файла test:

$ getfacl test
# file: test
# owner: artur
# group: users
user::rw-
user:user1:r--
group::r--
mask::r--
other::r--
$

Для того, чтобы изменить права пользователя user1, необходимо выполнить следующую команду:

$ setfacl -m u:user1:rx test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rw-
user:user1:r-x
group::r--
mask::r-x
other::r--
$

Как видно из примера, у пользователя user1 были изменены права доступа.

Теперь добавим в ACL группу bin:

$ setfacl -m g:bin:rwx test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rw-
user:user1:r-x
group::r--
group:bin:rwx
mask::rwx
other::r--
$

В списке ACL присутствует слово mask. Это не пользователь, а специальная возможность, ограничивающая права доступа. Маска является фильтром, определяющим максимально возможные права доступа. Например, группа bin имеет полные права доступа. Мы сами дали ей эти права. Но мы можем их ограничить, определив маску.

$ setfacl -m m::rw test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rw-
user:user1:r-x                  #effective:r--
group::r--
group:bin:rwx                   #effective:rw-
mask::rw-
other::r--
$

Обратите внимание на то, что после введения макси напротив пользователей и групп появилось поле, указывающее реальные права доступа. Если у группы bin при записи ее в ACL права были rwx, то теперь они стали rw-. С пользователем user1 случилось то же самое. До определения маски права были r-x, после — стали r--. При помощи маскиrw- мы сказали, что право x учитываться не будет.

На права хозяина, группы и всех остальных файла маска не влияет. Маска влияет только на дополнительных пользователей и группы.

$ chmod u+rwx test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rwx
user:user1:r-x                  #effective:r--
group::r--
group:bin:rwx                   #effective:rw-
mask::rw-
other::r--
$

Для того, чтобы маска заработала, ее необходимо определить явно при помощи setfacl. Иначе она будет «плавающей» и не будет выполнять свои функции.

Маску всегда определяют самой последней, после указания прав доступа всех пользователей и групп.

Дело в том, что при внесении изменений в список acl, маска по умолчанию ставится такой, чтобы работали все установленные acl-ы. Т.е. не влияет на установленные права, становится "плавающей". Если вы не хотите, что бы маска изменялсь, используйте параметр -n (--no-mask), в этом случае маска изменяться не будет.

Если у файла установлены ACL, определение прав доступа происходит в том порядке, в котором они выводятся программой getfacl.

Программа setfacl предоставляет возможность скопировать ACL одного файла на другой файл. Для этих целей служит параметр --set-file. Например, необходимо скопировать списки доступа файла test в файл newtest. Тогда командная строка будет выглядеть следующим образом:

$ getfacl test | setfacl --set-file=- newtest
$ getfacl newtest
# file: newtest
# owner: artur
# group: users
user::rwx
user:user1:r-x                  #effective:r--
group::r--
group:bin:rwx                   #effective:rw-
mask::rw-
other::r--
$

Удаление элементов из списка ACL происходит при помощи параметра –x.

$ setfacl -x u:user1 test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rwx
group::r--
group:bin:rwx
mask::rwx
other::r--
$

При выполнении этой команды пропала маска. Но об этой особенности я предупреждал Вас раньше.

Solaris

В Solaris команда на задание прав пользователю, например на чтение, работает так:

setfacl -m u:user1:r-- test

Ключевое отличие - наличие "--" - без указания "черточек" - не работает.

Рассмотрим возможные форматы записи ACL.

[d[efault]:][u[ser]:][пользователь][:[+|^]права]
[d[efault]:] g[roup]:[группа][:[+|^]права]
[d[efault]:] m[ask][:[+|^]права]
[d[efault]:] o[ther][:[+|^]права]

Почти все возможные варианты записи мы уже рассматривали. Осталось разобраться с default и специальными символами: + и ^.

Default — устанавливает ACL по умолчанию. Имеет смысл только для директории. Если создавать файлы в директории, у которой установлен ACL по умолчанию, то значения ACL копируются во вновь создаваемые файлы.

Если при написании ACL права доступа начинаются с символа +, то эти права добавляются к уже существующим. Если в начале описания прав стоит символ ^, то их значение отнимаются от существующих прав доступа.

У программы setfacl есть еще две интересные опции: –M и –X. Первая изменяет или добавляет ACL, вторая удаляет ACL. В отличии от –m и –x, список ACL передается не в командной строке, а в отдельном файле. Формат файла соответствует выводу программы getfacl.

$ getfacl newtest > aclfile
$ cat aclfile
# file: newtest
# owner: artur
# group: users
user::rwx
user:user1:r-x  #effective:r--
group::r--
group:bin:rwx   #effective:rw-
mask::rw-
other::r--
$

Теперь установим ACL, записанные в файле aclfile, на файл test.

$ setfacl -M aclfile test
$ getfacl test
# file: test
# owner: artur
# group: users
user::rwx
user:user1:r-x                  #effective:r--
group::r--
group:bin:rwx                   #effective:rw-
mask::rw-
other::r--
$

К сожалению, многие программы не показывают наличие у файла установленных ACL (приятным исключением является программа ls. Если на файл установлены ACL, она ставит символ + после стандартных прав доступа.). Новая технология, еще не все ее приняли к рассмотрению. Более того, стандартные программы работы с архивами в Linux не понимают ACL и не сохраняют их значение в архиве. То есть, у Вас могут возникнуть проблемы с резервным копированием файлов системы. Так что прежде чем использовать ACL хорошо подумайте, а так ли они Вам нужны?

Прочитано 5801 раз Последнее изменение Вторник, 02 Октябрь 2012 10:53
Авторизуйтесь, чтобы получить возможность оставлять комментарии