48 votes

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

Alors j'ai fait quelques travaux de maintenance sur mon serveur plus tôt aujourd'hui et j'ai remarqué que j'étais capable de supprimer un fichier appartenant à root dans mon répertoire personnel.

J'ai pu reproduire un exemple:

[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: supprimer le fichier régulier vide protégé en écriture ‘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 comment ai-je pu supprimer un fichier appartenant à root et ayant les permissions -rw-r--r--, alors que je ne suis pas root ?

6 votes

Vous pouvez supprimer l'entrée dans l'annuaire 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 pourrait avoir un autre lien dur ailleurs.

2 votes

Extension amusante : vous pouvez également renommer le fichier ou créer des liens durs avec celui-ci.

12 votes

Veuillez reconsidérer votre choix pour la réponse acceptée, car celle actuelle est carrément trompeuse : vous n'êtes pas autorisé à faire quoi que ce soit à celle-ci et aux contenus à l'intérieur en fonction des permissions du répertoire.

39voto

jcollum Points 10236

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

Lorsque vous supprimez un fichier, vous supprimez simplement 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 avez seulement besoin de l'autorisation d'écriture sur le dossier peu importe quelles permissions sont définies sur le fichier (à l'exception de la permission ext immuable). Il en va de même pour un dossier vide.

Lorsque vous supprimez un dossier qui n'est pas vide, vous avez besoin de l'autorisation d'écriture sur le dossier que vous êtes en train de supprimer et sur son parent.

1 votes

Donc les autorisations sont sur l'inode ou les autorisations sont sur le lien vers l'inode, et je viens de supprimer ce lien (et donc le seul lien vers celui-ci est supprimé, donc l'inode cesse d'exister)?

3 votes

Les autorisations se trouvent dans l'inode. Cela peut facilement être vérifié en créant un lien dur vers un fichier, en modifiant les autorisations de celui-ci, puis en vérifiant les autorisations sur l'original.

0 votes

Mais disons qu'il y a un répertoire et un fichier dedans tous deux appartenant à root, le répertoire étant dans un répertoire appartenant à l'utilisateur. Vous ne seriez pas en mesure de les supprimer alors, n'est-ce pas?

21voto

inetknght Points 381

Lorsque vous possédez le répertoire, vous êtes autorisé à faire tout ce que vous voulez avec, ainsi qu'avec son contenu, en fonction des autorisations du répertoire. Par conséquent, malgré le fait de ne pas posséder le fichier, vous avez quand même pu le supprimer car vous aviez l'autorisation de lecture/écriture sur le répertoire où se trouvait le fichier.

51 votes

Pas exactement. Par exemple, l'OP ne pourrait pas modifier ce fichier possédé par root. Le truc, c'est que supprimer un fichier n'est pas considéré comme une opération sur le fichier mais plutôt sur le répertoire (supprimer le pointeur vers un fichier) et c'est pour cela que les permissions sur le répertoire importaient.

1 votes

@Cthulhu pourriez-vous supprimer un fichier appartenant à root et en créer un nouveau modifié avec le même nom après ?

3 votes

@Morgoroth oui, vous pourriez le faire, mais ce ne serait plus le même fichier. Pour un autre exemple (peut-être plus évident), vous ne seriez pas en mesure de lire le fichier dans votre répertoire s'il appartenait à la racine et que seul son propriétaire pouvait le lire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X