Можно ли сделать файл, который имеет полные права для всех, но невозможно удалить?

Без использования sudo, предпочтительно?

15
задан 31 May 2014 в 21:39

4 ответа

Попробуйте:

chattr +i filename

Это позволит сделать файл невозможным для удаления даже пользователем root - используйте с осторожностью.

0
ответ дан 31 May 2014 в 21:39

Это немного грубо, но это близко - если вы удалите права на запись в каталог, файлы внутри него не могут быть удалены. И это не требует sudo, если вы им владеете:

=^_^= izkata@izein:~$ mkdir test
=^_^= izkata@izein:~$ touch test/delme
=^_^= izkata@izein:~$ chmod a-w test
=^_^= izkata@izein:~$ echo 'Hello' > test/delme 
=^_^= izkata@izein:~$ cat test/delme 
Hello
=^_^= izkata@izein:~$ rm test/delme 
rm: cannot remove `test/delme': Permission denied

Таким образом, вы можете устанавливать разрешения для самого файла так, как вы хотите.

Кроме того, как утверждает @Rinzwind, есть много способов обойти это.

0
ответ дан 31 May 2014 в 21:39

Для удаления файла Вы должны записать разрешение во все каталоги, с которыми связан файл. Для удаления связи с ним с одним каталогом Вы должны записать разрешение в тот каталог.

Таким образом, пока Вы даете разрешение записи (или даже владение) в файл, но не в каталог или каталоги, с которыми связан файл, тот файл не может быть удален.

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

Это все еще позволило бы другим пользователям связывать тот файл с другими каталогами и удалять связь с ним оттуда после этого, но они все еще не смогут удалить файл, как они смогли бы удалить связь с ним с Вашим собственным каталогом.

Обратите внимание, что, чтобы это работал полностью, разрешением записи каждого компонента контура в файл нужно было бы управлять. Поскольку, например, если файл /a/b/the-file и Вы имеете /a/b не записываемый кем-либо, но у всех есть доступ для записи к /a, затем они могли переименовать /a/b к чему-то еще и воссоздают их собственное /a/b и создайте их собственное /a/b/the-file там.

8
ответ дан 31 May 2014 в 21:39

Нет, это невозможно. Для обычных пользователей невозможно удалить файл: обязательно.

  1. Вам понадобится sudo, чтобы пользователи не могли удалять файлы. Ваш администратор всегда сможет удалить файл.

  2. sudo chattr +i test может предотвратить удаление, но требует sudo. Простой sudo chattr -i test позволяет удалить файл. Ни один другой пользователь, кроме администратора, не может использовать chattr.

И ... простая перезагрузка и переход в режим восстановления позволит этому человеку иметь возможность удалить этот файл. Это было бы угрозой безопасности, если бы существовал метод, который никогда не сможет удалить файл.

0
ответ дан 31 May 2014 в 21:39

Другие вопросы по тегам:

Похожие вопросы: