Compártelo:
Reading Time: 8 minutes
4.7/5 - (6 votos)

Hola que tal amigas y amigos seguidores de este blog. El tema de la seguridad en linux es un tema bastante popular porque gracias a esto nos podemos sentir tranquilos cuando se trata de que nuestros archivos y carpetas sean amenazados. La seguridad a través de los permisos en linux es fácilmente gestionada si tenemos claro el cómo funcionan y sobretodo, el cómo se pueden asignar a nuestros archivos y carpetas de usuario.

En linux cuando se crea un usuario del sistema los permisos por defecto son 755 para la carpeta de trabajo del usuario. Explicaré más adelante que significa este número. Si no sabes cómo se hace la gestión de usuarios puedes leer el artículo “Gestión de usuarios en linux” el cual lo escribí el pasado 08 de Julio de 2022.

Estructura de los permisos en linux

En linux una carpeta o un archivo tiene asignado tres categorías diferentes para asociar sus permisos: Propietario, Grupo, Otros. En la siguiente imagen te muestro esta situación para las carpetas de usuario de mi sistema Fedora.

Area de permisos en la terminal

El recuadro rojo de la imagen anterior muestra el área de los permisos de cada carpeta de usuario. Las primeras 3 letras de izquierda a derecha representan los permisos del Propietario de la carpeta. Las siguientes 3 letras o caracteres los permisos del Grupo al que pertenece el usuario. Y las últimas 3 letras o caracteres los permisos de Otros usuarios del sistema. Como puedes ver, para cada categoría se necesitan 3 caracteres para la asignación de permisos. ¿Qué significan tales 3 caracteres?, el primero se requiere para permiso de lectura (read en inglés) por eso la letra “r” en algunos casos. El segundo caracter significa permiso de escritura (write en inglés) y por eso la letra “w”. Y el tercero representa permiso de ejecución (execute en inglés) por eso la letra “x” para algunos casos.

Asignar permisos en linux

Para asignar permisos en linux se usa el comando “chmod” seguido de la sintáxis deseada. A continuación pongo un ejemplo de la carpeta “nubes” cuyo Propietario es “angel” y pertenece al grupo “yocupicio”. Observa que la carpeta “nubes” tiene los siguientes permisos:

drwxr-xr-x

la primera letra “d” significa que se trata de un directorio. Después, la rwx significa que el Propietario tiene permisos de lectura (r), escritura (w) y ejecución (x) sobre la carpeta “nubes”. Los siguientes 3 caracteres son:

r-x

esto significa que los usuarios asignados al Grupo de la carpeta tienen permisos solo de lectura (r) y ejecución (x). Los últimos 3 caracteres son:

r-x

lo cual significa que los Otros usuarios que no son el Propietario ni usuarios del Grupo de la carpeta, solo tienen permisos de lectura (r) y ejecución (x).

Cambiaremos los permisos de la carpeta “nubes” quitándoles acceso a los usuarios del Grupo y a los Otros usuarios usando el comando “chmod”.

sudo chmod g-rx -Rvf nubes/

ejecutamos el comando y nos pedirá la contraseña de usuario.

Ejecución de chmod para gestionar los permisos en linux
Ejecución de chmod

Los modificadores -Rvf significan: R es que a cada archivo y carpeta dentro de la carpeta “nubes” le aplicará tales permisos (R, Recursive en inglés); v es que durante el proceso de cambio de permisos el sistema vaya mostrando los resultados (v, verbose en inglés); y f es forzar a todos los archivos y carpetas a fijarles tales permisos (f, force en inglés).

Los permisos en linux y el grupo sudoers

No debemos olvidar que nuestro usuario debe estar en el Grupo de “sudoers” para que pueda ejecutar órdenes administrativas como los que haremos en este tutorial. Al ejecutar el comando “ls -las” vemos los nuevos permisos de la carpeta “nubes”. La siguiente imagen muestra tales permisos.

La carpeta “nubes” con los permisos cambiados del Grupo

