Cambiar los permisos de un enlace simbólico sin modificar el recurso enlazado

En Tutoriales y Guías por

Vamos a situarnos en un dispositivo con sistema operativo Linux y nos pondremos delante de una sesión de terminal para aprender algo importante sobre los enlaces simbólicos y como cambiar sus permisos. Concretamente, en esta guía aprenderemos a cambiar los permisos de un enlace simbólico pero sin modificar los permisos del recurso al que enlaza.

Cambiar los permisos de un enlace simbólico sin modificar el recurso enlazado

Para el cambio de permisos a través de la consola, en Linux tenemos el comando chmod, pero también hablaremos del comando chown que nos permite cambiar el propietario y grupo de los archivos.

El inconveniente de cambiar los permisos de un enlace simbólico en Linux, es que también se cambian los permisos del recurso enlazado por el enlace simbólico. Por ejemplo, cuando instalamos un servidor Apache, en la carpeta sites-enabled se almacenan los sitios web activos creando enlaces simbólicos hacia los archivos de configuración correspondientes, que se encuentran en la carpeta sites-available.

¿Qué es un enlace simbólico en entornos Linux?

Un enlace simbólico en entornos Linux también es conocido por el nombre de «soft link» y no es más que un archivo especial, cuya función es enlazar a otro recurso. Lo podemos asemejar con lo que llamamos accesos directos en el sistema operativo Windows.

Los enlaces simbólicos, pueden apuntar tanto a otro archivo, como a una carpeta, un recurso de red, etc. Estos enlaces simbólicos, al ser simples archivos, también se ven afectados por el sistema de permisos Linux, de ahí que hay que tener ciertas precauciones a la hora de usar comandos como chmod o chown.

Cómo cambiar los permisos de un enlace simbólico sin modificar los permisos del recurso de destino del enlace.

Para poder explicar correctamente este apartado, vamos a suponer que tenemos un enlace simbólico llamado ejemplosim que apunta al archivo /home/zeokat/ejemplo.txt.

enlace simbólico ejemplo linux

Si quiero cambiar los permisos de enlace simbólico ejemplosim con el comando chmod, pero sin modificar los permisos del archivo de destino, el comando a ejecutar es el siguiente:
chmod -h 644 ejemplosim

Una vez ejecutado este comando, veremos que se han cambiado los permisos del enlace simbólico pero no los del recurso al que apunta.

El mismo modificador -h, lo podemos usar con el comando chown de la siguiente manera:
chown -h www-data:www-data ejemplosim

enlace simbólico linux chown

Vemos que esto es algo sencillo, pero en muchas ocasiones puede comprometer la seguridad del sistema. Hay que prestar especial atención cuando cambiamos permisos de forma recursiva en diferentes directorios, ya que podemos pasar por alto algún enlace simbólico que termine cambiando los permisos del recurso de destino de forma no deseada.

Consideraciones importantes a tener en cuenta.

El modificador -h de chmod no es soportado en todos los sistemas operativos Linux. Por ejemplo en FreeBSD si es soportado, mientras que en Ubuntu no. En cambio, el comando chown si soporta este modificador en la mayoría de sistemas.

Cuando un sistema Linux no soporta el modificador -h con chmod, es porque no soporta el cambio de permisos en enlaces simbólicos. Por lo tanto, si cambiamos los permisos al enlace simbólico, sólo se cambiarán en el recurso enlazado. Como esto puede ser un problema, en estos sistemas, cuando se aplica chmod de forma recursiva, se ignoran los enlaces simbólicos.

Extraido del texto original de las páginas de ayuda man de Linux:

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.