Распространенный способ настроить каталог для обмена файлами внутри группы:
$ mkdir foo
$ chgrp felles foo
$ chmod g+ws foo
$ setfacl -m group:felles:rwx foo
$ setfacl -dm group:felles:rwx foo
Это гарантирует, что все созданные файлы foo
доступны для чтения и записи для группы felles
:
$ umask
0022
$ echo hi > foo/bar
$ ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
Однако, если вы копируете файл foo
, ACL по умолчанию не применяются:
$ echo you > baz
$ cp baz foo/
$ ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$ getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx #effective:r--
group:felles:rwx #effective:r--
mask::r--
other::r--
Почему это происходит, и есть ли способ обойти это?
( Перемещение файла в каталог не относится ни к спискам ACL, ни к принадлежности группы, но я могу понять, почему: вам может не потребоваться изменить права доступа к файлу просто потому, что вы изменили его имя.)
Ответы:
Если
cp
создает файл назначения, он копирует разрешения исходного файла, за исключением битов, которые установлены в umask. Это стандартное поведение (см., Например, шаг 3.b в спецификации Single Unix v3 (POSIX 2001) .Почему cp был разработан таким образом? Потому что во многих случаях такое поведение желательно, например, сохранение конфиденциальности файла, когда исходные разрешения ограничены, и сохранение исполняемости почти всегда является правильным решением. Однако, к сожалению, даже в GNU cp нет возможности отключить это поведение.
Большинство инструментов копирования (например, pax, rsync) ведут себя одинаково. Вы можете убедиться, что файл будет создан с разрешением по умолчанию, отделив источник от места назначения, например, с помощью
cat <baz >foo/baz
.источник
Ну, трехлетний и еще вопрос, но все еще актуален. Для будущих читателей я хочу добавить, что ожидается, что команды mv, cp не следуют за ACL каталога назначения. Ответ Жиля все в порядке, но последнее предложение. Лучший способ применить ACL-адресат к скопированному / перемещенному файлу - упомянутый здесь способ:
http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl
В случае, если ссылка не работает в будущем, я вставляю содержимое здесь:
скопировать ACL одного файла в другой, используя getfacl и setfacl
ВНИМАНИЕ: Существующий ACL будет потерян.
источник
У меня была похожая проблема с rsynced файлами, в которых отсутствовали правильные списки ACL по умолчанию в целевом подкаталоге. Cp не имеет возможности устанавливать разрешения для цели. Но rsync использует этот
--chmod=ugo=rwx
флаг. Смотрите мой ответ здесь .источник
Вам нужно использовать
-p
или--preserve
сcp
.От
man 5 acl
:источник
Списки ACL распространяются правильно, но маска по умолчанию кажется неправильной. Вы, вероятно, хотите, чтобы маска по умолчанию была rwX.
Если это не сработает, пожалуйста, опубликуйте ACL для foo.
источник
Монтируется ли ваша файловая система с включенной опцией «ACL»?
Если нет, внесите изменения, затем перемонтируйте.
источник
Из того, что я вижу, вы являетесь владельцем файлов (BHM) до и после cp. Как показывает список каталогов, владелец имеет права на чтение и запись!
источник