Ahora ejecutaremos “chmod” para quitar los permisos de lectura y ejecución a Otros de la carpeta “nubes”.

sudo chmod o-rx -Rvf nubes/

la siguiente imagen muestra el resultado del comando “ls -las” para verificar que la carpeta “nubes” ya solo tienen permisos del Propietario y que para las últimos 6 caracteres no hay permisos de ningún tipo.

Los permisos en linux nulos de la carpeta "nubes"
Carpeta “nubes” con permisos nulos de Grupo y Otros

Si quisieramos que el Propietario solo tenga permisos de lectura entonces ejecutamos el siguiente comando.

sudo chmod u-wx -Rvf nubes/

y al ejecutar el comando “ls -las” la terminal muestra el siguiente resultado.

Los permisos en linux con solo de lectura en la carpeta "nubes"
Carpeta “nubes” con solo permiso de lectura

Si tratara de entrar a la carperta “nubes” desde terminal o desde un explorador de archivos como Dolphin obtendría los siguientes resultados.

Los permisos en linux te pueden denegar el acceso a una carpeta
Permisos denegado

en el caso de Dolphin tenemos lo siguiente.

Los permisos en linux y la denegación de acceso en Dolphin
Acceso denegado en Dolphin

Como puedes ver, no se permite el acceso a la carpeta “nubes” por que para el Propietario que es “angel” solo se puede leer.

Los permisos en linux dan acceso

Si ahora asignamos permiso de ejecución para el Propietario a la carpeta “nubes”.

sudo chmod u+x -Rvf nubes/
Los permisos en linux para ejecución en la carpeta "nubes"
Permisos de ejecución a “nubes” para el Propietario

Y si deseamos acceder a tal carpeta desde el shell así como desde Dolphin tenemos los siguientes resultados.

Los permisos en linux dan acceso a "nubes"
Acceso permitido a “nubes”

y en el caso de Dolphin,

Los permisos en linux dan acceso a "nubes" desde Dolphin.
Acceso permitido a “nubes” desde Dolphin

Como te habrás dado cuenta ya podemos acceder a la carpeta “nubes” por todos los medios. Sin embargo, no olvides que el usuario “angel” desde el que estoy trabajando solo tiene permisos de lectura y ejecución (r-x). No puedo borrar archivos ni modificarlos ni tampoco guardar nuevos archivos en la carpeta “nubes”. Los permisos en linux nos dan una gran seguridad si los comprendemos al máximo.

El uso de numeración octal

Los permisos en linux se pueden gestionar también con numeración octal. Para entender esto tenemos la siguiente asignación numérica octal a cada permiso:

  • lectura = 4
  • escritura = 2
  • ejecución = 1

de esta manera, si una categoría, por ejemplo el Propietario solo tiene permiso de lectura entonces a su triada de valores de los permisos la calcularíamos de la siguiente manera:

4 + 0 + 0 = 4

si el Propietario tiene permisos de lectura y ejecución el cálculo sería,

4 + 0 + 1 = 5

La siguiente tabla muestra esta estructura numérica octal con la que también se pueden gestionar los permisos en linux.

rwxrwxoctalpermisos totales del usuario
0000sin permisos
x0011solo permiso de ejecución
w0202solo permiso de escritura
wx0213solo permisos de escritura y ejecución
r4004solo permiso de lectura
rx4015solo permisos de lectura y ejecución
rw4206solo permisos de lectura y escritura
rwx4217todos los permisos

Con lo que expliqué anteriormente solo asignaba permisos a una categoría a la vez ya sea Propietario, Grupo, Otros. Ahora, con la numeración octal podemos asignar de manera más dinámica a las tres categorías a la vez con una orden. Veamos cómo asignaría permisos de lectura, escritura y ejecución al usuario “angel” para la carpeta “nubes”. Además a la categoría Grupos y Otros los dejaré sin permisos.

sudo chmod 700 -Rvf nubes/

el equivalente anterior sería de la siguiente manera,

