POSIX ACLs для Linux. Списки контроля доступа.

                                                               ©Ерижоков А.А., 2001.
  Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site

       Введение
       Общие сведения
       Подготовка и компиляция ядра
       Установка дополнительных утилит
       Установка и изменение прав доступа
       Дополнительные возможности
       Заключение

Введение

Когда-то давным-давно, еще в мои до'linux'овые времена, мне приходилось администрить Novell'овский сервер, и после перехода на Linux было сложно привыкнуть к ому скудному, по сравнению с Novell Netware, набору средств управления правами доступа к файлам. Если в Netware я мог беспроблемно напрямую дать двум юзерам одновременно доступ на чтение-запись к одному и тому же файлу, еще трем - только на чтение к тому же файлу, а остальным - запрет на доступ, то в Linux'е такая задача просто не имела решения. Как ,впрочем, и многие другие.

Проблема заключается в том, что вся система доступа к файлам в Unix-системах сводиться к установке девяти бит, три из которых определяют режим доступа к файлу пользователя-владельца ( чтение, запись, запуск ), три - режим доступа к файлу группы-владельца и три - всех остальных. ( Есть еще дополнительные специальные три бита, но они к теме разговора не имеют отношения.:)) В большинстве случаев этого достаточно, но, к сожалению, не во всех.

Существует решение данной проблемы. Называется оно Linux ACLs - Access Control Lists - списки контроля доступа, являющиеся версией POSIX ACLs для Linux. Linux ACLs - это набор патчей для ядра и программ для работы с файловой системой и пара утилит, дающие возможность устанавливать права доступа к файлам не только для пользователя-владельца и группы-владельца файла, но и для любого пользователя или группы в отдельности. Т.е., например, если файл принадлежит пользователю root и группе users и имеет права доступа 0640 ( чтение и запись пользователю-владельцу и чтение группе-владельцу), то можно дать к этому файлу доступ на запись еще и пользователю user1 из группы lamers, права на чтение пользователю hacker5 из группы crackers и дать права на чтение и запись группе admins, а пользователю badadmin из группы admins вообще какой-либо доступ запретить.

Версии Linux ACLs есть для всех ядер, начиная с 2.2.12, но нормально работающие есть только для ядер, начиная с 2.2.17. Linux ACLs работают на машинах с любой архитектурой и предназначены (на данный момент) только для файловой системы ext2.

Автором данной системы является Andreas Grunbacher, a.gruenbacher@computer.org. Домашняя страница здесь.

Содержание
 
 
 

Общие сведения

Для работы Linux ACLs нужны следующие файлы:

linux-2.2.17ea-0.7.2.patch.gz
       Патч для ядра Linux 2.2.17 для функционирования Extended Attributes.
linux-2.2.17acl-0.7.3.patch.gz
       Патч для ядра Linux 2.2.17 для функционирования Linux ACLs.
e2fsprogs-1.19ea-0.7.1.patch.gz
       Патч для утилит для работы с файловой системой ext2 версии 1.19.
fileutils-4.0.33-acl-0.7.4.xdelta
       Бинарный патч для файловых утилит типа cp, mv, ls и т.д. версии 4.0.33 (не обязательно).
fileutils-4.0.33-acl-0.7.4.patch.gz
       Патч для исходников файловых утилит версии 4.0.33 (не обязательно).
acl-0.7.2.tar.gz
       Утилиты для управления Linux ACLs.
ea-0.7.2.tar.gz
       Утилиты для управления Extended Attributes (не обязательно).

Взять все это можно на сайте Linux ACLs на страничке Download. Старые версии хранятся здесь, текущие можно взять здесь. Если у тебя ядро версии, отличной от 2.2.17, качай последние по версии патчи для своего ядра и патчи к утилитам для ext2 и файловым утилитам, утилиты для Extended Attributes и Linux ACLs версий, совпадающих или ненамного отличающихся от версий патчей к ядру.

Работа Linux ACLs базируется на использовании Extended Attributes для хранения данных о правах пользователей и групп на файлы. Extended Attributes ( расширенные атрибуты ) - это пара компонентов типа имя/значение, привязанная к определенному inode'у (файлу, линку, каталогу, устройству и т.д.). Использование данное технологии в будущем, но применение ей можно найти и сейчас (например, хранить небольшие заметки о применении или содержании того или иного файла :)). Для управления расширенными атрибутами используются команды aget и aset, из исходников которых и состоит файл ea-0.7.2.tar.gz. Эти команды не нужны для работы Linux ACLs, поэтому данный архив ты можешь не качать.

