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.
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.
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.
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.
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.
Si tratara de entrar a la carperta “nubes” desde terminal o desde un explorador de archivos como Dolphin obtendría los siguientes resultados.
en el caso de Dolphin tenemos lo siguiente.
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/
Y si deseamos acceder a tal carpeta desde el shell así como desde Dolphin tenemos los siguientes resultados.
y en el caso de 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.
r | w | x | r | w | x | octal | permisos totales del usuario |
– | – | – | 0 | 0 | 0 | 0 | sin permisos |
– | – | x | 0 | 0 | 1 | 1 | solo permiso de ejecución |
– | w | – | 0 | 2 | 0 | 2 | solo permiso de escritura |
– | w | x | 0 | 2 | 1 | 3 | solo permisos de escritura y ejecución |
r | – | – | 4 | 0 | 0 | 4 | solo permiso de lectura |
r | – | x | 4 | 0 | 1 | 5 | solo permisos de lectura y ejecución |
r | w | – | 4 | 2 | 0 | 6 | solo permisos de lectura y escritura |
r | w | x | 4 | 2 | 1 | 7 | todos 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/
con el comando “ls -las” vemos que ya el Propietario tiene los permisos rwx en la siguiente imagen.
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.
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/
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/
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/
Si le quitamos permiso de ejecución al grupo de la carpeta “nubes” obtenemos la siguiente situación.
sudo chmod 2767 -Rvf nubes/
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/
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/
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!