Si je crée un fichier et que je modifie ensuite ses autorisations en 444
(lecture seule), comment se fait rm
-il que je puisse le supprimer?
Si je fais ça:
echo test > test.txt
chmod 444 test.txt
rm test.txt
... rm
demandera si je veux supprimer le fichier protégé en écriture test.txt
. Je m'attendais à ce que rm
ne peut pas supprimer un tel fichier et que je devrais faire une chmod +w test.txt
première. Si je rm -f test.txt
puis rm
supprime le fichier sans même demander, même si elle est en lecture seule.
Quelqu'un peut-il clarifier? J'utilise Ubuntu 12.04 / bash.
permissions
files
rm
readonly
Magnus
la source
la source
Réponses:
Tout ce dont vous
rm
avez besoin est permission write + execute 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 de permissions plus clairement que jamais:
la source
+t
afin que les utilisateurs ne puissent plus modifier ou supprimer les fichiers de ce répertoire qu'ils ne possèdent pas même s'ils ont un accès en écriture au répertoire?chattr
pour ajouter l'indicateur immuable aux fichiers. Sinon, alors ire_and_curses est tout à fait correct.Ok, selon votre commentaire à ire_and_curses, ce que vous voulez vraiment faire est de rendre certains fichiers immuables. Vous pouvez le faire avec la
chattr
commande. Par exemple:par exemple
Vous ne pouvez rien faire sur un fichier immuable - vous ne pouvez pas le supprimer, le modifier, l'écraser, le renommer, chmod ou le chown, ou quoi que ce soit d'autre. La seule chose à faire est de le lire (si les autorisations Unix le permettent) et (en tant que root)
chattr -i
de supprimer le bit immuable.Tous les systèmes de fichiers ne supportent pas tous les attributs. Autant que je sache, immuable est supporté par tous les systèmes de fichiers linux courants (y compris ext2 / 3/4 et xfs. Zfsonlinux ne supporte pas du tout les attributs pour le moment)
la source
lsattr
pour lister les attributs.rm
que cela ne m'est jamais arrivé ...Une réponse à cette question affirme que vous pouvez supprimer un fichier d'un répertoire uniquement s'il est simplement
write
autorisé, c'est totalement faux! juste l'essayer! Donnez à un répertoire unewrite
permission et essayez de supprimer, vous ne pouvez pas!Pour supprimer un fichier dans un répertoire, vous devez avoir à la fois l' autorisation
write
et l'execute
autorisation sur le répertoire.Revenons maintenant à la question: pour supprimer un fichier en utilisant,
rm
vous supprimez simplement ses informations d'inode du répertoire, c'est-à-dire que vous ne l'êtes passhredding
à partir du disque. Si les informations inode du fichier ne sont pas dans le répertoire, vous ne pouvez pas y accéder (également parce que vous ne pouvez pas le voir car il ne figure pas dans son répertoire parent), c'est-à-dire qu'il est supprimé pour vous.Ainsi, pour supprimer un fichier d'un répertoire, il vous suffit d'une permission sur le répertoire. les autorisations sur ce fichier ne sont pas pertinentes
la source