Conoce la Estructura de Permisos de Linux al Detalle

Unix, al igual que Linux, nació como un sistema multiusuario, concebido teniendo en mente que el sistema sería utilizado por múltiples usuarios. Seguro que muchas veces has oído hablar del famoso esquema o estructura de permisos de Linux, y de que es uno de los pilares sobre el que descansa la seguridad del sistema.

En este post te intentare explicar todo lo que se respecto al tema, con el máximo grado de detalle que pueda, pero con palabras simples para que pueda ser perfectamente comprensible para cualquier persona que tenga las ganar de conocerlo, así que, sin más entretenimiento, te dejo con el índice del post para que tu mismo te organices. Espero que lo disfrutes y nos vemos en los comentarios;)

Eso es lo que verás en este post:

  1. Como funcionan los permisos en Linux
  2. Estructura de usuarios y grupos
  3. Tipos de permisos
  4. Como se representan los permisos
  5. Como ver o conocer los permisos de un archivo o directorio

Como Funcionan los Permisos en Linux

Los permisos en Linux funcionan según el mismo esquema que en Unix. Básicamente se aplican sobre archivos y sobre directorios, van asociados a usuarios o grupos de usuarios, y pueden ser de lectura, de escritura o de ejecución.

Dicho de otro modo, todos los archivos y directorios en Linux tienen asociado un grupo de permisos que debe definir las posibilidades de lectura, escritura y ejecución que se aplican al usuario propietario del archivo, al grupo de usuarios al que pertenece, y al resto del mundo.

Estructura de Usuarios y Grupos en Linux

Usuarios

Linux es un sistema multiusuario en el que conviven simultáneamente diferentes usuarios desempeñando roles muy diversos. Cada usuario se identifica por un User ID o UID. A continuación tienes explicado de un modo sencillo los principales usuarios que podemos encontrar en Linux:

  • Root o superusuario. Por un lado tenemos al usuario root o superusuario (UID = 0), que es el único que tiene permisos sobre todo el sistema, y el responsable de las tareas de administración del sistema, lates como la gestión y creación de usuario, la instalación y desinstalación de software, etc. Para cualquier acción que necesite permisos de superusuario, el sistema requerirá las credenciales de root.
  • Usuarios de sistema. Aparte, están los que podríamos denominar usuarios de sistema o usuarios especiales. Son usuarios que van vinculados a ciertos servicios, y que pueden asumir ciertos permisos relativos a este servicio. Se crean automáticamente en la instalación del sistema operativo o con la instalación de ciertas aplicaciones, como es el caso del antivirus ClamAV. Algunos ejemplos de estos usuarios son bin, mail, apache, clamav, pulseavahisyslog, colord, etc., pero realmente hay muchos más en cualquier instalación estándar.
  • Usuarios estándar. Por último tenemos a las cuentas de usuarios individuales y pueden haber tantos como se requiera. Cada cuenta de usuario estándar posee su directorio personal dentro de la /home, en donde quedan almacenados todos sus archivos personales, además de las preferencias de usuario de varias aplicaciones, archivos temporales, etc.

Usuario Root

Todos los usuarios en Linux suelen estar contenidos en el archivo /etc/passwd. Puedes visualizar el contenido del archivo con el comando que tienes a continuación (como ves, para visualizar el archivo necesitas permisos de superusuario).

$ sudo cat /etc/passwd

Grupos

Para simplificar la gestión de permisos entre tantos usuarios, Linux agrupa todos los usuarios dentro de grupos. De este modo, a la hora de especificar ciertos permisos sobre un conjunto de usuarios, se pueden establecer los permisos directamente sobre el grupo. Cada grupo se identifica por un Group ID o GUID.

Cada usuario pertenece por defecto a un grupo con el mismo nombre, que se conoce como grupo principal de usuario o grupo primario de usuario. Además, un mismo usuario puede estar dentro de otros grupos, que serían los grupos secundarios.

