¿Cuál es el equivalente de Ubuntu del indicador OSX `chmod -h`?

13

En OSX puedo configurar los permisos del enlace simbólico en sí mismo (en lugar de lo que apunta a usar -h). Desde la página del manual:

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

En Ubuntu 14.04 trato de configurar los permisos de un enlace simbólico, pero solo se establece en el objetivo del enlace simbólico.

Es con respecto a un enlace simbólico a partir /home/nagios/.ssh/someprivatekeyde /somewhere/else/privatekey, por lo que los permisos son importantes para ssh. ¿Cómo puedo conseguir esto?

Ray Burgemeestre
fuente
Entonces, ¿por qué necesitas este enlace simbólico?
muru
1
¿está seguro de que ssh se preocupa por los permisos en el enlace simbólico y no por los permisos en / en algún lugar / otro / privatekey?
Random832
@ Random832 Sí, es posible que haya sacado una conclusión incorrecta, también estaba un poco confundido acerca de cómo se mostraban los permisos en la ls -lsalida ( lrwxrwxrwx).
Ray Burgemeestre
@muru Estaba creando una imagen Docker (buildserver) que usa una clave ssh para acceder a todo tipo de servidores. No quiero poner la clave privada dentro por diferentes razones (es decir, si quiero alojarla en el Docker Hub). Así que lo vinculé y lo hice apuntar a un volumen que solo se monta una vez que se ejecuta la imagen. Aunque, ahora que lo pienso, también podría haber cambiado la ubicación clave usando .ssh/config:)
Ray Burgemeestre

Respuestas:

18

Imposible. No hay forma ya que los permisos en un enlace simbólico no tienen sentido (un enlace simbólico no es un archivo; solo apunta a un archivo). Sin embargo, la forma de hacer esto con Linux es a través de ACL .

el enlace simbólico se explica como ...

Los valores de los bits de modo de archivo para el enlace simbólico creado no están especificados. Todas las interfaces especificadas por POSIX.


La diferencia está aquí: chmod y chmod ... es BSD versus Linux.


No estoy seguro si es importante, pero con respecto a SSH: utiliza stat (2) , no lstat (2) para obtener los permisos.

  • stat () estadísticas del archivo señalado por ruta y rellena buf.
  • lstat () es idéntico a stat (), excepto que si la ruta es un enlace simbólico, entonces el enlace en sí es stat-ed, no el archivo al que hace referencia.
Rinzwind
fuente
2
La capacidad de establecer permisos en enlaces simbólicos no se especifica incluso en la última versión, es una extensión BSD.
Random832
1
@ Random832 hmm eso podría ser más preciso sí. Leí esa parte hoy en SO, pero no hice ninguna comprobación al respecto: D
Rinzwind
44
Por cierto, POSIX especifica la fchmodatfunción, que se puede usar para cambiar el modo de los enlaces simbólicos (característica opcional: sistemas que no lo admiten, incluido Linux, devuelve el error EOPNOTSUPP), pero nada en el chmodcomando para usar esto. Solo -Rse define en POSIX.
Random832
2
Los permisos de enlaces simbólicos no tienen sentido en Linux . En los sistemas donde puede cambiarlos (con lchmod(2)o fchmodat(2)...), tienen un significado (permitir / negar readlink()(leer) o resolución de ruta a través de ellos (ejecutar)). Los permisos de escritura generalmente no lo hacen, ya que no puede cambiar el objetivo de un enlace simbólico.
Stéphane Chazelas
Unix no estaría de acuerdo con usted en que "un enlace simbólico no es un archivo". Un enlace simbólico es un archivo especial .
hobbs
9

No puedes La chmodllamada del sistema subyacente simplemente no es compatible con esto en Linux, y para el caso, Linux tampoco se preocupa por los permisos del enlace. 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 cuanto a los enlaces duros o los montajes de enlace, se utilizan los permisos de la fuente, por lo que ninguna de las tres formas estándar de reflejar el contenido de un archivo en otro lugar puede ayudarlo en esto.

muru
fuente
Esta respuesta también fue muy clara para mí, lo siento, ¡solo podía aceptar una como respuesta!
Ray Burgemeestre