Disons que vous avez cette structure:
+ directory
-- file1
-- file2
-- file3 -> /tmp/file3
file3
est un lien vers un autre file3
endroit du système.
Maintenant, disons que je chmod 777
le répertoire et tous les contenus qu'il contient. Est-ce que mon file3
en /tmp
reçoit ces autorisations? En outre, supposons que nous ayons la même situation mais inversée.
/tmp/file3 -> /directory/file3
Si j'applique les autorisations sur le fichier lié, comment cela affecte-t-il le lien?
Réponses:
Cela dépend de la façon dont vous appelez
chmod
et de la plate-forme sur laquelle vous vous trouvez.Par exemple, sur un système Linux,
man chmod
dit ceci:Cependant, sur un Mac, chmod peut être utilisé pour modifier les autorisations d'un lien symbolique à l'aide d'options telles que (à partir de
man chmod
):À titre d'exemple, supposons que vous êtes sur une machine Linux pour le reste de cette réponse.
Si, dans le premier cas, vous exécutez
chmod -R 777 directory
une modification récursive des autorisations, la cible du lien ne sera pas affectée mais, dans le cas contrairechmod 777 directory/*
, elle le sera.Si vous modifiez directement les autorisations sur la cible du lien, ces autorisations seront conservées (puisque, comme l' indiquent les pages de manuel et baraboom , les autorisations de lien réelles ne sont utilisées à aucune fin).
Journal de test pour illustration:
la source
Les réponses de baraboom et de peth sont toutes deux correctes: les bits d'autorisation sur les liens symboliques eux-mêmes ne sont pas pertinents (sauf sur macOS; voir ci-dessous), et le changement d'autorisation sur un lien symbolique - par l'
chmod
outil de ligne de commande ou par l'chmod()
appel système - agira simplement comme si elle a été effectuée contre la cible du lien symbolique.Pour citer la description SUSv4 / POSIX.1-2008 de l’appel système symlink () :
Ici, "non spécifié" laisse une marge d’interprétation pour chaque implémentation. Détails:
stat()
retoursst_mode=0777
, quel que soit le umask utilisé lors de la création du lien symbolique;ls -l
affiche donc toujourslrwxrwxrwx
pour les liens symboliques.chmod -h
commande décrite ci-dessus peut modifier cette autorisation (qui utilise en interne unlchown()
appel système non POSIX pour y parvenir), et lestat()
système call renvoie cette valeur pourst_mode
.Les liens symboliques sous Linux et FreeBSD peuvent toujours être suivis, comme spécifié par POSIX. En particulier, sous FreeBSD, cela signifie que le mode fichier d'un lien symbolique n'a aucun effet sur le contrôle d'accès.
D'autre part, macOS casse légèrement POSIX. Bien qu'un lien symbolique puisse être suivi quelle que soit son autorisation de lecture,
readlink()
échoue avecEACCES
(Autorisation refusée) si l'utilisateur ne dispose pas de l'autorisation de lecture:(Notez que la
-> target
partie est manquante dans la sortie de la deuxièmels -l
commande et qu'elle a quand mêmecat symlink
réussi et imprimé le contenu dutarget
fichier même si l'utilisateur n'avait pas l'autorisation de lecturesymlink
.)NetBSD propose apparemment une option de montage spéciale nommée
symperm
qui, si définie, entraîne des autorisations de lecture / exécution de lien symbolique pour contrôlerreadlink()
et traverser les liens.la source
la source