Как создать файл, даже пользователь root не может его удалить

13

Как создать файл, даже если пользователь root не может его удалить?

Кумар
источник
9
Хотя ответ tante должен охватывать ваш вопрос, есть один мета-комментарий к нему: было бы гораздо легче ответить, если бы вы добавили обоснование к своему вопросу. Может быть, есть обходной путь к вашей проблеме, не состоящий в предотвращении удаления файла (ов)?
fschmitt

Ответы:

33

Простой ответ: вы не можете, root может сделать все.

Вы можете установить атрибут "i" с помощью chattr (по крайней мере, если вы находитесь на ext {2,3,4}), что делает файл неизменным, но root может просто сбросить атрибут и удалить файл в любом случае.

Более сложный (и уродливый хакерский обходной путь): Поместите каталог, который вы хотите изменить для root, на удаленный сервер и смонтируйте его через NFS или SMB. Если сервер не предлагает разрешения на запись, это блокирует локальную корневую учетную запись. Конечно, локальная корневая учетная запись может просто скопировать файлы локально, размонтировать удаленный материал, поместить копию на место и изменить ее.

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

Tante
источник
Этот вопрос задает мне интервьюер. Я не знаю ответа. Я попросил его ответить. Он сказал, что это возможно и найти решение самостоятельно.
Кумар
12
Когда-нибудь вы тоже будете интервьюером и сможете задавать свои бессмысленные вопросы: «Может ли root создать файл настолько большой, что он не сможет mv?» (это глупая шутка, основанная на христианской теософии, и ужасная шутка, если вы не знакомы с полем)
MSW
5
@msw: Можно утверждать, что это ужасная шутка, даже если вы знакомы с этой областью.
Мэтью Крамли
@matthew Crumley: виновен, как предъявлено обвинение :)
MSS
@msw: Я только что заметил, что ты даже признал, что это была глупая шутка. И FWIW, мне нравятся (некоторые) отстойные шутки, так что мне действительно понравилось. Это становится довольно не по теме, хотя :)
Мэтью Крамли
34

Поместите это на компакт-диск! ;)

(это должен быть комментарий, но я не могу делать комментарии ...)

Laurent
источник
Есть смысл за предел репутации для комментариев ;-) Просто небольшой заставляющий думать импульс. пламя не предусмотрено ;-)
echox
6
+1 Но это бы сработало.
Ричард Холлоуэй
1
Это и ответ @mouviciel - единственно правильное решение. Даже всемогущий @root по-прежнему связан правилами, установленными оборудованием.
Ли Райан
15

Поместите ваш файл в файловую систему только для чтения. Это может быть удаленная FS, где root больше не является root, CD-ROM или съемное устройство, которое может быть защищено от записи, например SD-карта.

mouviciel
источник
2

Давным-давно я написал патч для ядра (до версии 2.2.ancient), в котором попытка удалить файл с именем SELFDESTRUCT убила вызывающий процесс. Это защищено от случайного "rm -rf *".

pjc50
источник
давно и далеко. Как ты на самом деле это сделал (команды)?
Майкл Даррант
1

Вы можете использовать, chattr +iчтобы сделать файл неизменным.

Конечно, опытный пользователь с правами суперпользователя все еще может использовать chattr -iдля удаления атрибута immutable, а затем удалить файл, но он также может отменить любые другие попытки заблокировать доступ, перечисленные здесь.

Я бы сказал, что Chattr - это правильный способ Unix сделать это.

jeremyjjbrown
источник