Использование setfacl, чтобы позволить членам группы записывать в любой файл в каталоге

12

Я хотел бы использовать setfacl, чтобы любой член группы 'app' мог редактировать любой файл, содержащийся в / usr / local / users / app, независимо от того, что говорят традиционные разрешения UNIX. У меня есть два пользователя Джон и Бен. Я пытался следовать инструкции из другого вопроса , но Джон не может записать некоторые файлы. Похоже, это из-за маски acl. Однако я установил маску по умолчанию для каталога rwx, поэтому не должны ли файлы в нем наследоваться при создании?

Например, Джон не может записать в файл ниже, но он является членом группы 'app', у которой есть запись acls в файл, поэтому я удивлен, что он не может редактировать файл.

ben@app1:/usr/local/users$ ls -la app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
-rw-r--r--+ 1 ben users 38326 Apr  2 10:21 app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar

ben@app1:/usr/local/users/app$ getfacl app-1.0-SNAPSHOT/lib/
# file: app-1.0-SNAPSHOT/lib/
# owner: ben
# group: users
user::rwx
group::rwx          #effective:r-x
group:app:rwx       #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:group::rwx
default:group:app:rwx
default:mask::rwx
default:other::r-x

ben@app1:/usr/local/users$ getfacl app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
# file: app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar
# owner: ben
# group: users
user::rw-
group::rwx          #effective:r--
group:app:rwx       #effective:r--
mask::r--
other::r--
Бен Макканн
источник

Ответы:

7

Вы заметите «эффективный» комментарий, который выдает вам getfacl. Проблема заключается в том, что разрешения вычисляются так, что «app» не получает установленный бит записи. Это происходит потому, что маска для файла установлена ​​только для чтения. Маска используется для ограничения количества разрешений, которые могут быть выданы для определенного файла или каталога.

Пример того, почему вы хотели бы иметь такое поведение, был бы похож на то, если бы вы знали, что файлу на законном основании могут требоваться разные пользователи / группы, чтобы иметь к нему доступ, но по какой-то причине все усложнялось из-за разрешений, и вы хотели получить способ сказать: «Что бы ни разрешения по умолчанию установлены на, независимо от членства в группе или от того, какой рекурсивный setfacl будет выполнен позже, ОПРЕДЕЛЕННО НЕ ДАЙТЕ ЭТОГО ! " Пользователь-владелец имеет особый статус в мире POSIX, у него есть права, которых нет у других пользователей, например, возможность не являться пользователем root и изменять права доступа к файлу, а его права не ограничиваются маской (которая может быть в любом случае бессмысленно из-за первой привилегии, которую система дает им). Вот почему они все еще получают RWX, хотя маска ограничена.

Чтобы ответить на ваш конкретный вопрос : добавьте бит записи к маске в файле и попробуйте снова как johnпользователь.

Вот версия командной строки приведенного выше объяснения, обратите внимание на то, как «действующие» права меняются, когда все, что я изменяю, это маска.

Bratchley
источник
Спасибо. Я действительно ценю ответ. Возможно ли создание новых файлов с маской по умолчанию из rwx? Я отредактировал свой вопрос с несколькими дополнительными деталями.
Бен Макканн
Да, маска - это одна из категорий (например, пользователи и группы), для которой вы можете установить ACL по умолчанию. Маска по умолчанию должна наследоваться от подкаталогов и применяться к файлам. ПРИМЕР: setfacl -md: m :: rwx / path / to / Dir
Братчли
ACL по умолчанию наследуется в подкаталогах, но не в файлах, что делает ACL совершенно бесполезными :-(
Бен Макканн
Просто чтобы убедиться, что мы говорим об одном и том же, вы говорите о acl по умолчанию для записи маски? Это то, что я получаю в тестах.
Братчли
Я также повторил вышеупомянутый тест для новых файлов в / testBed после изменения эффективной маски в родительском каталоге и получил тот же результат (запись маски по умолчанию применяется к файлу, а не эффективная маска родителя).
Братчли
0

Это невозможно. cp, rsync и т. д. создают файлы, игнорируя списки ACL по умолчанию

Почему cp не уважает ACL?

Бен Макканн
источник
Неправильный Пользователь сталкивался с той же маской, с которой вы сталкивались ранее, и получил неправильный ответ от кого-то другого. Это не до "cp" или любой другой утилиты, чтобы игнорировать записи ACL по умолчанию, что происходит на уровне файловой системы, когда cp переходит к созданию файла. У инструмента есть возможность выдавать системные вызовы для чередования / добавления необходимых ACL, но для этого потребуется приложить усилия.
Братчли
Черт возьми, это то, что вы можете видеть запись ACL, о которой они говорят, это просто эффективные разрешения, которые они ожидают увидеть, которых нет. Это была прекрасная возможность сказать «эй, чувак, проверь свою маску».
Братчли
1
На самом деле, я беру это обратно, похоже, что EvilRyry опубликовал информацию о маске, а OP просто ответил «это не сработало», а затем опубликовал вывод getfacl, который, кажется, показывает, что «felles» действительно получил rwx в файле. В этом случае ответ с наибольшим количеством голосов не соответствует моему личному опыту и тому, что я иллюстрировал здесь примерами команд.
Братчли