Y de forma similar a los usuarios, los grupos en Linux quedan registrados en el archivo /etc/group, y puedes visualizar su contenido con el siguiente comando:

$ sudo cat /etc/group

Todos y cada uno de los archivos en Linux son propiedad de un usuario y de un grupo, y sobre cada archivo recaen unos permisos relativos al usuario, al grupo, y al resto de usuarios o de grupos. Y con esto enlazamos directamente con las siguientes lineas…

Tipos de Permisos

Usuario, Grupo y Otros

De entrada, en cualquier fichero o carpeta hay tres tipos o niveles de permisos, los que se aplican al propietario del archivo o carpeta, los que se aplican a todos los usuarios del grupo al que pertenece el propietario, y los que se aplican a todos los demás. A continuación tienes explicado con más detalle en que consiste cada uno de ellos.

  • Permisos del Usuario: El primer nivel de permisos es el de usuario, y básicamente representa los permisos que se aplican al usuario o propietario de un archivo.
  • Permisos del Grupo: El segundo nivel de permisos es el del grupo, que en definitiva define los permisos de lectura, escritura y ejecución que se aplican solo a aquellos usuarios que pertenecen al mismo grupo de usuarios que el propietario del archivo.
  • Permisos de Otros: Por último, otros es el ultimo ámbito sobre el que se pueden establecer los permisos de archivos y carpetas, y representan la capacidad de lectura, escritura y ejecución por parte del resto de usuarios que no entran en ninguno de los niveles anteriores.

Permisos de Lectura, Escritura y Ejecución

Como hemos dicho, sobre un archivo podemos definir básicamente tres tipos de permisos, los de lectura, los de escritura y los de ejecución. Los permisos funcionan sobre archivos o sobre directorios, pero existen algunas diferencias de matiz que verás si sigues leyendo.

  • Lectura: Los permisos de lectura representan la posibilidad de poder acceder a un archivo o carpeta y leer su contenido. En un directorio hacen referencia a la posibilidad visualizar su contenido.
  • Escritura: Los permisos de escritura definen la posibilidad de acceder y modificar el contenido de un archivo, o en caso de un directorio, la capacidad de borrar o añadir archivos dentro de él.
  • Ejecución: Los permisos de ejecución indican la posibilidad de ejecutar un determinado archivo en el sistema. Estos son los más críticos, y solo deberían conceder sobre aquellos usuarios y archivos para los que sea absolutamente indispensable. En el caso de un directorio, los permisos de ejecución representan la capacidad de entrar dentro del directorio.

Permisos Especiales

Adicionalmente, existen tres bits de permisos especiales denominados setuid, setgid y sticky bit. Básicamente tratan de determinar ciertos tipos de permisos que no quedan cubiertos con los anteriores. De forma resumida, podríamos decir que:

  • El bit setuid se puede asignar a archivos ejecutables, y en este caso determina la posibilidad de que el proceso vinculado al archivo pueda adquirir los permisos del propietario del archivo en el momento de su ejecución. Normalmente se utiliza para que un usuario normal pueda ejecutar un cierto archivo ejecutable con permisos elevados. Un claro ejemplo lo tenemos en su.
  • El bit setgid, de forma análoga al caso de setuid, lo que determina es que el proceso se pueda ejecutar con los permisos del grupo al que pertenece el archivo.
  • Por último, sticky bit se puede asociar a directorios en los que tienen acceso varios usuarios con permisos de escritura, y básicamente permite evitar que un usuario pueda borrar archivos de otro usuario dentro del mismo directorio.

Tienes información más detallada sobre estos tres tipos de permisos especiales en el blog de rm-rf.

Visto ya todo esto, creo que es el momento de pasar a ver con más detalle como se representan los permisos, y como puedes conocer los permisos asignados a un determinado archivo y directorio. Ahora empieza lo más interesante…

Como se representan los Permisos

