Pourquoi ai-je pu supprimer un fichier appartenant à root dans mon répertoire personnel sans être root?

40

Je faisais donc un peu de maintenance sur mon serveur plus tôt dans la journée et j'ai remarqué que je pouvais supprimer un fichier appartenant à root dans mon répertoire personnel.

J'ai pu reproduire un échantillon:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

Ma question est la suivante: comment ai-je pu supprimer un fichier appartenant à root et disposant d'autorisations -rw-r--r--, alors que je ne suis pas root?

Carl Bennett
la source
6
Vous pouvez supprimer l'entrée du répertoire qui pointe vers le fichier car vous avez un accès en écriture au répertoire. Vous ne pouvez pas nécessairement supprimer le fichier; le fichier peut avoir un autre lien dur ailleurs.
user253751
2
Funny extension: vous pouvez également renommer le fichier ou en créer des liens.
Peter dit réintégrer Monica
11
Veuillez reconsidérer votre choix pour la réponse acceptée, car votre réponse actuelle est tout à fait trompeuse: vous n’êtes pas autorisé à y modifier le contenu en fonction des autorisations du répertoire .
Cthulhu
@Cthulhu Done! Merci à tous pour tous les commentaires à ce Q & A, certainement beaucoup d'informations utiles ici!
Carl Bennett

Réponses:

34

Les autorisations, le contenu et tous les attributs font partie de l'inode. Le nom est dans l'entrée du répertoire. Les autorisations ne sont pas héritées de manière récursive (sauf lorsque vous utilisez des ACL par défaut dans Posix).

Lorsque vous supprimez un fichier, vous supprimez en interne un lien physique de l’entrée du répertoire vers l’inode. Lorsque tous les liens physiques sont supprimés et que l'inode n'est pas utilisé, le système de fichiers récupérera l'espace. Vous n'avez besoin que d'une autorisation d'écriture sur le dossier, quelles que soient les autorisations définies sur le fichier (à l'exception de l'autorisation ext immuable). Idem pour un dossier vide.

Lorsque vous supprimez un dossier qui n'est pas vide, vous devez disposer d'une autorisation d'écriture sur le dossier que vous supprimez et son parent.

Mircea Vutcovici
la source
1
Donc, les autorisations sont sur l'inode ou les autorisations sont sur le lien vers l'inode, et je supprime simplement ce lien (et donc le seul lien qui le concerne est supprimé, de sorte que l'inode cesse d'exister)?
Carl Bennett
3
Les autorisations sont sur l'inode. Ceci est facilement vérifié en créant un lien physique vers un fichier, en modifiant les autorisations sur celui-ci, puis en vérifiant les autorisations sur le fichier d'origine.
Wouter Verhelst
mais disons qu'il y a un répertoire et un fichier dans celui-ci appartenant tous les deux à la racine, le répertoire étant dans un répertoire appartenant à l'utilisateur. Vous ne pourriez pas les enlever alors, non?
njzk2
1
C'est un attribut spécifique à ext2, ext3 et ext4. Exemple: sudo touch test_file;sudo chattr +i test_file;rm -f test_filevoir:man chattr
Mircea Vutcovici
1
L'attribut immuable protège un fichier de toute modification, même de la racine.
Mircea Vutcovici
19

Lorsque vous êtes propriétaire du répertoire, vous êtes autorisé à y faire quoi que ce soit et son contenu en fonction des autorisations du répertoire. Par conséquent, même si vous ne possédiez pas le fichier, vous pouviez toujours le supprimer car vous disposiez d'une autorisation de lecture / écriture sur le répertoire dans lequel le fichier résidait.

inetknght
la source
46
Pas exactement. Par exemple, OP ne serait pas en mesure de modifier ce fichier appartenant à la racine. Le fait est que la suppression d'un fichier n'est pas considérée comme une opération sur un fichier, mais plutôt sur un répertoire (suppression du pointeur sur un fichier) et c'est pourquoi les autorisations sur le répertoire importaient.
Cthulhu
1
@Cthulhu pourrait-il donc supprimer un fichier appartenant à la racine et en créer un nouveau portant le même nom après?
KDEx
3
@Morgoroth, oui, mais ce ne serait plus le même fichier. Pour un autre exemple (peut-être plus évident), vous ne pourriez pas lire le fichier de votre répertoire s'il appartenait à la racine et que seul son propriétaire pouvait le lire.
Cthulhu
@inetknght Ceci devrait être clarifié. Je comprends que vous essayez de parler de manipulation des fichiers eux-mêmes, en tant qu’entités, mais ce n’est pas clair. Vous ne pouvez pas modifier son contenu, par exemple. Et vous ne mentionnez pas d'attributs pouvant outrepasser les autorisations de répertoire.
Mike S
1
@ captcha C'est parce que le vifichier est d'abord sauvegardé dans une copie temporaire, puis il supprime le fichier d'origine et renomme la copie en original (ou quelque chose comme ça).
Cthulhu