Comment utiliser la commande linux flock pour empêcher un autre processus racine de supprimer un fichier?

StackOverflow https://stackoverflow.com/questions/1040828

Question

Je souhaite empêcher l'un de mes processus racine de supprimer un certain fichier. Je suis donc tombé sur la commande flock, elle semble correspondre à mes besoins, mais je n’ai pas compris sa syntaxe.

Si je n'indique qu'un verrou partagé, cela ne fonctionne pas:

flock -s "./file.xml"

Si j'ajoute un paramètre de délai d'attente, cela ne fonctionne toujours pas:

flock -s -w5 "./file.xml"

Il semble que de cette façon, il s’insère dans le code flock [-sxun] [- w #] fd # . (Quel est ce paramètre fd # ?)

Alors, j'ai essayé:

flock [-sxon][-w #] file [-c] command

Utilisation de flock -s -w5 " ./ file.xml " -c " tail -3 ./file.xml" et cela a fonctionné, la commande tail à ./file.xml a été exécutée.

Mais j'aimerais savoir si le verrou prend fin 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 la suivante: comment puis-je empêcher un autre processus racine de supprimer un fichier sous Linux?

Était-ce utile?

La solution

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

Cela n'empêche pas root, ni quiconque, de lire, d'écrire ou de supprimer le fichier.

Dans tous les cas, même s'il s'agissait d'un verrou obligatoire, cela n'empêcherait pas la suppression du fichier, car il s'agit d'un fichier verrouillé et non d'une entrée de répertoire.

Autres conseils

sudo chattr + i ./file.xml

MarkR est correct si vous parlez que le fichier ne pourra pas être supprimé:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2135] --> sudo chattr +i junk.txt
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [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)
risk@DockMaster [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)
risk@DockMaster [2138] --> 

flock n'est pas le bon outil pour ce travail. Si un programme supprime des fichiers, vous ne devez pas l'exécuter en tant que root. Vous devriez l'exécuter en tant qu'utilisateur différent. Unix supporte très bien les permissions sur les fichiers, mais root est un compte divin. Root peut tout faire et il n’ya pas d’autorisations pour root.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top