web-dev-qa-db-fra.com

Quel est l'équivalent Ubuntu de l'indicateur `chmod -h` d'OSX?

Sous OSX, je peux définir les autorisations du lien symbolique lui-même (au lieu de la chose sur laquelle il pointe en utilisant -h). De 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 ce 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, de sorte que les autorisations sont importantes pour ssh. Comment puis-je atteindre cet objectif?

13
Ray Burgemeestre

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

lien symbolique sont expliqués comme ...

Les valeurs des bits de mode de 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 de mode de fichier retournés dans le champ st_mode de la structure stat n'est pas spécifiée.


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


Pas sûr que ce soit important mais concernant SSH: il utilise stat (2) , pas lstat (2) pour obtenir les permissions.

  • stat () stats le fichier pointé par chemin et remplit buf.
  • lstat () est identique à stat (), sauf que si path est un lien symbolique, le lien lui-même est staté, pas le fichier auquel il fait référence.
18
Rinzwind

Tu ne peux pas. L'appel système sous-jacent chmod ne le prend tout simplement pas en charge. De plus, 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 physiques ou les montages de liaison, les autorisations de la source sont utilisées. Par conséquent, aucune des trois méthodes standard permettant de refléter le contenu d'un fichier ailleurs ne peut vous aider.

9
muru