Поддерживаемые версии Ubuntu
Все с ядром 2.4.21 (?) и выше, а также другие ОС

Вступление

Итак, пришло время задуматься о безопасности вашей сети. В частности о назначении прав на каталоги и файлы для пользователей и групп. Стандартные права в операционных системах Unix не так гибки, как хотелось бы. К сожалению они годятся для использования в простых схемах сети. Например, ситуацию когда к одному и тому же каталогу нужно, чтобы несколько групп пользователей имели разные права доступа, не реализовать с использованием стандартных прав.

Для реализации сложных структур прав доступа используются расширенные права - ACL (Access control list - cписки контроля доступа). Списки контроля доступом (ACL) дают большую гибкость, чем стандартный набор полномочий «пользователь/группа/остальные». ACL доступны в коммерческих Unix-системах, таких как IRIX или Solaris (и в Windows NT) в течение нескольких лет. В настоящее время, благодаря проекту TrustedBSD, ACL доступны в FreeBSD 5.0 и выше, а также в Linux. Возможность использования ACL позволяет администратору получить преимущество от использования более интеллектуальной модели безопасности.

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

Устоявшиеся истины:

  • Каждый пользователь входит в минимум одну группу. Группа, присваиваемая пользователю при его создании, называется основной. Все остальные группы в которые будет включен пользователь, будут являться дополнительными.1)
  • Группа пользователей может содержать некоторое количество пользователей, но не может содержать или включаться в другие группы.
  • Группа может быть пустой, т.е. не содержать в себе ни одного пользователя.

Чтобы добавить пользователя в ту, или иную группу, достаточно отредактировать файл /etc/group:

Хоть редактирование системных файлов вручную - самый быстрый способ их изменения, необходимо быть очень внимательным редактируя их. Используйте для редактирования файла /etc/group утилиту usermod, обязательно создавайте резервную копию редактируемого файла для возможности отката.

Примечание прислал Лихоманенко Артем 2013/04/23 15:55

syslog:x:103:
klog:x:104:
scanner:x:105:hplip,allexserv
nvram:x:106:
fuse:x:107:allexserv

Видно, что в листинге выше в группу scanner входят пользователи hplip и allexserv. Чтобы добавить в эту группу еще пользователей, просто перечислите их символьные имена через запятую.

Синтаксис файла прост:

имя_группы:пароль:GID:список_пользователей

Итак, основная мысль статьи - это использование расширенных прав ACL.2)

Включение ACL в системе

С какой-то там версии Ubuntu, поддержка ACL уже включена и поддерживается ядром.3) Но как бы то ни было, по умолчанию, в системе, ACL не активированы. Для того, чтобы операционная система начала учитывать списки контроля, необходимо ей об этом сказать. Для этого потребуется отредактировать файл /etc/fstab и указать в нем, на каких разделах HDD следует учитывать ACL права. Проверить, поддерживает ли тот или иной раздел винчестера ACL, можно попытавшись установить эти самые ACL, командой setfacl:

/root > setfacl -m u:allexserv:rw-,g:root:rw- qqq
setfacl: qqq: Operation not supported

Operation not supported - операция не поддерживается - бодро рапортует вам система! Это признак того, что ACL на этом разделе винчестера, где лежит файл qqq не активированы. Что ж, давайте отредактируем /etc/fstab и приведем его в должный вид:

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# /dev/sda1
UUID=1b09f304-1772-4a87-bc1c-ee8c6170ef1e /               ext3    relatime,errors=remount-ro 0       1
# /dev/sda5
UUID=95b26917-535e-46ac-8d72-443d46184bb5  /media/Profil  ext3  grpquota,acl,suid,dev,usrquota,relatime,exec  0  2
# /dev/sda6
UUID=759a8adb-ed01-4d4f-b173-9005ad165368  /media/Work  ext3  grpquota,acl,suid,dev,usrquota,relatime,exec  0  2
# /dev/sda7
UUID=f90b3fb0-e515-4b4e-8a1b-dfe7ed269a10 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8 0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
/media/Work/test  /export/test  bind  bind  0

