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

15

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

    
задан Evan 25.02.2013 в 17:52
источник

4 ответа

3

Try:

chattr +i filename

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

    
ответ дан user135564 25.02.2013 в 18:28
источник
23

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

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

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

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

    
ответ дан Rinzwind 25.02.2013 в 18:58
8

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

=^_^= [email protected]:~$ mkdir test
=^_^= [email protected]:~$ touch test/delme
=^_^= [email protected]:~$ chmod a-w test
=^_^= [email protected]:~$ echo 'Hello' > test/delme 
=^_^= [email protected]:~$ cat test/delme 
Hello
=^_^= [email protected]:~$ rm test/delme 
rm: cannot remove 'test/delme': Permission denied

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

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

    
ответ дан Izkata 25.02.2013 в 22:43
8

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

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

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

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

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

    
ответ дан Stéphane Chazelas 25.02.2013 в 22:57