Si je crée un fichier puis que je modifie ses autorisations en 444
(lecture seule), pourquoi rm
peut le supprimer ?
Si je fais ceci :
echo test > test.txt
chmod 444 test.txt
rm test.txt
…rm
me demandera si je veux supprimer le fichier protégé en écriture test.txt
. Je me serais attendu à ce que rm
ne peux pas supprimer un tel fichier et qu'il faudrait que je fasse un chmod +w test.txt
première. Si je fais rm -f test.txt
puis rm
supprimera le fichier sans même demander, même s'il est en lecture seule.
Quelqu'un peut-il clarifier? J'utilise Ubuntu 12.04/bash.
Réponse acceptée :
Tous les rm
a besoin d'une autorisation d'écriture et d'exécution sur le répertoire parent. Les autorisations du fichier lui-même ne sont pas pertinentes.
Voici une référence qui explique le modèle d'autorisations plus clairement que jamais :
Toute tentative d'accès aux données d'un fichier nécessite une autorisation de lecture. Toute
tentative de modification des données d'un fichier nécessite une autorisation en écriture. Toute
tentative d'exécution d'un fichier (un programme ou un script) nécessite l'autorisation d'exécution
…Étant donné que les répertoires ne sont pas utilisés de la même manière que les fichiers normaux,
les autorisations fonctionnent légèrement (mais seulement légèrement) différemment. Une tentative
de lister les fichiers d'un répertoire nécessite une autorisation de lecture pour le
répertoire, mais pas pour les fichiers qu'il contient. Une tentative d'ajouter un fichier à un
répertoire, de supprimer un fichier d'un répertoire ou de renommer un fichier, tous
nécessitent une autorisation d'écriture pour le répertoire, mais (peut-être étonnamment)
pas pour les fichiers à l'intérieur. L'autorisation d'exécution ne s'applique pas aux
répertoires (un répertoire ne peut pas être également un programme). Mais ce
bit d'autorisation est réutilisé pour les répertoires à d'autres fins.L'autorisation d'exécution est nécessaire sur un répertoire pour pouvoir y accéder
(c'est-à-dire pour faire d'un répertoire votre répertoire de travail actuel).Execute est nécessaire sur un répertoire pour accéder aux informations "inode" des
fichiers qu'il contient. Vous en avez besoin pour rechercher un répertoire afin de lire les
inodes des fichiers qu'il contient. Pour cette raison, l'autorisation d'exécution sur
un répertoire est souvent appelée autorisation de recherche.