Quelles autorisations affectent la création de liens physiques? La propriété du fichier est-elle importante?
Supposons que l'utilisateur alice
veuille créer un lien dur vers le fichier target.txt
dans un répertoire target-dir
.
- De quelles autorisations a
alice
besoin à la fois surtarget.txt
ettarget-dir
? - Si
target.txt
appartient à l'utilisateurbill
ettarget-dir
appartient à l'utilisateurchad
, cela change-t-il quelque chose?
J'ai essayé de simuler cette situation en créant la structure de dossiers / fichiers suivante dans un ext4
systè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 alice
puisse 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 alice
propriétaire target.txt
et aucune autorisation ne sont modifiés, le lien dur réussit. Qu'est-ce que j'oublie ici?
linux
permissions
hard-link
gcscaglia
la source
la source
target.txt
ettarget-dir
, sauf si je suissudo
root.alice
Je peux accéder à la fois au fichier d'origine et à un lien dur (créé avecsudo
), mais je ne peux pas créer le lien comme l'utilisateur, mêmealice
si nous convenons tous que ces autorisations devraient lui suffire.Réponses:
Pour créer le lien dur,
alice
il faudra deswrite+execute
autorisationstarget-dir
sur tous les cas. Les autorisations nécessairestarget.txt
varieront:fs.protected_hardlinks = 1
alorsalice
besoin de possédertarget.txt
ou au moins desread+write
autorisations sur celui-ci.fs.protected_hardlinks = 0
alors 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]:
la source
alice
nécessite au moins une autorisation de lecture et une autorisation d'target.txt
écriture + d'exécutiontarget-dir
.Maintenant, la structure d'autorisation fonctionne comme un ensemble séparé en trois parties:
Par conséquent, la question de propriété affecte uniquement dans quel ensemble d'autorisations les autorisations requises
alice
sont, à savoir:alice
s'agit de l'utilisateur propriétaire, les autorisations requises doivent se trouver dans la partie "utilisateur".alice
fait partie du groupe qui le possède, les autorisations requises doivent se trouver dans la partie "groupe".alice
ne 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".la source
target.txt
dispose de 444 autorisations et detarget-dir
777 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.