В тех разделах винчестера, в которых указан дополнительный параметр acl команды mount - grpquota,acl,suid - списки контроля будут поддерживаться в полном объеме. В моем случае поддержка ACL активирована на разделах /dev/sda5 и /dev/sda6.

После редактирования файла, лучше не мучаться и перезагрузить сервер, хотя, как утверждается в некоторых статьях, достаточно размонтировать раздел и смонтировать его вновь (такой номер у меня почему-то не прошел).

После вышеописанной операции, ACL на соответствующих разделах готовы к работе.

Утилиты ACL

Честно говоря, работа с ACL, на первый взгляд, может показаться сложноватой. Но если вникнуть в логику управления, то все становится на свои места. Учтите, что манипуляции с правами, особенно в сложных схемах, требуют хорошего логического мышления.

Существуют два типа ACL:

  • ACL для доступа;
  • ACL по умолчанию.

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

ACL по умолчанию - может быть связан только с каталогом, и, если файл в этом каталоге не имеет ACL для доступа, он использует правила, определённые в ACL по умолчанию, связанном с каталогом. ACL по умолчанию являются необязательными. ACL по умолчанию также можно сравнить с наследованием прав в, простите, Windows NT.

Управления ACL списками осуществляется всего лишь двумя командами:4)

  • setfacl - используется для назначения, модификации и удаления ACL прав.
  • getfacl - используется для просмотра установленных ACL.
Несколько слов о взаимодействии других команд (такие как копирование, перемещение, архивирование и т.п.) с правами ACL. Вот выдержка из статьи:

К сожалению, большинство Unix-утилит все еще не поддерживает ACL. Например, tar не архивирует и не восстанавливает ACL, в FreeBSD NFS также игнорирует их. Ни формат файлов в утилите tar, ни протокол NFS нет ни намека на возможность использования ACL. Тем не менее, архивы полного раздела UFS1, сделанные с помощью tar или dump, восстанавливают каталог .attribute, и утилита dump в FreeBSD модифицирована для «понимания» UFS2 (включающую ACL). Каталог-скелет archivers/star поддерживает ACL. Вы даже можете работать с архивами, созданными в Linux и FreeBSD С помощью star и предохраняющей расширенные атрибуты (включающие и ACL).

Но не все так грустно! Перевод статьи был написан в 2006 году (к сожалению до оригинала я так и не добрался). В другой же статье, более поздней, сказано:

Ядро Red Hat Enterprise Linux 4 обеспечивает поддержку ACL для файловой системы ext3 и экспортируемых файловых систем NFS. Списки ACL также работают в файловых системах ext3, доступных через Samba. … Команды cp и mv копируют и перемещают все списки ACL, связанные с файлами и каталогами.

Хоть большинство стандартных команд, призванных производить операции над файлами, уже поддерживают ACL то, например, команды архивирования tar и dump ACL не архивируют. Для архивации данных с установленными ACL используется программа star. В кратце ее рассмотрим позже. Замечу, что для NFS ACL поддерживаются уже по умолчанию. Вообще, успешное использование ACL зависит от поддержки ACL файловой системой и поддержки ACL операционной системой на клиентской машине.

Итак, рассмотрим синтаксис и параметры getfacl и setfacl.

Утилита getfacl

О getfacl сильно и говорить нечего. Она выводит листинг ACL прав для указанных объектов.

Примеры использования:

  • getfacl * - отобразит права ACL для всех объектов в текущем каталоге;
  • getfacl sobaka.txt - отобразить ACL для файла sobaka.txt;
  • getfacl kartosh* - отобразит ACL для всех файлов в текущем каталоге, которые начинаются на kartosh;
  • getfacl -R * - отобразит ACL для всех объектов (включая подкаталоги и их содержимое) текущего каталога.

Чтобы посмотреть, установлены ли ACL на объектах, достаточно воспользоваться командой ls -l:

# Символ "+" в конце списка стандартных прав сообщает о наличии установленных прав ACL:

root@sytserver:/media/Work/test# ls -l
итого 28
drwxrwxrwt  2 root root 4096 2009-07-24 21:20 allex
-rwxr-x---+ 1 root root   19 2009-07-25 14:45 qwert

Теперь рассмотрим, что же отобразит команда getfacl:

