Pourquoi un utilisateur peut-il supprimer les 755 fichiers d'un autre utilisateur?

35

J'ai un script de téléchargement de sauvegarde qui scp les fichiers sur un autre serveur en utilisant l'utilisateur upload. Un autre script sur le serveur cible est ensuite envoyé à un autre utilisateur et définit le mode de fichier sur 755.

Si je puis SSH sur le serveur cible à l'aide de l' uploadutilisateur, je suis en mesure de supprimer les fichiers chowns. Ne devraient-ils pas être lus seulement?

Voici à quoi ressemble un fichier sur le serveur cible et que l’utilisateur uploadpeut le supprimer.

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

L'utilisateur uploadvient d'être ajouté en utilisant useraddet ne fait pas partie du maciekishgroupe.

En essayant de supprimer le fichier comme uploadvia ssh, je me pose la question de savoir si je veux supprimer «fichier protégé en écriture protégé» et je peux le dire Yet le supprimer.

Maciej Swic
la source
4
Pour l'essentiel, une copie de Pourquoi peut-on rmsupprimer des fichiers en lecture seule?
G-Man dit 'Réintégrer Monica'

Réponses:

64

Les fichiers sont en lecture seule; Cependant, la suppression d'un fichier ne le modifie pas, mais seulement le répertoire parent (il supprime fondamentalement le fichier de la liste des répertoires) - et il semblerait que vous disposiez d'autorisations d'écriture complètes sur le répertoire.

Vous pouvez définir le stickybit, c.-à-d. L'indicateur de «suppression restreinte», qui empêchera toute personne autre que le propriétaire de renommer ou de supprimer des fichiers de ce répertoire (comme dans /tmp). Pour ce faire, exécutez en chmod o+t *directory*tant que propriétaire du répertoire.

Grawity
la source
12

Dans un système de fichiers Unix typique, tout fichier peut être identifié par un nombre arbitraire d'entrées de répertoire, chacune d'entre elles contenant un "lien dur".

Du point de vue de la mise en œuvre, il y a une différence entre supprimer la dernière entrée de répertoire (lien dur) pour un fichier et simplement supprimer une référence sur plusieurs. Cependant, d'un point de vue sémantique, il n'y a pas de différence.

S'il existe plusieurs liens physiques vers un fichier, l'écriture sur le fichier à l'aide de l'un d'eux modifie le fichier affiché par tous. rmCependant, l' utilisation d'un lien empêche simplement le fichier d'être accessible via ce lien. D'autres liens vers le fichier continuent de voir exactement le même fichier.

supercat
la source
3
Communément appelé liens durs.
Bob
1
@Bob: Je sais que le terme "lien physique" est utilisé pour décrire les références créées à un fichier déjà existant. dans les cas où un fichier n'a jamais eu plus d'une référence, cette seule référence est-elle toujours appelée "lien dur"?
Supercat
3
Il n'y a pas de différence entre les liens. Créer un fichier A, créer un lien physique B, supprimer le fichier A. Est-ce que B est maintenant un fichier ou un lien physique? Pour comprendre son fonctionnement, il est préférable de le voir comme N liens physiques et non comme 1 fichier et (N-1) liens physiques. Il y a aussi les liens qui existent quand un fichier est ouvert.
gnasher729
@ gnasher729: Je conviens que dans les cas où plusieurs liens existent ou ont déjà existé dans un fichier, il est logique de les appeler tous comme des "liens durs" s'il n'y a pas de différence sémantique. Par ailleurs, je penserais qu’il pourrait y avoir des avantages à distinguer entre une entrée de répertoire qui a toujours été la seule référence à un fichier et une autre sur laquelle des liens en dur ont peut-être été créés. En tout cas, je ne savais pas s’il serait correct de se référer par exemple aux entrées du répertoire, "chacune d’elles étant appelée" lien dur "".
Supercat
2
@supercat ce n'est pas incroyablement commun, mais c'est correct. Considérez le st_nlinkchamp ("number of hard links") dans struct stat. En termes simples, les répertoires contiennent des liens physiques vers des fichiers.
Hobbs