sudo chmod u+rwx,g-rwx,o-rwx -Rvf nubes/
Usando numeración octal en chmod
Usando numeración octal en chmod

con el comando “ls -las” vemos que ya el Propietario tiene los permisos rwx en la siguiente imagen.

Lectura, Escritura y Ejecución para el usuario "angel" en la carpeta "nubes"
Lectura, Escritura y Ejecución para el usuario “angel” en la carpeta “nubes”

Verificación de permisos en Dolphin

Podemos agregar las columnas de “Permisos”, “Propietario” y “Grupo de usuarios” en Dolphin para poder verificar los permisos asignados a las carpetas dentro de “nubes”. Para lograr que te salga el menú contextual que se ve en la imagen solo debes dar clic en la barra de “Nombre – Tamaño – Modificado”. Mira la siguiente imagen para la verificación.

Verificando permisos en Dolphin
Verificando permisos en Dolphin

Permisos especiales en linux

Dentro de los permisos en linux existen una categoría de permisos especiales para archivos y carpetas que pueden dar funcionalidad especial en linux. Tales permisos especiales son:

  • Sticky bit (bit de permanencia)
  • SetGID (set group information)
  • SetUID (set user information)

Los valores en numeración octal asignados a cada uno de los permisos especiales son:

  • Sticky bit = 1000
  • SetGID = 2000
  • SetUID = 4000

Por lo tanto, para asignar los permisos especiales en vez de solo usar 3 dígitos octales deberemos de usar 4 dígitos. A los permisos en triada que usamos en los temas anteriores solo le debemos sumar el valor de la tabla anterior al permiso seleccionado.

Sticky bit

Es un permiso especial que se asigna a la triada de permisos de Otros y para que se pueda activar es necesario ejecutar el siguiente comando.

sudo chmod 1777 -Rvf nubes/
Sticky bit aplicado
Sticky bit aplicado

Si suprimimos el permiso de ejecución a Otros veremos que en vez de Sticky bit con “t” al final obtendremos una “T”. Mira la siguiente imagen.

sudo chmod 1776 -Rvf nubes/
Sticky bit sin permiso de ejecución
Sticky bit sin permiso de ejecución

La función básica de Sticky bit es que cuando se comparten carpetas entre usuarios en general puedan crear carpetas y archivos de tal manera que otros usuarios no puedan borrarlos aunque si puedan verlos y leerlos.

SetGUID

Este permiso especial se usa para la categoría de la triada de Grupo dentro de los permisos. Para asignarlo a un archivo o una carpeta se le suma 2000 al valor octal de permisos. Por ejemplo en la carpeta “nubes” queremos asignar el permiso SetGUID ejecutamos el siguiente comando.

sudo chmod 2777 -Rvf nubes/
El grupo tiene SetGUID activo
El grupo tiene SetGUID activo

Si le quitamos permiso de ejecución al grupo de la carpeta “nubes” obtenemos la siguiente situación.

sudo chmod 2767 -Rvf nubes/
Aparece S en vez de s
Aparece S en vez de s

SetUID

Este permiso especial de linux es para el usuario propietario de las carpetas o archivos. A la representación octal se le suma 4000 para asignar este permiso. Por ejemplo, para asignar este permiso a la carpeta “nubes” ejecutamos el siguiente comando.

sudo chmod 4777 -Rvf nubes/
Asignación SetUID a la carpeta "nubes"
Asignación SetUID a la carpeta “nubes”

Si le quitamos el permiso de ejecución a la carpeta “nubes” aparecerá una S en vez de s en la triada del propietario.

sudo chmod 4677 -Rvf nubes/
Sin permisos de ejecución para el propietario
Sin permisos de ejecución para el propietario

Este permiso hace que el usuario que ejecute el archivo o carpeta con este permiso especial obtenga los mismos privilegios que el propietario. Por eso se debe tener mucho cuidado cuando o para qué se asigna SetUID ya que puede traer un gran problema de seguridad del sistema porque puede causar una escalada de privilegios en el sistema.

¡Eso es todo amigos!