Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Linux.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
66 Кб
Скачать
☆

8 Права доступа к файлам и каталогам: acl, управление доступом.

Использование POSIX ACL

ACL (англ. Access Control List — список контроля доступа, по-английски произносится «эй-си-эл») — определяет, кто или что может получать доступ к конкретному объекту, и какие именно операции разрешено или запрещено этому субъекту проводить над объектом.

ACL поддерживается файловыми системами Ext2, Ext3, IBM JFS, ReiserFS, SGI XFS.

Таблица. Компоненты ACL

Entry type Text form

Owner user::rwx

Named user user:name:rwx

Owning group group::rwx

Named group group:name:rwx

Mask mask::rwx

Others other::rwx

Включение работы с ACL

Для работы с ACL ядро системы должно быть скомпилировано с их поддержкой (в большинстве дистрибутивов по умолчанию). А также при монтировании файловой систетемы должен быть указан параметр acl

mount /dev/sdb1 /mnt -o acl

или для автоматического монтирования это параметр должен быть указан в файле /etc/fstab

/dev/vg0/lv0 /home ext3 defaults,usrquota,acl 0 2

Для работы с ACL используются утилиты getfacl и setfacl

При помощи программы getfacl можно посмотреть список текущих ACL.

getfacl [параметры] файлы

Поскольку мы еще не определяли ACL на файлы, то в примере использования программы будут показаны права по умолчанию.

$ getfacl test

# file: test

# owner: artur

# group: users

user::rw-

group::r--

other::r--

Для установки и удаления 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--

$

Рассмотрим возможные форматы записи 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--

$

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]