root@sytserver:/media/Work/test# getfacl qwert
# file: qwert
# owner: root
# group: root
user::rwx
user:child:rw-
group::r--
mask::rw-
other::---

Из примера видно, что без использования ACL, пользователь child не получил бы права к файлу qwert, т.к. не входит в группу root и не является владельцем файла. Права ACL, в данном случае, предоставили ему права на чтение и запись этого файла. Давайте подробнее разберем листинг getfacl:

# file: qwert   - Имя файла
# owner: root   - Владелец файла (основные права Unix)
# group: root   - Группа файла (основные права Unix)
user::rwx       - Права для владельца файла (основные права Unix)
user:child:rw-  - Права ACL для пользователя child
group::r--      - Права для группы файла (основные права Unix)
mask::rw-       - Эффективная маска
other::---      - Права для пользователя "все остальные" 

Что касается ключей getfacl, то есть пара из них которые стоит рассмотреть, но рассматривать их будем тогда, когда будем изучать setfacl.

Утилита setfacl

Теперь об утилите setfacl. Как уже говорилось выше, утилита setfacl предназначена для установки, модификации или удаления ACL.

Списки ACL можно задать:

  • На уровне пользователей - назначаются ACL конкретным пользователям;
  • На уровне групп - назначаются ACL конкретным группам;
  • С помощью маски эффективных прав - ограничение максимальных прав для пользователей и/или групп;
  • Для пользователей, не включённых в группу данного файла - это т.н. пользователь «Все остальные»;

Рассмотрим простой синтаксис setfacl:

setfacl <опции> <ключ> <список правил> <объект>

  • <опции> - задает дополнительные опции;
  • <ключ> - задает режим работы утилиты;
  • <список правил> - собственно, сами правила доступа к объекту;
  • <объект> - объект к которому применяется ACL, в большинстве случаев это файл или каталог.

Часто используемые ключи:

Ключ Описание
--set или --set file*
- Устанавливает новые указанные права ACL, удаляя все существующие.
Необходимо, чтобы наравне с задаваемыми правилами ACL были также указаны
стандартные права Unix, в противном случае будет давать ошибку;
-m или -M file*
- Модифицирует указанные ACL на объекте. Другие существующие ACL сохраняются.
-x или -X file*
- Удаляет указанные ACL права с объекта. Стандартные права Unix не изменяются.

* - При использовании -M, - -set, -X - разрешения будут браться из указанного файла file, который должен быть заранее подготовлен в формате вывода ACL разрешений командой getfacl. Подготовить файл можно либо вручную, в формате вывода getfacl, либо использовать команду getfacl -R file > file_out. Где file это файл(ы) или каталог(и) с которых нужно снять ACL, а file_out - текстовый файл куда запишутся снятые ACL права.

Часто используемые опции:

Опция Описание
-b - Удаляет все ACL права с объекта, сохраняя основные права;
-k - Удаляет с объекта ACL по умолчанию. Если таковых на объекте нет,
предупреждение об этом выдаваться не будет;
-d - Устанавливает ACL по умолчанию на объект.
–restore=file - Восстанавливает ACL права на объекты из ранее созданного файла с правами.5)
-R - Рекурсивное назначение (удаление) прав, тобишь пройтись по всем подкаталогам.

Формирование списка правил:

Синтаксис Описание Пример использования
u:<uid>:<perms>*
- Назначает ACL для доступа заданному пользователю. Здесь можно указать имя или UID пользователя. Это может быть любой пользователь, допустимый в данной системе.Пример:
setfacl -m u:allexserv:rw myfile.odt

- назначает пользователю allexserv права на чтение и запись.

g:<gid>:<perms>*
- Назначает ACL для доступа заданной группе. Здесь можно указать имя или GID группы. Это может быть любая группа, допустимая в данной системе.Пример:
setfacl -m g:children:r myfile.odt

- назначает группе children права на чтение.

m:<perms>*
- Назначает маску эффективных прав.6)Пример:
setfacl -m m:rx myfile.odt

- устанавливает фактические максимальные права на чтение и выполнение.

o:<perms>*
- Назначает ACL для доступа пользователям, не включённым в группу файла. Это пользователь «все остальные», как в стандартных правах Unix.Пример:
setfacl -m o: myfile.odt