Два различных патча к файловым утилитам fileutils-4.0.33-acl-0.7.4.xdelta и fileutils-4.0.33-acl-0.7.4.patch.gz предназначены для одной цели, первый для пропатчивания при помощи программы xdelta, а второй - для пропатчивания стандартными методами, т.е. командой patch. Можно качать только один из них. После пропатчивания, команда ls -l выдает "+" после прав доступа у файлов с установленным ACL, команда cp копирует файлы вместе с привязанными к ним списками контроля доступа, т.е. у созданного файла будут установлен то же ACL, что и у оригинала, команда mv при переносе файла сохраняет закрепленный за ним список контроля доступа. Нужно тебе это или нет - решай сам.:)

Остальные файлы необходимы для нормального функционирования Linux ACLs.

Содержание





Подготовка и компиляция ядра

Первым делом надо наложить патч, отвечающий за работу Extended Attributes. Желательно сохранить предыдущее ядро (естественно все последующие действия должны совершаться с правами root'а):

cd /usr/src
cp -Rv linux-2.2.17 linux-2.2.17.orig

Перейди в каталог, где ты сохранил файлы, и распакуй linux-2.2.17ea-0.7.2.patch.gz и linux-2.2.17acl-0.7.3.patch.gz:

gunzip linux-2.2.17ea-0.7.2.patch.gz
gunzip linux-2.2.17acl-0.7.3.patch.gz

Затем скопируй их в /usr/src:

cp linux-2.2.17ea-0.7.2.patch linux-2.2.17acl-0.7.3.patch /usr/src

Теперь можно пропатчить ядро:

cd /usr/src/linux
patch -p1 <../linux-2.2.17ea-0.7.2.patch >../patch1.err

Все сообщения о результатах работы сохранятся в файле /usr/src/patch1.err. Просмотри его на предмет содержания фраз типа ... FAILED -- saving rejects .... Наличие таких фраз означает, что установленное у тебя ядро не совпадает с оригинальным с Kernel.Org. Вероятнее всего, ядро, установленное у тебя на машине, уже было изменено разработчиками используемого тобой дистрибутива. Есть два выхода - скачать оригинальное ядро с ftp.kernel.org и использовать его (в этом случае существует вероятность того, что некоторые функции, поддерживаемые твоим текущим ядром, перестанут работать), или вручную изменить текущее.

Во втором случае необходимо определить на каких файлах patch выдал ошибку и вручную внести в них изменения. Покажу это на примере.

При пропатчивании ядра 2.2.17, входящего в дистрибутив Trustix Secure Linux, я получил следующее сообщение об ошибке:

patching file fs/ext2/inode.c
Hunk #1 FAILED at 47.
Hunk #3 succeeded at 564 (offset 9 lines).
1 out of 3 hunks FAILED -- saving rejects to file fs/ext2/inode.c.rej

Т.е. команда patch не смогла внести изменения в файл /usr/src/linux/fs/ext2/inode.c, т.к. он не совпадает с оригинальным. Все невнесенные  изменения вместе со строчками оригинального кода сохранены в файле /usr/src/linux/fs/ext2/inode.c.rej. Вот содержимое такого файла:

***************
*** 47,55 ****
   */
  void ext2_delete_inode (struct inode * inode)
  {
-      if (inode->i_ino == EXT2_ACL_IDX_INO ||
-          inode->i_ino == EXT2_ACL_DATA_INO)
-              return;
       inode->u.ext2_i.i_dtime        = CURRENT_TIME;
       /* When we delete an inode, we increment its i_version. If it
        is ever read in from disk again, it will have a different
--- 47,52 ----
   */
  void ext2_delete_inode (struct inode * inode)
  {
          inode->u.ext2_i.i_dtime        = CURRENT_TIME;
          /* When we delete an inode, we increment its i_version. If it
             is ever read in from disk again, it will have a different

Первая часть файла (от "*** 47,55 ****" до "--- 47,52 ----") - это строки файла-оригинала, строки, начинающие с "-" подлежат удалению, вторая часть - это уже измененные строки, строки, начинающиеся с "+" подлежат добавлению (в данном примере они отсутствуют). Цифры "47" и "55" в начале означают номера строк (с какой по какую), которые подлежат изменению.

Найдем в файле /usr/src/linux/fs/ext2/inode.c функцию ext2_delete_inode. Как видно из предыдущего листинга, код ее должен начинаться с 48-й строки (47-я содержит конец предыдущего комментария). Вот начало функции в моем /usr/src/linux/fs/ext2/inode.c:

...
void ext2_delete_inode (struct inode * inode)
{
        if (is_bad_inode(inode) ||
            inode->i_ino == EXT2_ACL_IDX_INO ||
            inode->i_ino == EXT2_ACL_DATA_INO)
                return;
        inode->u.ext2_i.i_dtime        = CURRENT_TIME;
        /* When we delete an inode, we increment its i_generation.
...

Код данной функции не совпадает с тем, который ожидала найти команда patch. Здесь добавлен в условии вызов функции is_bad_inode. Удалим из условия проверки inode->i_ino == EXT2_ACL_IDX_INO и inode->i_ino == EXT2_ACL_DATA_INO, в результате останется следующий код:

...
void ext2_delete_inode (struct inode * inode)
{
        if (is_bad_inode(inode))
                return;
        inode->u.ext2_i.i_dtime        = CURRENT_TIME;
        /* When we delete an inode, we increment its i_generation.
...

Примерно таким же образом нужно поисправлять все ошибки. Но не стоит этого делать, если у тебя нет хотя бы начальных познаний в языке С.:) В этом случае учше скачать оригинальное ядро.

После этого нужно наложить следующий патч - отвечающий за работу Linux ACLs.

cd /usr/src/linux
patch -p1 <../linux-2.2.17acl-0.7.3.patch >../patch2.err

Как и в предыдущем случае, нужно просмотреть файл /usr/src/patch2.err на предмет ошибок.

Теперь можно преступать к конфигурации ядра:

cd /usr/src/linux
make menuconfig

В меню Code Maturity Level Options отметь пункт Prompt for development and/or incomplete code/drivers. Затем в меню Filesystems найди пункт Extended filesystem attributes (EXPRIMENTAL). После выделения появятся еще два подпункта: Extended user attributes, отвечающий за поддержку расширенных атрибутов в системе и Access Control Lists, отвечающий за поддержку списков контроля доступа. Отметь их оба. Ниже есть пункт Second extended fs support, отвечающий за поддержку ext2. Он должен быть у тебя отмечен.:) У него есть подпункт Extended attributes for ext2 (DANGEROUS), отвечающий за поддержку расширенных атрибутов на файловой системе ext2. Отметь его. Без этой опции ничего работать не будет. Появится еще один подпункт - Extended attribute block sharing (EXPERIMENTAL). Данная опция позволяет использовать одни и те же расширенные атрибуты несколькими inode'ами. На данный момент это в стадии разработки, поэтому использовать ее рекомендуется.

Сохрани полученную конфигурацию и собери новое ядро:

cd /usr/src/linux
make clean dep install modules modules_install

Пока не стоит перегружать машину.:)

Содержание



 
 

Установка дополнительных утилит

После установки ядра необходимо пропатчить и установить утилиты для работы с файловой системой ext2 - e2fsprogs. Скачать нужную версию можно здесь.  В моем случае это версия 1.19, ее можно взять здесь.

После того, как скачаешь, скопируй полученный архив в какой-нибудь каталог (например /root/tmp) и распакуй его:

cp e2fsprogs-1.19.tar.gz /root/tmp
cd /root/tmp
tar xfz e2fsprogs-1.19.tar.gz

Скопируй туда же и распакуй файл патча для данных утилит:

cp e2fsprogs-1.19ea-0.7.1.patch.gz /root/tmp
cd /root/tmp
gunzip e2fsprogs-1.19ea-0.7.1.patch.gz

Теперь можно пропатчить утилиты:

cd /root/tmp/e2fsprogs-1.19
patch -p1 <../e2fsprogs-1.19ea-0.7.1.patch >../patch3.err

Если нет ошибок - можно откомпилировать:

cd /root/tmp/e2fsprogs-1.19
./configure
make

Если компиляция пройдет успешно, то в каталоге /root/tmp/e2fsprogs-1.19/e2fsck должен появиться файл e2fsck. Он тебе и нужен. Им нужно заменить файлы /sbin/e2fsck и /sbin/fsck.ext2:

rm -f /sbin/e2fsck /sbin/fsck.ext2
cd /root/tmp/e2fsprogs-1.19/e2fsck
cp e2fsck /sbin/e2fsck
cd /sbin
ln e2fsck fsck.ext2

Следующий шаг - компиляция и установка утилит для управления списками контроля доступа. Перейди в каталог, куда ты скачал acl-0.7.2.tar.gz и распакуй его:

tar xfz acl-0.7.2.tar.gz

Затем нужно откомпилировать и установить их:

cd acl-0.7.2
./configure --prefix=/usr
make
make install

Если все прошло нормально, у тебя должны появится следующие файлы:

/usr/include/sys/acl.h
/usr/include/acl/libacl.h
/usr/lib/libacl.a
/usr/bin/getfacl
/usr/bin/setfacl
/usr/man/man1/getfacl.1
/usr/man/man1/setfacl.1
/usr/man/man2/ext_attr_path.2
/usr/man/man2/ext_attr_fd.2
/usr/man/man2/ext_attr_proc.2
/usr/man/man5/acl.5
/usr/man/man5/ext_attr.5
/usr/share/locale/de/LC_MESSAGES/acl.mo

Здесь нас интересуют два файла:/usr/bin/getfacl и /usr/bin/setfacl - эти две команды предназначены для работы с списками контроля доступа. Но об этом в следующей главе.:)

Вот теперь можешь перегрузить компьютер.:)

Содержание

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

Для начала немного теории (лучше поздно, чем никогда...:)).

Список контроля доступа имеется отдельно для каждого inode'а и состоит из нескольких компонентов. Первые три являются копией стандартных (основных) прав доступа к файлу. Они содержатся в единственном экземпляре в ACL и есть у каждого файла в системе изначально:

ACL_USER_OBJ
       Режим доступа к файлу пользователя-владельца.
ACL_GROUP_OBJ
       Режим доступа к файлу группы-владельца.
ACL_OTHER
       Режим доступа к файлу остальных пользователей.

Следующие два являются дополнительными, устанавливаются для каждого файла в отдельности и могут присутствовать в ACL в нескольких экземплярах:

ACL_USER
       Содержит UID и режим доступа к файлу пользователя, которому установлены на него права дополнительно от основных. На каждого пользователя со своими правами на данный файл хранится отдельная запись. Не может существовать более одной записи на одного и того же пользователя.
ACL_GROUP
       То же самое, что и ACL_USER, но для группы пользователей.

При установке дополнительных прав доступа, также присваивается значение и элементу ACL_MASK, маске действующих прав доступа (effective rights mask). Значения ACL_MASK определяет лимит значения режима доступа для дополнительных пользователей и групп. Т.е. если режим доступа к файлу у пользователя rwx (чтение, запись, запуск), а маска - r--(только чтение), то у пользователя реально будет только доступ на чтение. По умолчанию (если не указывать конкретно) значение маски равно максимальному доступу среди всех дополнительных пользователей и групп.

Каталоги могут также иметь список контроля доступа по умолчанию (Default ACL). В отличие от основного ACL он действует на создаваемые внутри данного каталога файлы и директории. При создании файла внутри такого каталога, файл получает ACL, равный Default ACL этого каталога.

А теперь много практики...:)

Как я уже говорил, все управление списками контроля доступа производится при помощи двух команд getfacl и setfacl.

С помощью getfacl можно просмотреть текущие параметры доступа любого файла. Например, при вызове getfacl /home/dh будет выведено:

# file: home/dh
# owner: dh
# group: root
user::rwx
group::---
other:---

Это означает, что каталог /home/dh принадлежит пользователю dh, группе root и значение прав доступа к нему 0700. Каталог имеет только основные параметры доступа. Дополнительные параметры доступа не установлены. Первоначально ни у одного файла в системе нет дополнительных параметров доступа.

Устанавливаются и изменяются права доступа к файлу при помощи команды setfacl. Для этого используется следующий формат вызова:

setfacl -опции ACL_структура, ACL_структура,...,ACL_структура имя_файла имя_файла ...

ACL-структура представляет собой одну из следующих конструкций:

[d[efault]:][u[ser]:][пользователь] [:[+|^]режимы_доступа]
       Определяет режим доступа к файлу или каталогу пользователя (ACL_USER_OBJ). Если пользователь не указан, определяет режим доступа
       пользователя-владельца (ACL_USER).
[d[efault]:] g[roup]:[группа] [:[+|^]режимы_доступа]
       То же, что и предыдущая конструкция, но для группы (ACL_GROUP_OBJ или ACL_GROUP ).
[d[efault]:] m[ask] [:[+|^] режимы_доступа]
       Определяет действующие права доступа (ACL_MASK).
[d[efault]:] o[ther] [:[+|^] режимы_доступа]
       Определяет режим доступа для остальных пользователей (ACL_OTHER).

Присутствие компонента d (default) в конструкции указывает, что устанавливается Default ACL. При указании режима доступа без модификаторов (+ и ^), предыдущий режим доступа заменяется указанным в конструкции. При использовании модификатора + указанный режим доступа добавляется к существующему, при использовании ^ - удаляется. При использовании нескольких ACL-конструкции в строке запуска они разделяются запятыми. Примеры:

u::rwx
       Определяет режим доступа к файлу (каталогу) для пользователя-владельца на чтение, запись и запуск (просмотр).
g:users:+w
       Добавляет к правам группы users доступ на запись.
d:u:user1:^rwx
d:u:user1:---
       У пользователя user1 не будет доступа к файлам (каталогам), которые будут создаваться в указанном в командной строке каталоге.
o:r-x
o:rx
       Определяет режим доступа к файлу (каталогу) остальных пользователей - чтение и запуск (просмотр)
m:^w
       Убирает из действующих прав доступ на запись.

Для установки и изменения ACL используются следующие опции:

-s
       Заменяет полностью ACL файла на указанный в командной строке.

       setfacl -s u::rwx,g::---,o:---,u:user1:rwx,g:users:rx,u:user2:--- /home/dh
       getfacl /home/dh

       Вывод:

       # file: home/dh
       # owner: dh
       # group: root
       user::rwx
       user:user1:rwx
       user:user2:---
       group::---
       group:users:r-x
       mask:rwx
       other:---

-m
       Изменяет режимы доступа к файлу (каталогу).

       setfacl -m g::rwx /home/dh
       setfacl -m u:user1:rx, g:users:+w, d:u::rwx, d:g::--- /home/dh
       setfacl -m u:user2:rwx /home/dh
       setfacl -m u:nobody:rx,g:nobody:rx /home/dh
       setfacl -m m:^w /home/dh
       getfacl /home/dh

       Вывод:

       # file: home/dh
       # owner: dh
       # group: root
       user::rwx
       user:nobody:r-x
       user:user1:r-x
       user:user2:rwx        #effective:r-x
       group::rwx        #effective:r-x
       group:nobody:r-x
       group:users:rwx        #effective:r-x
       mask:r-x
       other:---
       default:user::rwx
       default:group::---
       default:other:---

-x
       Убирает правила доступа из ACL.

       setfacl -x u:nobody /home/dh
       setfacl -x g:nobody /home/dh
       setfacl -x user1,user2 /home/dh
       setfacl -x g:users /home/dh
       getfacl /home/dh

       Вывод:

       # file: home/dh
       # owner: dh
       # group: root
       user::rwx
       group::rwx
       mask:rwx
       other:---
       default:user::rwx
       default:group::---
       default:other:---

Таким образом можно изменять права доступа к любому файлу для любого пользователя и группы.
 
 

Содержание
 

Дополнительные возможности

Кроме основных опций запуска обе команды имеют большое количество дополнительных. Полный формат запуска getfacl такой:

getfacl [-adRLPvh] файл ...
getfacl [-adRLPvh] -

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

ls -1 /home | getfacl -

Вывод:

# file: dh/
# owner: dh
# group: root
user::rwx
group::rwx
mask:rwx
other:---
default:user::rwx
default:group::---
default:other:---

# file: ftp/
# owner: root
# group: root
user::rwx
group::r-x
other:r-x

# file: user1/
# owner: user1
# group: users
user::rwx
user:dh:r-x
user:user2:rwx
group::---
mask:rwx
other:---

# file: user2/
# owner: user2
# group: users
user::rwx
group::---
other:---

Опции:

-a
--access
       Вывод ACL без Default ACL.
-d
--default
       Вывод только Default ACL.
--omit-header
       Не выводить заголовок с комментариями (первые три строки вывода).
--all-effective
       Выводить комментарии с действующими правами доступа для каждого пользователя, даже если они совпадают с заданными.
--no-effective
       Не выводить комментарии с действующими правами доступа ни для одного пользователя.
--skip-base
       Не выводить данные файлов, у которых установлены только основные права доступа (ACL_USER, ACL_GROUP и ACL_OTHER).
-R
--recursive
       Делать рекурсивный обход каталога и выводить ACL для каждого файла и каталога. Можно использовать для создания резервной копии ACL всех файлов каталога.
--post-order
       Делать рекурсивный обход каталога и выводить ACL для каждого файла и каталога в обратном порядке, т.е. сначала выводятся ACL для файлов в каталоге, а потом для самого каталога.
-L
--logical
       Двигаться по символьным ссылкам на каталоги. При отсутствии данной опции выводятся только ACL каталога, на который указывает ссылка, и обход внутрь не делается.
-P
--phisycal
       Не двигаться по символьным ссылкам и не показывать ACL каталогов или файлов, на которые указывает ссылка.
--tabular
       Вывод в альтернативном табличном формате. Первый столбец - название элемента ACL, второй - имя пользователя или группы, третий - режим доступа, четвертый - Default ACL.

       getfacl /home/dh
       echo ----+-----
       getfacl --tabular /home/dh

       Вывод:

       # file: home/dh
       # owner: dh
       # group: root
       user::rwx
       user:user2:rwx
       group::rwx
       mask:rwx
       other:---
       default:user::rwx
       default:group::---
       default:other:---
       ----+-----
       # file: home/dh
       USER   dh        rwx  rwx
       user   user2     rwx
       GROUP  root      rwx  ---
       mask             rwx
       other            ---  ---

--absolute-names
       Не удалять лидирующий слэш ("/") из имен файлов.
-v
--version
       Вывод номера версии getfacl.
-h
--help
       Вывод подсказки.
--
       Конец опций командной строки. Все данные, следующие за этим, рассматриваются как имена файлов, даже если они начинаются с "-".

Полный формат запуска setfacl такой:

setfacl [-bkndRLPvh] [ [{-s|-m|-x} ACL_структура ...] файл ... ] ...
setfacl [-bkndRLPvh] [ [{-s|-m|-x} ACL_структура ...] - ]
setfacl [-bkndRLPvh] [ [{-S|-M|-X} ACL_файл ...] файл ... ] ...
setfacl [-bkndRLPvh] [ [{-S|-M|-X} -] файл ]

Как и в случае с getfacl, присутствие "-" в командной строке вместо имени файла указывает команде брать список файлов со стандартного ввода. Опции:

-b
--remove-all
       Удалить все дополнительные ACL.
-k
--remove-default
       Удалить все Default ACL.
-n
--no-mask
       Не изменять действующие права доступа, даже если они не заданы напрямую.
--mask
       Пересчитать действующие права доступа, даже если они заданы напрямую.
-d
--default
       Все операции производятся над Default ACL.
--restore
       Восстанавливает права доступа из файла, созданного при помощи getfacl -R/
--test
       Режим тестирования. Не изменяет ACL файлов, а только выдает результат.
-R
--recursive
       То же, что и для getfacl. Не работает вместе с --restore.
--post-order
       То же, что и для getfacl. Не работает вместе с --restore.
-L
--logical
       То же, что и для getfacl. Не работает вместе с --restore.
-P
--phisycal
       То же, что и для getfacl. Не работает вместе с --restore.
-v
--version
       Вывод номера версии setfacl.
-h
--help
       Вывод подсказки.
--
       Конец опций командной строки. Все данные, следующие за этим, рассматриваются как имена файлов, даже если они начинаются с "-".

Существуют также и опции дублирующие -s, -m и -x, но при их использовании ACL-структуры передаются не в командной строке, а из созданного предварительно файла. Это опции -S, -M и -X. Для получения данных о правилах доступа из стандартного ввода используются опции -S-, -M- и -X-. Например, чтоб скопировать права доступа с каталога /home/dh на каталог /home/user1 надо выполнить следующее:

getfacl  /home/dh >/tmp/111
setfacl -S /tmp/111 /home/user1
rm -f /tmp/111

Или так:

getfacl /home/dh | setfacl -S- /home/user1

Содержание
 

Заключение

Я не описал как пропатчивать файловые утилиты - они не столь важно для работы Linux ACLs. Я также не описал работу утилит для Extended Attributes - они слишком просты в использовании, чтоб тратить на это время. К тому же, они навряд ли тебе понадобятся. Если используемая тобой версия Linux ACLs отличается от от описанной мною, то перед использованием советую почитать man'ы, возможно, что некоторые действия будут выполняться не так, как я описал.

Содержание