Representación Estándar

Los permisos asociados a un archivo o carpeta se suelen representar en línea. El primer carácter se reserva para los denominados permisos especiales (básicamente hace referencia al tipo de archivo), seguido de tres caracteres para los permisos del propietario del archivo, otros tres para los permisos del grupo, y los tres últimos para los permisos del resto de usuarios.

Representacion de Permisos en Linux

El primer bit indica el tipo de archivo. Generalmente pueden darse los siguientes casos:

-  |  Se trata de un archivo regular
d  |  Se trata de un directorio
l  |  Se trata de un enlace simbólico
b  |  Se trata de un archivo especial de bloques

El resto de los 9 bits que vienen a continuación representan los permisos del usuario propietario del archivo o directorio, los permisos del grupo al que pertenece este usuario, y los permisos del resto de usuarios. Aquí tienes el significado:

r  |  Se dan permisos de lectura
w  |  Se dan permisos de escritura
x  |  Se dan permisos de ejecución
-  |  No se da el permiso de lectura, escritura o ejecución

Representación Numérica o en Octal

También hay la representación numérica de permisos, que parte básicamente de la representación anterior, pero sustituye cada grupo rwx por un número. Ese número se obtiene al sustituir cada tipo de permiso (r, w x) por un 1 o 0, dependiendo de si se da o no el permiso).

Representación Numérica de Permisos en Linux

Al final, del número en binario obtenido, el número decimal que le corresponde es el que se utiliza para representar las diferentes combinaciones rwx en cada grupo o nivel de permisos (usuario, grupo y otros).

r--  |  100  |  4
-w-  |  010  |  2
--x  |  001  |  1

Teniendo en cuenta esto, por cada nivel de permisos (usuario, grupo u otros) podemos sacar un número que es la suma de todos los anteriores, dependiendo de los permisos que se tengan. Con esto podemos llegar a tener las siguientes combinaciones:

rwx  |  111  |  7
rw-  |  110  |  6
r-x  |  101  |  5
r--  |  100  |  4
-wx  |  011  |  3
-w-  |  010  |  2
--x  |  001  |  1
---  |  000  |  0

Teniendo esto en cuenta, la representación es igual que en el caso anterior, pero para cada uno de los niveles de permisos (usuario, grupo y otros) se sustituye la combinación de los tres tipos de permisos por un numero del 1 al 7, en función de las combinaciones anteriores.

Si sigues leyendo, un poco más adelante tienes varios ejemplos de archivos y directorios, con sus permisos en formato estándar, y su equivalente en forma octal.

Como puedo ver los Permisos de un Archivo o Directorio

Hay varias formas de conocer los permisos de un archivo o directorio de tu sistema. Una opción es hacerlo desde el mismo navegador de archivos y visualizándolo de forma gráfica, pero es un poco lento y a la práctica resulta mucho más cómodo y rápido hacerlo desde la línea de comandos.

Ver los Permisos desde el Explorador de Archivos

Para ver los permisos de un archivo o directorio desde el mismo navegador de archivos, en Ubuntu o derivados es tan sencillo como hacer clic derecho sobre un archivo en cuestión, luego hacer clic en Propiedades, y dirigirte en la pestaña Permisos.

Archivos de texto dentro de /home/user

En esta imagen tienes el aspecto que tienen los permisos por defecto de cualquier archivo de texto (en este caso un archivo .odt) ubicado dentro de la carpeta Documentos del directorio de usuario.

Como puedes ver, el propietario y el grupo tienen permisos de lectura y escritura sobre el archivo, mientras que el resto de usuarios solo tienen permiso de lectura.

Visualizar Permisos de un Archivo

Directorios dentro de /home/user/

Ahora si te parece podemos visualizar los permisos de los directorios que se encuentran dentro de /home.

