2009-06-24 22 views
9

Je voudrais empêcher un de mes processus racine de supprimer un certain fichier. Donc je suis tombé sur la commande de troupeau, elle semble correspondre à mes besoins, mais je n'ai pas eu sa syntaxe.Comment utiliser la commande linux flock pour empêcher un autre processus racine de supprimer un fichier?

Si je n'indiquerai un verrou partagé, il ne fonctionne pas:
flock -s "./file.xml"

Si j'ajoute un paramètre de délai d'attente, il ne fonctionne toujours pas
flock -s -w5 "./file.xml"

Il semble de cette façon, il s'inscrit dans flock [-sxun][-w #] fd# manière.
(Qu'est-ce que ce paramètre fd #?)

Alors, j'ai essayé le flock [-sxon][-w #] file [-c] command
En utilisant flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" et cela a fonctionné, commande de queue à ./file.xml a été exécuté.
Mais j'aimerais savoir, le verrou se termine-t-il après la commande ou dure-t-il 5 secondes après la fin de l'exécution de la commande? Ma question principale est, comment puis-je empêcher un autre processus racine de supprimer un fichier dans Linux?

Répondre

33

Non, le flock n'empêche personne de faire quoi que ce soit. Les verrous Unix sont ADVISORY, ce qui signifie qu'ils empêchent les autres processus d'appeler aussi flock (ou, dans le cas d'un verrou partagé, d'empêcher un autre processus d'en utiliser un exclusif).

Il n'empêche pas la racine, ou quiconque, de lire, d'écrire ou de supprimer le fichier. Dans tous les cas, même s'il s'agissait d'un verrou obligatoire, il n'arrêterait pas le fichier en cours de suppression, car il s'agit du fichier qui n'est pas verrouillé dans le répertoire.

+0

Oh, merci l'homme. Je vais essayer le verrouillage du dossier. Merci – Danmaxis

+19

Non, vous ne comprenez pas. Linux n'a pas de verrouillage obligatoire, normalement. Le verrouillage obligatoire résout peu et surtout permet juste à une application de refuser le service à une autre sans aucune explication ou façon de traiter avec elle. Si vous voulez vraiment, vraiment, arrêter la racine de la suppression d'un fichier, passez-le à "immuable", mais ils peuvent toujours le changer puis le supprimer. – MarkR

7

sudo chattr +i ./file.xml

MarkR est correct chattr'ing le fichier va l'empêcher d'être supprimé:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2135] --> sudo chattr +i junk.txt 
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2136] --> sudo rm ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted 
zsh: exit 1  sudo rm ./junk.txt 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2137] --> sudo rm -f ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted 
zsh: exit 1  sudo rm -f ./junk.txt 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2138] --> 
4

troupeau n'est pas le bon outil pour ce travail. Si vous avez un programme qui supprime des fichiers, vous ne devriez pas exécuter ce programme en tant que root. Vous devriez l'exécuter en tant qu'utilisateur différent. Unix a un très bon support pour les autorisations de fichiers, mais root est un compte de dieu. La racine peut tout faire, et il n'y a pas d'autorisations pour root.