Чому CP не поважає ACL?


15

Поширений спосіб налаштування каталогу для спільного використання файлів у групі:

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


serverfault.com/a/452678/46333 ця відповідь містить хороші пояснення.
Каан

Відповіді:


11

Якщо cpстворюється файл призначення, він реплікує дозволи вихідного файлу, за винятком бітів, встановлених у umask. Це стандартна поведінка (див., Наприклад, крок 3.b в специфікації Single Unix v3 (POSIX 2001) .

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

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


Добре, що хоча б пояснює мотивацію до цього. (Однак дивно, що право власності на групу дозволено змінювати на "Felles", надаючи потенційно більше людей читати доступ до файлу.)
bhm

3

Ну, трирічне і більше питання, але все-таки актуальне. Для майбутніх читачів хочу додати, що очікується, що команди 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 загубиться.


1

У мене була аналогічна проблема з rsynced файлами, у яких відсутній належний ACL за замовчуванням у цільовому підкаталозі. У Cp немає способу встановлення дозволів на ціль. Але, rsync робить, використовуючи --chmod=ugo=rwxпрапор. Дивіться мою відповідь тут .


0

Вам потрібно використовувати -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
Не зовсім. Він хоче, щоб файл мав той самий дозвіл, що і цільова папка.
luckytaxi

0

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

setfacl -dm m::rwX foo

Якщо це не працює, опублікуйте ACL для foo.


Це не вийшло. ACL для foo (як до, так і після вашої команди) - це # файл: foo # власник: bhm # група: felles # прапори: -s- користувача :: rwx group :: rwx group: felles: rwx mask :: rwx other: : rx за замовчуванням: користувач :: rwx за замовчуванням: група :: rwx за замовчуванням: група: felles: rwx за замовчуванням: маска :: rwx за замовчуванням: інше :: rx
bhm

-1

Чи увімкнена ваша файлова система за допомогою параметра "ACL"?

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

Якщо ні, внесіть зміни, потім перерахуйте.

mount -o remount /wherefolderislocated

Він був змонтований за допомогою опції acl, так.
bhm

-1

Як я бачу, ви є власником файлів (bhm) до і після CP. Як показано в списку каталогів, власник має доступ для читання та запису!


Можливо, мені було незрозуміло: я хочу, щоб група ("хлопці") змогла (прочитати та) написати файл.
bhm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.