Quel est l'équivalent Ubuntu du drapeau OSX `chmod -h`?


13

Dans OSX, je peux définir les autorisations du lien symbolique lui-même (au lieu de la chose qu'il pointe vers l'utilisation du -h). Depuis la page de manuel:

 -h      If the file is a symbolic link, change the mode of the link itself rather than the file that the link points to.

Dans Ubuntu 14.04, j'essaie de définir les autorisations d'un lien symbolique, mais il n'est défini que sur la cible du lien symbolique.

Il s'agit d'un lien symbolique de /home/nagios/.ssh/someprivatekeyà /somewhere/else/privatekey, donc les autorisations sont importantes pour ssh. Comment puis-je atteindre cet objectif?


Alors, pourquoi avez-vous besoin de ce lien symbolique?
muru

1
êtes-vous sûr que ssh se soucie des autorisations sur le lien symbolique et non des autorisations sur / quelque part / autre / clé privée?
Random832

@ Random832 Oui, j'ai peut-être tiré la mauvaise conclusion, j'étais également un peu confus quant à la façon dont les autorisations étaient affichées dans la ls -lsortie ( lrwxrwxrwx).
Ray Burgemeestre

@muru Je créais une image Docker (buildserver) qui utilise une clé ssh pour accéder à toutes sortes de serveurs. Je ne veux pas mettre la clé privée à l'intérieur pour différentes raisons (c'est-à-dire si je veux l'héberger sur le docker hub). J'ai donc créé un lien symbolique et l'ai fait pointer vers un volume qui n'est monté qu'une fois l'image exécutée. Bien, à bien y penser, j'aurais aussi pu changer l'emplacement clé en utilisant .ssh/config:)
Ray Burgemeestre

Réponses:


18

Pas possible. Il n'y a aucun moyen puisque les autorisations sur un lien symbolique n'ont aucun sens (un lien symbolique n'est pas un fichier; il pointe uniquement vers un fichier). Cependant, la façon de le faire avec Linux est via ACL .

les liens symboliques sont expliqués comme ...

Les valeurs des bits du mode fichier pour le lien symbolique créé ne sont pas spécifiées. Toutes les interfaces spécifiées par POSIX.1-2008 doivent se comporter comme si le contenu des liens symboliques pouvait toujours être lu, sauf que la valeur des bits du mode fichier renvoyée dans le champ st_mode de la structure statistique n'est pas spécifiée.


La différence est ici: chmod et chmod ... c'est BSD contre Linux.


Je ne sais pas si c'est important mais concernant SSH: il utilise stat (2) , pas lstat (2) pour obtenir les permissions.

  • stat () stats le fichier pointé par path et remplit buf.
  • lstat () est identique à stat (), sauf que si path est un lien symbolique, alors le lien lui-même est stat-ed, pas le fichier auquel il se réfère.

2
La possibilité de définir des autorisations sur les liens symboliques n'est pas spécifiée, même dans la dernière version, c'est une extension BSD.
Random832

1
@ Random832 hmm qui pourrait être plus précis oui. J'ai lu ce morceau aujourd'hui sur SO mais je n'ai pas vérifié ceci: D
Rinzwind

4
fchmodatSoit dit en passant, POSIX spécifie la fonction, qui peut être utilisée pour changer le mode des liens symboliques (fonctionnalité facultative - les systèmes qui ne le prennent pas en charge, y compris Linux, renvoient l'erreur EOPNOTSUPP), mais rien dans la chmodcommande pour l'utiliser. Seul -Rest défini dans POSIX.
Random832

2
Les autorisations de lien symbolique n'ont aucun sens sous Linux . Sur les systèmes où vous pouvez les modifier (avec lchmod(2)ou fchmodat(2)...), ils ont une signification (autoriser / refuser readlink()(lire) ou résoudre le chemin à travers eux (exécuter)). Les autorisations d'écriture ne le sont généralement pas, car vous ne pouvez pas modifier la cible d'un lien symbolique.
Stéphane Chazelas

Unix serait en désaccord avec vous sur le fait qu'un "lien symbolique n'est pas un fichier". Un lien symbolique est un fichier spécial .
Hobbs

9

Tu ne peux pas. L' chmodappel système sous-jacent ne le prend tout simplement pas en charge sous Linux, et d'ailleurs, Linux ne se soucie pas non plus des autorisations du lien. De man chmod:

chmod never changes the permissions of symbolic links; the chmod system
call cannot change their permissions.  This is not a problem since  the
permissions  of  symbolic  links  are  never  used.   However, for each
symbolic link listed on the command line, chmod changes the permissions
of  the  pointed-to  file.   In  contrast, chmod ignores symbolic links
encountered during recursive directory traversals.

En ce qui concerne les liens durs ou les montages de liaison, les autorisations de la source sont utilisées, donc aucune des trois façons standard de refléter le contenu d'un fichier ailleurs ne peut vous y aider.


Cette réponse était également très claire pour moi, désolé, je n'ai pu en accepter qu'une comme réponse!
Ray Burgemeestre
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.