Вопрос: Почему cp не уважает ACL?


Обычный способ настройки каталога для совместного использования файлов внутри группы:

$ 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, ни к группе, но я могу понять, почему: вы можете не захотеть, чтобы разрешения файла изменялись просто потому, что вы меняете свое имя.)


14
2017-09-22 22:33


Источник


serverfault.com/a/452678/46333 этот ответ содержит хорошее объяснение. - Kaan


Ответы:


Если cp создает файл назначения, он реплицирует разрешения исходного файла, за исключением бит, заданных в umask. Это стандартное поведение (см., Например, шаг 3.b в Спецификация Single Unix v3 (POSIX 2001),

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

Большинство инструментов копирования (например, pax, rsync) ведут себя одинаково. Вы можете гарантировать, что файл будет создан с разрешением по умолчанию, отключив источник от адресата, например, с помощью cat <baz >foo/baz,


10
2017-09-22 23:28



Ну, это, по крайней мере, объясняет мотивацию этого. (Странно, однако, что групповое владение разрешено изменять на «падающие», давая потенциально больше людей доступ к файлу для чтения). - bhm


Ну, трехлетний и еще вопрос, но все же актуальный. Для будущих читателей я хочу добавить, что ожидается, что команды mv, cp не будут следовать за ACL каталога назначения. Ответ Гилла - все в порядке, но последнее предложение. Лучший способ применить ACL адресата к скопированному / перемещенному файлу - это способ, упомянутый здесь:

http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl

В случае нарушения ссылки в будущем, я вставляю содержимое здесь:

getfacl <file-with-acl> | setfacl -f - <file-with-no-acl>

скопировать ACL одного файла в другой с помощью getfacl и setfacl

ПРЕДУПРЕЖДЕНИЕ: Существующий ACL будет потерян.


2
2018-01-13 23:02





У меня была аналогичная проблема с rsynced-файлами, в которых нет надлежащих ACL-адресов по умолчанию в целевом подкаталоге. Cp не имеет способа установить разрешения для цели. Но, rsync делает, используя --chmod=ugo=rwx флаг. См. Мой ответ Вот,


1
2017-12-05 09:13





ACL распространяются правильно, но маска по умолчанию не кажется правильной. Вероятно, вы хотите, чтобы ваша маска по умолчанию была rwX.

setfacl -dm m::rwX foo

Если это не сработает, отправьте ACL для foo.


0
2017-09-22 23:29



Это не сработало. ACL для foo (как до, так и после вашей команды): # file: foo # owner: bhm # group: felles # flags: -s- user :: rwx group :: rwx group: felles: rwx mask :: rwx other: : rx default: user :: rwx default: group :: rwx default: group: felles: rwx default: mask :: rwx default: other :: rx - bhm


Включена ли ваша файловая система с опцией «ACL»?

/dev/sda4        /wherefolderislocated         ext3        defaults,acl     1   2

Если нет, сделайте изменение, а затем перемонтируйте.

mount -o remount /wherefolderislocated

-1
2017-09-22 23:03



Да, он был установлен с опцией acl. - bhm


Из того, что я вижу, вы являетесь владельцем файлов (bhm) до и после cp. Поскольку список каталогов показывает, что владелец имеет доступ на чтение и запись!


-1
2017-09-22 23:26



Возможно, я был неясен: я хочу, чтобы группа («падает»), чтобы иметь возможность читать (читать и писать) файл. - bhm


Вы должны использовать -p или --preserve с cp,

Из man 5 acl:

ИЗМЕНЕНИЯ В ФАЙЛАХ

 On a system that supports ACLs, the file utilities ls(1), cp(1), and
 mv(1) change their behavior in the following way:

 ·   For files that have a default ACL or an access ACL that contains more
     than the three required ACL entries, the ls(1) utility in the long
     form produced by ls -l displays a plus sign (+) after the permission
     string.

 ·   If the -p flag is specified, the cp(1) utility also preserves ACLs.
     If this is not possible, a warning is produced.

 ·     The mv(1) utility always preserves ACLs. If this is not possible, a
     warning is produced.

 The effect of the chmod(1) utility, and of the chmod(2) system call, on
 the access ACL is described in CORRESPONDENCE BETWEEN ACL ENTRIES AND
 FILE PERMISSION BITS.

-1
2017-09-22 23:26



Не совсем. Он хочет, чтобы файл имел такое же разрешение, что и целевая папка. - luckytaxi