Como puedes ver en la captura de abajo (para este ejemplo he cogido la carpeta Documentos), el usuario tiene permisos para crear y eliminar archivos (serían permisos de lectura y escritura), mientras que el grupo y el resto de usuarios tienen solo permisos para acceder a archivos (permisos de lectura).

Visualizar Permisos de un Directorio

Como visualizarlos desde la línea de comandos con #ls -l

Otra forma mucho más visual y precisa de ver los permisos que tienen los archivos contenidos en un directorio es a través de la línea de comandos, con el comando #ls -l, que te listará todos los archivos y directorios dentro del directorio de trabajo actual, junto con los permisos asociados.

$ ls -l

Archivos dentro de /home/user

Si aplicas el comando estando en un directorio cualquiera que contenga archivos, verás un listado con todos los archivos y directorios, junto con sus permisos. Si te parece vamos a analizar los permisos del archivo de texto que hemos analizado antes:

$ ls -l Documentos

-rw-rw-r-- 1 user group 27057 jun 28 12:37 nombrearchivo

He puesto el mismo archivo del ejemplo de antes, para ver la equivalencia. Como ves, el usuario y el grupo tienen permisos de lectura y escritura, y el resto de usuarios permisos de solo lectura. Igual que antes pero de un modo más preciso. El equivalente en formato numérico seria:

664

Directorios dentro de  /home/user/

Ahora, al igua que hemos hecho desde el explorador de archivos, podemos analizar los permisos del directorio Documentos. Para ello, estando en la terminal y aplicando #ls -l obtendrás un listado con todos los directorios dentro de /home, incluida la carpeta Documentos.

$ ls -l
drwxr-xr-x 2 user group 4096 jun 28 12:42 Descargas
drwxr-xr-x 2 user group 4096 jun 28 12:42 Documentos
drwxr-xr-x 2 user group 4096 jun 28 12:42 Escritorio
drwxr-xr-x 2 user group 4096 jun 28 12:42 Imágenes
drwxr-xr-x 2 user group 4096 jun 28 12:42 Música
drwxr-xr-x 2 user group 4096 jun 28 12:42 Plantillas
drwxr-xr-x 2 user group 4096 jun 28 12:42 Público
drwxr-xr-x 2 user group 4096 jun 28 12:42 Vídeos

Realmente verás un listado con todo el contenido que tengas dentro de la /home, pero solo he puesto el los directorios para compararlo con el resultado obtenido a través del navegador de archivos en el caso de Documentos.

Como ves, el usuario tiene permisos de lectura, escritura y ejecución, mientras que el grupo y el resto de usuarios solo lectura y ejecución. El equivalente en forma numérica es:

755

Recuerda que los permisos de ejecución sobre un directorio representan la capacidad de poder entrar dentro del directorio. En este caso, todos los usuarios pueden entrar dentro los directorios de la /home de un usuario concreto y ver su contenido, pero solo el usuario propietario puede modificar el contenido de dentro.

Si quieres más ejemplos

Si tienes curiosidad, con el comando #ls -l ya has visto que puedes visualizar los permisos de todos los archivos y directorios que se te ocurren.

Eso sí, la posibilidad de ejecutar este comando sobre un directorio lo determina el hecho que tenga permisos de lectura, por lo que en algunos casos quizá no obtengas resultado y debas hacerlo a través de sudo utilizando los permisos de root.

Para Terminar…

Si has llegado hasta aquí habrás visto que se trata más de un post divulgativo que de una guía de como hacer algo. Para esto segundo, ya tienes esta guía que te enlazo en la que verás de forma práctica todo lo que necesitas saber a la hora de editar usuarios, grupos y permisos en Linux.

Sin más, espero que hayas disfrutado del post, y que te haya parecido útil el contenido y ya sabes que para cualquier duda o sugerencia tienes los comments debajo. Hasta pronto;)

Anuncios

10 comentarios en “Conoce la Estructura de Permisos de Linux al Detalle

  1. Pingback: Bitacoras.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s