2

В GNU/Linux, как можно установить каталоги так, чтобы владелец мог только добавлять / читать файлы / каталоги в них / из них, но только суперпользователь может делать любое удаление в этой структуре?

Рассмотрим следующий сценарий: вы rsync некоторые файлы и каталоги, которые у вас есть, в каталог. Вы хотите , чтобы иметь возможность написать в этот каталог (и позже, при обновлении резервного копирования --- то есть, rsync ING снова --- писать все подкаталоги, тоже) , но вы не хотите , чтобы иметь возможность удалить что - нибудь в этой структуре, если вы не супер пользователь.

Ограниченный флаг удаления t в chmod не помогает в этой ситуации, потому что он ограничивает удаление не владельцами.

Установка режима на u=rX,go= для файлов и каталогов (при передаче с использованием rsync) также не помогает, потому что последующая rsync будет невозможна, если бит режима w будет добавлен во все каталоги на приемнике перед запуск rsync и это будет очень много времени.

Является ли ACL путь сюда?

Обновление: даже с ACL я не вижу способа сделать это.

3 ответа3

1

Проверьте наш хороший друг chattr. Если вы используете FS на основе ext2/3/4, вы можете установить неизменяемый или неотменяемый бит, и даже root не сможет удалить файл, пока вы не сбросите соответствующий бит.

1

Вы не можете сделать это в стандартной среде Linux. Вы можете быть в состоянии написать правило для SELinux или Tomoyo или что - то, чтобы запретить удаление файлов, но это не мешает пользователю перезаписывать файл с данными мусора или усечение его полностью, будь то намеренно или нет.

1

Вы можете так или иначе сделать это, используя липкие биты.

$ mkdir drop_box
$ chmod 777 drop_box
$ chmod u+s,g+s drop_box
$ ls -l
total 4
drwsrwsrwx    2 tclark   authors      4096 Sep 14 10:55 drop_box

Теперь любой может переместить файлы в этот каталог, но после создания в drop_box они станут собственностью tclark и авторов группы. В этом примере также показано, как можно изменить несколько уровней разрешений с помощью одной команды, разделив их запятой. Как и с другими разрешениями, это можно было бы упростить до одной команды, используя числовые значения SUID и SGID (4 и 2 соответственно). Так как мы меняем оба в этом случае, мы используем 6 в качестве первого значения для команды chmod.

$ chmod 6777 drop_box/
$ ls -l
total 4
drwsrwsrwx    2 oracle   users        4096 Sep 14 10:55 drop_box

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

Удачи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .