La gestión de permisos básicos en Linux es muy sencillo, pero en algunas ocasiones necesitamos establecer los permisos especiales en Linux: SUID, SGID y Sticky Bit. Desde ejecutar un fichero con los permisos del propietario hasta restringir el borrado de ficheros en un directorio, vamos a ver los detalles.

Permisos básicos en Linux

Cualquier usuario o administrador de Linux necesita entender cómo funcionan los permisos de ficheros en Linux. Necesitamos ejecutar scripts, modificar ficheros y ejecutar programas, pero ¿qué hacer cuando obtenemos como respuesta un Permiso denegado?¿cuál es la causa y cómo solucionar este problema?

Vamos a ver unas explicación sencilla de cómo calcular los permisos básicos en Linux, y detalles de cómo configurar los permisos especiales. Para todo ello, vamos a hacer uso del comando chmod. Tenemos dos modos de asignar permisos a ficheros y directorios:

Método simbólico para asignar permisos en Linux

La sintaxis para asignar permisos de esta forma se basa lo siguiente:

$ chmod WhoWhatWhich fichero | directorio

Y eso significa lo siguiente:

  • Who: a quién afecta el cambio de permisos: u (propietario), g (grupo), o (resto), a (todos)
  • What: representa la acción que se quiere realizar: + (añadir), (quitar), = (dejar igual)
  • Which: indica el nivel de acceso: r (lectura), w (escritura), x (ejecución)

Por ejemplo, si queremos añadir permiso de escritura sobre el fichero prueba.txt para el propietario y el grupo, habría que usar este comando:

$ chmod ug+r prueba.txt

Método numérico para asignar permisos en Linux

Este método es el más habitual, y probablemente el más recomendado para saber cómo funciona exactamente la asignación de permisos. La sintaxis sería algo así:

$ chmod NNN fichero | directorio

Donde cada letra N indica el nivel de accesos. Y este nivel de acceso se aplica igualmente a tres grupos de usuarios (propietario, grupo, resto), y cada número representa los permisos de esos usuarios en ese orden. Los permisos de cada uno se identifican de la siguiente forma:

  • 0: indica ningún permiso asignado
  • 1: indica permiso de ejecución
  • 2: indica permiso de escritura
  • 4: indica permiso de lectura

Por tanto, este ejemplo asignaría permiso de lectura y escritura para el propietario (rw- o 4+2=6), permiso de lectura y ejecución para el grupo (r-w o 4+1=5), y ningún permiso para el resto ( o 0):

$ chmod 650 prueba.txt

Esto resultaría por tanto en los siguientes permisos asignados al fichero prueba.txt:

-rw-r-x--- 1 vadegaming vadegaming 0 Feb 20 22:22 prueba.txt

Ahora que hemos dado un breve repaso por los permisos básicos, vamos a ver cómo asignar los permisos especiales en Linux.

Permisos especiales en Linux

Los permisos especiales añaden un cuarto nivel de permisos, adicional a los del propietario, grupo y el resto. Hay una opción de permisos adicionales para cada nivel de acceso indicado anteriormente, vamos a ver cada uno de ellos por separado.

SUID: Permiso especial de propietario

El permiso SUID añade un permiso adicional de ejecución para los usuarios, en base al propietario de ese fichero ejecutable. Lo que permite es que la ejecución del fichero pueda realizarse por cualquier usuario, y se ejecute como si lo hubiera ejecutado el propietario, con todos sus permisos.

El ejemplo claro es el comando /usr/bin/passwd, cuyo propietario es el usuario root, pero cualquier usuario puede ejecutarlo para cambiar su contraseña. Esto se hace así, porque el comando necesita modificar el fichero /etc/passwd y /etc/shadow, y estos ficheros solo pueden ser modificados por el usuario root.

Permisos comando /usr/bin/passwd

Como ves en la parte de permisos del propietario aparece rws, esta s que reemplaza a la x es la que indica que está asignado el permiso SUID. Y para asignar este permiso lo puedes hacer de estas dos formas:

$ chmod u+s ejecutable.sh
$ chmod 4744 ejecutable.sh

Ese 4 que aparece delante de los permisos básicos (propietario, grupo y otros) es el que establece el permiso SUID sobre ese fichero.

SGID: Permiso especial para directorios

El permiso especial SGID añade un permiso adicional a directorios, que consiste en que todos los ficheros y subdirectorios creados dentro de él, heredarán el grupo del directorio con SGID, independientemente del usuario que lo cree. Ten en cuenta que el comportamiento por defecto es que un fichero o directorio creado por un usuario, establece el grupo de este usuario en ese objeto creado.

Esto es especialmente útil en carpetas de uso compartido, donde queremos que un conjunto de usuarios tenga acceso a todos los ficheros y directorios que haya dentro.

Permiso SGID en Linux

Como ves ahora los permisos del grupo pone r-s, y esa s es la que indica que el directorio cuenta con el permiso SGID. Para asignar ese permiso, puedes hacerlo también de dos formas diferentes:

$ chmod g+s test
$ chmod 2755 test

En esta ocasión, debes poner un 2 delante del grupo de permisos para establecer el permiso especial SGID, que aplica al grupo de los directorios.

Sticky Bit: Permiso especial para evitar borrado de ficheros

El último de los permisos especiales se aplica también sobre directorios, y en este caso se utiliza para evitar el borrado o renombrado de ficheros por los usuarios. Una vez establecido este permiso, solo podrán borrar ficheros de ese directorio, el dueño del fichero y el usuario root. Ten en cuenta que el comportamiento por defecto, sería que cualquier usuario con permiso de escritura en el directorio, podría borrar los ficheros que contiene.

Se usa por ejemplo sobre el directorio /tmp, donde cualquier proceso puede crear ficheros temporales, pero un usuario o proceso no podría borrar ficheros que no ha creado. Para asignar estos permisos se haría así:

$ chmod o+t test
$ chmod +t test
$ chmod 1755 test

En esta ocasión, el número 1 delante del grupo de permisos es el que indica que se quiere configurar el permiso Sticky Bit.

Y así es como se refleja este permiso, añadiendo una t en el apartado de permisos de otros, quedando como rwt:

Permiso especial Sticky Bit en Linux

Información adicional sobre permisos especiales en Linux

Aquí te indicamos algunas acciones adicionales que te pueden interesar cuando trabajas con permisos especiales.

Buscar ficheros con SUID, SGID y Sticky Bit

Si te interesa buscar los ficheros que hay en una carpeta con estos permisos especiales establecidos, puedes buscarlos así. Como ves, se indica el 1 (Sticky Bit), 2 (SGID) o 3 (SUID) al hacer la búsqueda, igual que al establecer estos permisos:

$ find . -perm /4000
$ find . -perm /2000
$ find . -perm /1000

Quitar permisos especiales en Linux

Para eliminar estos permisos especiales en ficheros o directorios, también lo puedes hacer de varias formas, esta es una de ellas correspondiente a cada permiso:

$ chmod u-s ejecutable.sh
$ chmod g-s directorio
$ chmod -t directorio

Por admin

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.