Dans un but particulier, je souhaite empêcher les utilisateurs non root du serveur Linux de modifier ou de renommer les noms de fichiers. Cependant, ils peuvent modifier et écrire dans le contenu du fichier. Comment faire cela en ligne de commande.
Citant Stephane Chazelas de cette réponse sous Unix & Linux SE .
Pour renommer un fichier, les autorisations d'écriture sur le fichier importent peu, renommer un fichier est une modification du répertoire, pas du fichier. Cela modifie l'entrée du répertoire pour que son nom corresponde au fichier.
Il suffit donc de modifier les autorisations du répertoire. Par exemple:
chown root: . chmod 755 .
Cela empêchera les utilisateurs de renommer des fichiers, mais aussi de créer ou de supprimer des fichiers. Si vous souhaitez toujours qu'ils puissent le faire, vous pouvez également rendre le répertoire accessible en écriture, mais également définir le bit
t
. Avec ce bit défini, les utilisateurs (autres que le propriétaire du répertoire qui n'est pas restreint) ne peuvent que supprimer ou renommer les fichiers qu'ils possèdent.chown root:people-who-can-create-file-here . chmod 1775 . chown root:people-who-can-modify-the-files file1-that-must-not-be-rename ... chmod 664 file1-that-must-not-be-rename ...
chmod +t [FILE]
Il définit le sticky bit, qui fait exactement ce que vous décrivez.
EDIT: Eh bien, pour être plus précis, cela empêche les autres utilisateurs de renommer le fichier. Cela dépend donc de ce que vous voulez, exactement.