Comment créer un fichier même si l'utilisateur root ne peut pas le supprimer

13

Comment créer un fichier même si l'utilisateur root ne peut pas le supprimer?

Kumar
la source
9
Alors que la réponse de tante devrait couvrir votre question, un méta-commentaire: il serait beaucoup plus facile de répondre si vous ajoutiez votre justification à votre question. Peut-être y a-t-il une solution à votre problème qui ne consiste pas à empêcher la suppression des fichiers?
fschmitt

Réponses:

33

Réponse simple: vous ne pouvez pas, root peut tout faire.

Vous pouvez définir l'attribut "i" avec chattr (au moins si vous êtes sur l'extension {2,3,4}), ce qui rend un fichier immuable, mais root peut simplement annuler l'attribut et supprimer le fichier de toute façon.

Plus complexe (et solution de contournement hack laide): Mettez le répertoire que vous voulez immuable pour root sur le serveur distant et montez-le via NFS ou SMB. Si le serveur n'offre pas d'autorisations d'écriture, cela verrouille le compte racine local. Bien sûr, le compte root local peut simplement copier les fichiers localement, démonter le truc distant, mettre la copie en place et changer cela.

Vous ne pouvez pas empêcher root de supprimer vos fichiers. Si vous ne pouvez pas faire confiance à votre racine pour conserver les fichiers intacts, vous rencontrez un problème social, pas technique.

tante
la source
Cette question m'est posée par un intervieweur. Je ne connais pas la réponse. Je lui ai demandé une réponse. Il l'a dit possible et trouver une solution par vous-même.
Kumar
12
un jour, vous aussi, vous serez un intervieweur et pourrez vous poser des questions absurdes: "est-ce que root peut créer un fichier si gros qu'il ne peut pas mv?" (qui est une blague boiteuse basée sur la théosophie chrétienne, et une blague terrible si vous n'êtes pas familier avec le domaine)
msw
5
@msw: On pourrait dire que c'est une blague terrible même si vous êtes familier avec le domaine.
Matthew Crumley
@matthew crumley: coupable comme accusé :)
msw
@msw: Je viens de remarquer que vous avez même admis que c'était une blague boiteuse. Et FWIW, j'aime (certaines) blagues boiteuses donc j'ai vraiment aimé ça. Cela devient cependant très loin du sujet :)
Matthew Crumley
34

Mettez-le sur un CD-rom! ;)

(cela devrait être un commentaire mais je ne peux pas faire de commentaires ...)

laurent
la source
Il y a un sens derrière la limite de réputation pour les commentaires ;-) Juste une petite impulsion de réflexion. aucune flamme prévue ;-)
echox
6
+1 Mais cela fonctionnerait.
Richard Holloway
1
Ceci et la réponse de @mouviciel est la seule solution correcte. Même le tout-puissant @root est toujours lié par les règles définies par le matériel.
Lie Ryan
15

Placez votre fichier sur un système de fichiers en lecture seule. Il peut s'agir d'un FS distant où root n'est plus root, d'un CD-ROM ou d'un périphérique amovible qui peut être protégé en écriture, par exemple une carte SD.

mouviciel
la source
2

Il y a longtemps, j'ai écrit un correctif du noyau (vers 2.2.ancient) où tenter de supprimer un fichier appelé SELFDESTRUCT a tué le processus d'appel. Cela évitait les "rm -rf *" accidentels.

pjc50
la source
il y a longtemps et loin. Comment l'avez-vous réellement fait (commandes)?
Michael Durrant
1

Vous pouvez utiliser chattr +ipour rendre un fichier immuable.

Bien sûr, un utilisateur averti avec un accès root pourrait toujours utiliser chattr -ipour supprimer l'attribut immuable, puis supprimer le fichier, mais il pourrait également annuler toutes les autres tentatives de blocage de l'accès répertoriées ici.

Je dirais que chattr est la bonne façon pour Unix de le faire.

jeremyjjbrown
la source