Création de liens durs - Autorisations?

17

Quelles autorisations affectent la création de liens physiques? La propriété du fichier est-elle importante?


Supposons que l'utilisateur aliceveuille créer un lien dur vers le fichier target.txtdans un répertoire target-dir.

  • De quelles autorisations a alicebesoin à la fois sur target.txtet target-dir?
  • Si target.txtappartient à l'utilisateur billet target-dirappartient à l'utilisateur chad, cela change-t-il quelque chose?

J'ai essayé de simuler cette situation en créant la structure de dossiers / fichiers suivante dans un ext4système de fichiers:

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy

Bien qu'elle alicepuisse créer un lien logiciel vers target.txt, elle ne peut pas créer de lien physique:

#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted

Si le alicepropriétaire target.txtet aucune autorisation ne sont modifiés, le lien dur réussit. Qu'est-ce que j'oublie ici?

gcscaglia
la source
Est-ce pour une mission? Cela peut affecter le type de réponses que certains choisiront de donner si tel est le cas (pas qu'il serait hors de question de poser une question sur une mission bien sûr). Quoi qu'il en soit, avez-vous essayé de créer ce scénario et de voir ce qui se passe?
Eric Renouf
Non, ce n'est pas pour une mission. Je suis confronté à ce scénario exact et j'ai quelques suppositions, mais j'ai pensé qu'il serait préférable de demander d'un point de vue théorique. Dans mon cas, je ne suis pas en mesure de créer le lien dur indépendamment des autorisations target.txtet target-dir, sauf si je suis sudoroot.
gcscaglia
Les liens matériels partagent la même propriété et les mêmes autorisations, c'est donc la même chose que d'accéder au fichier d'origine.
teppic
@teppic Mon problème n'est pas d'accéder au lien dur créé, il crée le lien dur car. aliceJe peux accéder à la fois au fichier d'origine et à un lien dur (créé avec sudo), mais je ne peux pas créer le lien comme l'utilisateur, même alicesi nous convenons tous que ces autorisations devraient lui suffire.
gcscaglia

Réponses:

19

Pour créer le lien dur, aliceil faudra des write+executeautorisations target-dirsur tous les cas. Les autorisations nécessaires target.txtvarieront:

  • Il a fs.protected_hardlinks = 1alors alicebesoin de posséder target.txtou au moins des read+writeautorisations sur celui-ci.
  • Si fs.protected_hardlinks = 0alors n'importe quel ensemble d'autorisations fera l'affaire; Même 000 est correct.

Cette réponse à une question similaire contenait l'élément d'information manquant pour répondre à cette question.

De http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [emphase sur moi]:

Liens physiques:

Sur les systèmes qui ont des répertoires inscriptibles par l'utilisateur sur la même partition que les fichiers système, une classe de problèmes de sécurité de longue date est la course au temps de contrôle basé sur un lien fixe, le plus souvent observée dans les répertoires inscriptibles dans le monde comme / tmp. La méthode courante d'exploitation de cette faille consiste à franchir les limites de privilèges lors du suivi d'un lien physique donné (c'est-à-dire qu'un processus racine suit un lien physique créé par un autre utilisateur). De plus, il existe un problème où les utilisateurs peuvent "épingler" un fichier setuid / setgid potentiellement vulnérable afin qu'un administrateur ne mette pas réellement à niveau un système complètement.

La solution consiste à autoriser la création de liens physiques uniquement lorsque l'utilisateur est déjà propriétaire du fichier existant ou s'il a déjà un accès en lecture / écriture au fichier existant .

gcscaglia
la source
Merci! C'est ce que je lutte depuis un jour sur Debian 9!
Arda
Pourquoi devrais-je obtenir "opération non autorisée" même si j'ai des perms rwx sur le répertoire et des perm rw sur le fichier?
Michael
1

alicenécessite au moins une autorisation de lecture et une autorisation d' target.txtécriture + d'exécution target-dir.

Maintenant, la structure d'autorisation fonctionne comme un ensemble séparé en trois parties:

  1. Autorisations utilisateur: s'appliquent à l' utilisateur propriétaire du nœud.
  2. Autorisations de groupe: s'appliquent à tout utilisateur appartenant au groupe propriétaire du nœud.
  3. Autorisations des autres: s'appliquent à tout autre utilisateur / groupe ne possédant pas le nœud.

Par conséquent, la question de propriété affecte uniquement dans quel ensemble d'autorisations les autorisations requises alicesont, à savoir:

  • S'il alices'agit de l'utilisateur propriétaire, les autorisations requises doivent se trouver dans la partie "utilisateur".
  • Si alicefait partie du groupe qui le possède, les autorisations requises doivent se trouver dans la partie "groupe".
  • Si alicene le possède pas et ne fait pas partie du groupe qui le possède, les autorisations requises doivent se trouver dans la partie "autre".
dave_alcarin
la source
C'est ce que je pense également. Mais dans ma situation, il target.txtdispose de 444 autorisations et de target-dir777 autorisations, mais je ne peux pas créer de lien physique sauf si je le fais en tant que root ou que je possède le fichier auquel je crée un lien. Curieusement, un doux -link fonctionnera comme vous décrivez.
gcscaglia
Cette information serait utile d'avoir dans la question elle-même, je vous recommande de mettre à jour. Curieusement, je n'y avais pas pensé auparavant ... mais le système de fichiers dans lequel vous travaillez prend-il en charge les propriétés / autorisations Unix, pour commencer?
dave_alcarin
Oui, il s'agit d'un ext4 prêt à l'emploi sur un système fedora 21; Le lien fonctionne quand je suis le propriétaire du fichier.
gcscaglia