- убирает все права (отсутствие прав).

* <perms> - Сами правила для пользователя или группы. Могут принимать значения ( r ), ( x ), ( w ), или сочетания друг с другом.

Примеры использования

Рассмотрим различные примеры использования назначения, модификации и удаления ACL. Выше мы уже выводили листинг, при помощи команды getfacl для файла qwert, на котором уже установлены ACL для пользователя child:

root@sytserver:/media/Work/test# getfacl qwert
# file: qwert
# owner: root
# group: root
user::rwx
user:child:rw-
group::r--
mask::rw-
other::---

Теперь давайте добавим к этому файлу еще пользователя allexserv:

root@sytserver:/media/Work/test# setfacl -m u:allexserv:rwx qwert
root@sytserver:/media/Work/test# getfacl qwert
# file: qwert
# owner: root
# group: root
user::rwx
user:allexserv:rwx
user:child:rw-
group::r--
mask::rwx
other::---

Обратите внимание как изменилась эффективная маска. Все ACL права сложились: у пользователя child rw- и у пользователя allexserv rwx. Но маска вовсе не разрешает пользователю child иметь право на выполнение (x) файла qwert. Посмотрите, что произойдет если принудительно изменить эффективную маску:

root@sytserver:/media/Work/test# setfacl -m m:r qwert
root@sytserver:/media/Work/test# getfacl qwert
# file: qwert
# owner: root
# group: root
user::rwx
user:allexserv:rwx	#effective:r--
user:child:rw-		#effective:r--
group::r--
mask::r--
other::---

Теоретически, в данном случае пользователь child не может удалить файл (про allexserv ничего не говорю, т.к. он входит в группу root у меня). Но проведя тест, пользователь child все-таки удалил файл, правда перед удалением система спросила:

child@sytserver:/media/Work/test$ rm qwert
rm: удалить защищенный от записи обычный файл `qwert'?

В то же время попробовал отредактировать файл qwert под пользователем child и попытался записать изменения. Система в записи отказала. Здесь стоит отметить, что удаление файла регламентируется правами на каталог в коем расположен этот файл. Причина такого поведения именно в этом.

Теперь давайте удалим с файла qwert права ACL для пользователя allexserv:

root@sytserver:/media/Work/test# setfacl -x u:allexserv qwert
root@sytserver:/media/Work/test# getfacl qwert
# file: qwert
# owner: root
# group: root
user::rwx
user:child:rw-		#effective:r--
group::r--
mask::r--
other::---

Чтобы удалить все ACL права с файла можно воспользоваться командой: setfacl -b qwert

Очевидно, что таким макаром можно назначать и удалять ACL права для пользователей и групп на файлы и каталоги.

Давайте еще рассмотрим т.н. наследованность прав. Если не задано иное, то все объекты создаваемые в каталоге у которого есть ACL, не наследуют права ACL c каталога в котором они создаются. Но иногда возникают ситуации, когда необходимо, чтобы все объекты создаваемые внутри каталога наследовали его ACL права. Это называются ACL по умолчанию.

Задача: создадим каталог Proverka и назначим ему владельца child и группу children (разумеется, пользователь и группа должны существовать в системе). Установим ACL права для пользователя allexserv и пользователя mysql. Установим ACL по умолчанию на каталог Proverka так, чтобы создаваемым объектам внутри него также назначались ACL.

Создаем каталог, устанавливаем права и владельца:

root@sytserver:/media/Work/test# mkdir Proverka
root@sytserver:/media/Work/test# chmod 700 Proverka
root@sytserver:/media/Work/test# chown child:children Proverka
root@sytserver:/media/Work/test# ls -l
итого 24
drwxrwxrwt 2 root  root     4096 2009-07-24 21:20 allex
drwx------ 2 child children 4096 2009-07-25 23:36 Proverka

Назначаем ACL права сразу для двух пользователей, перечислив их через запятую:

root@sytserver:/media/Work/test# setfacl -m u:allexserv:rwx,u:mysql:rwx Proverka
root@sytserver:/media/Work/test# getfacl Proverka
# file: Proverka
# owner: child
# group: children
user::rwx
user:mysql:rwx
user:allexserv:rwx
group::---
mask::rwx
other::---

Теперь назначим ACL по умолчанию. При назначении ACL по умолчанию, также требуется в обязательном порядке указывать и основные права в виде u::rwx,g::-,o::- где u - user - владелец, g - group - группа, o - other - все остальные:

root@sytserver:/media/Work/test# setfacl -d -m u::rwx,g::-,o::-,u:allexserv:rwx,u:mysql:rwx Proverka 
root@sytserver:/media/Work/test# getfacl Proverka
# file: Proverka
# owner: child
# group: children
user::rwx
user:mysql:rwx
user:allexserv:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:mysql:rwx
default:user:allexserv:rwx
default:group::---
default:mask::rwx
default:other::---

Видно, что появились строки начинающиеся с default. Это и есть права по умолчанию, которые будут принимать все создаваемые внутри объекты. Проверим, создав пустой файл myfile.txt и подкаталог MyKatalog в каталоге Proverka:

root@sytserver:/media/Work/test/Proverka# touch myfile.txt
root@sytserver:/media/Work/test/Proverka# mkdir MyKatalog
root@sytserver:/media/Work/test/Proverka# getfacl *
# file: myfile.txt
# owner: root
# group: root
user::rw-
user:mysql:rwx		#effective:rw-
user:allexserv:rwx      #effective:rw-
group::---
mask::rw-
other::---

# file: MyKatalog
# owner: root
# group: root
user::rwx
user:mysql:rwx
user:allexserv:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:mysql:rwx
default:user:allexserv:rwx
default:group::---
default:mask::rwx
default:other::---

Обратите внимание, что каталог MyKatalog не только приобрел ACL, но и также приобрел и ACL по умолчанию. Т.е. те объекты, которые будут создаваться в подкаталоге MyKatalog тоже будут наследовать ACL по умолчанию.

Удалить права по умолчанию можно: setfacl -k Proverka.

Если нужно также удалить права по умолчанию и в подкаталогах, то добавьте ключ -R (рекурсия): setfacl -R -k /media/Work/test/Proverka .

Здесь мы оперировали двумя пользователями. Но ничто не мешает вам оперировать также целыми группами пользователей.

Автоматические операции

Любой администратор стремится к оптимизации. Понятно, что назначить вручную 100 объектам одни и те же права - нудное занятие и нецелесообразное. Есть некоторые фишечки, которые могут облегчить подобные задачи.

Копирование ACL прав с одного объекта на другой.

Принцип прост:

  • Снять ACL c одного объекта
  • Записать их на другой

В документации приведен следующий пример:

getfacl file1 | setfacl --set-file=- file2

Где, file1 - объект с которого снимаем ACL командой getfacl, а далее устанавливаем ACL командой setfacl на объект file2. Обратите внимание на запись - -set-file=- в конце указан символ «-», который берет информацию от команды getfacl (со стандартного вывода).

Справедлива будет также такая запись:

  
getfacl file1 | setfacl -M- file2

В этом случае права на file2 не заменяются как при использовании - -set, а добавляются к уже существующим правам ACL.

Копирование прав ACL каталога в права по умолчанию этого же каталога

getfacl --access dir | setfacl -d -M- dir

В этом примере getfacl получает все права которые вы установили на каталог dir и устанавливает их на этот же каталог dir делая их правами по умолчанию. Очень удобно. Обратите внимание на ключ - -access у команды getfacl. При вызове getfacl без параметров, она отображает все права ACL, включая права по умолчанию. Здесь же, ключ - -access заставляет getfacl показать только права ACL на каталог, а права по умолчанию (если таковые имеются у каталога) - скрыть. Обратный ключ - это ключ -d:

getfacl -d Proverka

- заставит getfacl показать только права по умолчанию, а права ACL на сам каталог - скрыть. Кстати, в нашем примере, с каталогом Proverka, на который мы назначали права по умолчанию, чтобы не писать строку:

setfacl -d -m u::rwx,g::-,o::-,u:allexserv:rwx,u:mysql:rwx Proverka  

можно было бы воспользоваться именно этой фишечкой, как то так:

getfacl --access Proverka | setfacl -d -M- Proverka

Результат был бы тот же.

Вот и все, а вообще, не поленитесь почитать man getfacl, очень занимательно!

Операции над объектами c ACL

В заключении хочу еще раз обратить внимание на операции с обектами у которых установлены ACL, такие как копирование, перемещение, архивирование. Выше мы уже упоминали о них. Некоторые замечания:

  • При перемещении (mv) никаких дополнительных параметров ненужно;
  • При копировании (cp), необходимо использовать ключ -p, в противном случае ACL права будут потеряны;
Внимание!!!
По умолчанию графический интерфейс при копировании не учитывает ACL права!
  • При архивировании или распаковке вместо tar используйте утилиту star.

Утилиту star нужно будет установить из репозиториев: apt-get install star

Вот некоторые часто используемые опции star:

Опция Описание
-c Создаёт файл архива
-n Отключает извлечение файлов, используется в сочетании с -x для просмотра списка извлекаемых файлов.
-r Заменяет файлы в архиве. Файлы записываются в конец архива, заменяя любые файлы с тем же путём и именем.
-t Выводит содержимое файла архива.
-u Обновляет файл архива. Файлы записываются в конец архива, если их ещё не было в архиве или если они новее, чем файлы с тем же именем в архиве.7)
-x Извлекает файлы из архива. Если используется с ключом -U и файл в архиве старее, чем соответствующий файл в файловой системе, такой файл не извлекается.
-help Выводит наиболее важные параметры.
-xhelp Выводит менее важные параметры.
-/ Оставляет ведущую косую черту в имени файла при извлечении файлов из архива. По умолчанию она убирается.
-acl При создании архива или извлечении файлов, архивирует или восстанавливает все ACL, связанные с файлами или каталогами.

Пример для архивирования утилитой star с сжатием:

star -czv -Hexustar -acl -f /tmp/homedir.tgz /media/Profil/home

Пример для разархивирования в текущий каталог:

star -xv -Hexustar -acl -f homedir.tgz

Вот собственно и все, что я хотел рассказать про ACL. Применяйте логику и смекалку и все будет хорошо.

1)
Наличие дополнительных групп может также облегчить написание правил монтирования ресурсов при входе в систему, например, с использованием модуля pam_mount. Почитать можно здесь.
2)
Часть информации взята с этого перевода. Также очень хорошо описан синтаксис ACL здесь. Надеюсь, авторы не против, если часть текста я позаимствую из этих статей.
3)
Обратите внимание, что в других операционных системах Unix, например, FreeBSD 5.0 и выше, потребуются некоторые дополнительные действия по включению ACL. Также, возможно, вам потребуется установить пакет acl, использовав следующую команду: sudo apt-get install acl.
4)
Помимо консольных команд, есть также графическая оболочка для установки ACL прав. Приблуда называется eiciel, ее описание можно найти, например, здесь. По-моему, по умолчанию приблуда не ставится в системе, так что ставить ее придется из репозиториев. Ввиду того, что эта статья ориентирована на системных администраторов, рассмотрения графической утилиты здесь не состоится.
5)
Полезно для отката разрешений. Разумеется, необходимо сначала сделать резервную копию разрешений в текстовый файл file. Сделать можно либо вручную, в формате вывода getfacl, либо использовать команду getfacl -R file > file_out. Где file это файл(ы) или каталоги с которых нужно снять ACL, а file_out - текстовый файл куда запишутся снятые ACL права.
6)
Маска — это объединение всех разрешений группы-владельца и всех записей пользователей и групп. Маска задает максимальные права доступа для всех пользователей, за исключением хозяина и групп. Установка маски представляет собой самый быстрый путь изменить фактические (эффективные) права доступа всех пользователей и групп. Например, маска (r - -) показывает, что пользователи и группы не могут иметь больших прав, чем просто чтение, даже если им назначены права доступа на чтение и запись. Например, если на файл koshka назначили ACL пользователю allexserv c правами (r w x), а эффективную маску выставили в (r x), то пользователь лишается права (w), не смотря на то, что по ACL он имеет это право.
7)
Этот параметр работает только если архив представляет собой файл или незаблокированную ленту, которую можно стирать.