Al utilizar las herramientas chown y chmod para cambiar los atributos de un archivo o directorio, los enlaces simbólicos son procesados por el sistema de archivos como cualquier otro acceso. Por ende terminamos cambiando permisos sobre el target o destino del enlace simbólico. Pero ¿qué pasa si necesitamos cambiar permisos del enlace simbólico propiamente dicho? La respuesta está en las manpages.

En los sistemas FreeBSD, tanto chown como chmod incluyen la opción -h, la cual posee la siguiente funcionalidad:

De la página de manual de chown:

     -h      If the file is a symbolic link, change the user ID and/or the
             group ID of the link itself.

De la página de manual de chmod:

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

Esto es, si el archivo es un link simbólico, cambiar el ownership/modo del link en sí mismo más que del archivo al cual apunta.

Veamos un ejemplo. Tenemos un enlace simbólico, link, que apunta a un archivo, archivito:

root@hal9000:/tmp # ll link archivito
-rw-r--r--  1 root  staff  0 Nov 23 08:02 archivito
lrwxr-xr-x  1 root  wheel  9 Nov 23 08:03 link@ -> archivito

El enlace es propiedad de root:wheel y el target de root:staff.

Supongamos que deseamos que el enlace sea propiedad de emi:wheel:

root@hal9000:/tmp # chown emi:wheel link
root@hal9000:/tmp # ll link archivito
-rw-r--r--  1 emi   wheel  0 Nov 23 08:02 archivito
lrwxr-xr-x  1 root  wheel  9 Nov 23 08:03 link@ -> archivito

Al ejecutar chown sobre el enlace, se cambian los permisos del target en lugar del enlace en sí. Para cambiar los permisos del enlace es necesario agregar la opción -h.

Primero restauro los permisos originales sobre el target:

root@hal9000:/tmp # chown root:staff archivito
root@hal9000:/tmp # ll link archivito
-rw-r--r--  1 root  staff  0 Nov 23 08:02 archivito
lrwxr-xr-x  1 root  wheel  9 Nov 23 08:03 link@ -> archivito

Luego cambiar los permisos sobre el enlace (lo cual era nuestra intención original) utilizando -h:

root@hal9000:/tmp # chown -h emi:wheel link
root@hal9000:/tmp # ll link archivito
-rw-r--r--  1 root  staff  0 Nov 23 08:02 archivito
lrwxr-xr-x  1 emi   wheel  9 Nov 23 08:03 link@ -> archivito

Se observa que con la opción -h se cambian los permisos del enlace pero no del destino.

Lo mismo ocurre para el comando chmod.

En los sistemas GNU/Linux este comportamiento difiere, ya que la opción -h sólo es válida para chown. Esto es, cambiar el usuario o grupo dueños del archivo o directorio. Sin embargo no es posible cambiar los permisos en un enlace simbólico, ya que siempre se computan los del target.


Tal vez pueda interesarte


Compartí este artículo