Linux Structure: Permisos al detalle (parte. I)

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 habéis oído hablar del famoso esquema de permisos de Linux, y de que es uno de los pilares sobre la que descansa la seguridad del sistema. En este artículo vamos a tratar de explicar al detalle como funciona.

Linux Structure - BLOG - 2

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.

Índice de Contenidos:

1-) Estructura de usuarios y grupos

2-) Como funcionan los permisos

3-) Como se representan los permisos

4-) Como conocer los permisos de los archivos y directorios

Estructura de Usuarios y Grupos en Linux

Linux Structure - BLOG - 3

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:

-) 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, tales como la gestión y creación de usuario, la instalación y desinstalación de software, etc.

-) 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, apacheclamavpulseavahisyslog, colord, etc., pero realmente hay muchos más en cualquier instalación estándar.

-) Por último tenemos a los usuarios estándar, que representan 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.

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

Linux Structure - BLOG - 4

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 usuariogrupo 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…

Permisos de Usuario, Grupo y Otros

Linux Structure - BLOG - 5

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

Linux Structure - BLOG - 6

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

Linux Structure - BLOG - 7

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.

Veamos información más detallada sobre estos tres tipos de permisos especiales:

Permisos especiales

Linux Structure - BLOG - 8

EL bit setuid es asignable a ficheros ejecutables, y permite que cuando un usuario ejecute dicho fichero, el proceso adquiera los permisos del propietario del fichero ejecutado. El ejemplo más claro de fichero ejecutable y con el bit setuid el su.

su sirve para ejecutar una shell con identificadores de grupo y de usuario distintos al nuestro, por ello ha de tener este bit y así permitir adquirir al usuario temporalmente permisos administrativos para poder hacer el cambio de usuario.

Podemos ver que el bit está asignado (s) haciendo un ls:

$ ls -l /bin/su
-rwsr-xr-x 1 root root 31012 2009-04-04 07:49 /bin/su

Para asignar este bit a un fichero:

# chmod u+s /bin/su

Y para quitarlo:

# chmod u-s /bin/su

Lógicamente, conviene utilizar este bit con extremo cuidado ya que puede provocar una escalada de privilegios en situaciones inseguras. Para que veáis un ejemplo de lo que se podría hacer.

El usuario “Jacinto” no tiene permisos para ejecutar correctamente un fdisk -l:

Jacinto@linux:~$ fdisk -l

La salida es 0, pero si asignamos el bit setuid al binario de fdisk

# ls -l /sbin/fdisk
-rwsr-xr-x 1 root root 93048 2009-02-18 20:43 /sbin/fdisk

Probamos de nuevo a ejecutar fdisk con el usuario “Jacinto” y conseguimos privilegios de root:

Jacinto@linux:~$ fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c3c51

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1        3232    25959424    7  HPFS/NTFS
/dev/sda2            3233        9683    51817657+  83  Linux
/dev/sda3            9684        9855     1381590   82  Linux swap / Solaris
/dev/sda4            9856       19457    77128065   83  Linux

Luego nos acordamos de volver a quitarlo:

# chmod u-s /sbin/fdisk

Linux Structure - BLOG - 9

Si el bit setuid permitía que el proceso adquiriera los permisos del propietario del fichero ejecutado, setgid hace lo mismo pero adquiriendo los privilegios del grupo asignado al fichero, también es asignable a directorios. Este bit entonces será muy útil cuando varios usuarios de un mismo grupo necesiten trabajar con recursos dentro de un mismo directorio.

En el siguiente ejemplo asignamos el bit setgid la carpeta /compartido, le asignamos permisos totales para el propietario y el grupo (770) y el bit segid (2):

$ mkdir compartido && chmod 2770 /compartido

Si hacemos un ls veremos el bit asignado:

$ ls -l
drwxrws--- 2 Jacinto Jacinto      4096 2011-04-24 21:27 compartido

Ahora vamos a hacer la prueba de crear un fichero dentro del directorio. Lo vamos a crear estando autenticados como root, pero al tener el bit setgid le asignará el grupo “Jacinto” en lugar de root.

$ su
# touch test
root@sistemas:/home/Jacinto/compartido# ls -l
total 0
-rw-r--r-- 1 root Jacinto 0 2011-04-24 21:28 test
# whoami
root

En lugar de modo octal podéis asignar también los permisos setgid del siguiente modo:

$ chmog g+s /compartido

Y quitarlo:

$ chmog g-s /compartido

Linux Structure - BLOG - 10

Este bit suele asignarse en directorios a los que todos los usuarios tienen acceso, y permite evitar que un usuario pueda borrar ficheros/directorios de otro usuario dentro de ese directorio, ya que todos tienen permiso de escritura. Seguro que lo estáis pensando, este bit se asigna siempre en /tmp y /var/tmp.

tmp tiene permisos 777, el bit sticky se asignaría del siguiente modo:

# chmod 1777 /tmp

También así:

chmod o+t /tmp

Y para quitarlo:

chmod o-t /tmp

Si hacemos un ls veremos la “t” asignada:

drwxrwxrwt  13 root root  4096 2011-04-24 20:55 tmp

Esta es una visión general de estos tres bits especiales asignables a ficheros ejecutables y directorios en Unix/Linux.

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…

Salu2


TonyHAT - 134

Anuncios

2 comentarios en “Linux Structure: Permisos al detalle (parte. I)”

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

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