Cómo usar SUID, SGID y Sticky Bits en Linux

Contenidos

Una ventana de terminal en un sistema Linux.

SUID, SGID y Sticky Bits son poderosos permisos especiales que puede determinar para ejecutables y directorios en Linux. Compartiremos los beneficios, y los posibles inconvenientes, de usarlos.

Ya están en uso

La integración de la seguridad en un sistema operativo multiusuario presenta varios dilemas. Tome el concepto (aparentemente) básico de contraseñas, a modo de ejemplo. Todos deben almacenarse para que cada vez que alguien inicie sesión, el sistema pueda comparar la contraseña que escribe con la copia almacenada. Por lo visto, como las contraseñas son las claves del reino, deben protegerse.

En Linux, las contraseñas almacenadas están protegidas de dos formas: están cifradas y solo alguien con root Los privilegios pueden ingresar al archivo que contiene las contraseñas. Eso puede sonar bien, pero presenta un dilema: si solo las personas con root los privilegios pueden ingresar a contraseñas almacenadas, ¿cómo cambian sus contraseñas aquellos que no disponen ese acceso?

Elevando su estatus

Por lo general, los comandos y programas de Linux se ejecutan con el mismo conjunto de permisos que la persona que inicia el programa. Cuando root ejecuta el passwd mando para cambiar una contraseña, corre con rootpermisos de. Eso significa el passwd El comando puede ingresar libremente a las contraseñas almacenadas en el /etc/shadow expediente.

Lo que sería ideal es un esquema en el que cualquiera en el sistema pudiera iniciar el passwd programa, pero tenga el passwd programa retener rootprivilegios elevados. Esto permitiría a cualquiera cambiar su propia contraseña.

El escenario anterior es exactamente lo que el bit Determinar ID de usuario (SUID) lo hace. Eso ejecuta programas y comandos con los permisos del propietario del archivo, en lugar de los permisos de la persona que inicia el programa.

Estás elevando el estado del programa

A pesar de esto, existe otro dilema. Debe evitarse que la persona se entrometa en la contraseña de otra persona. Linux incorpora el SUID esquema que le posibilita ejecutar aplicaciones con un conjunto de permisos prestados temporalmente, pero eso es solo la mitad de la historia de seguridad.

El mecanismo de control que evita que alguien trabaje con la contraseña de otra persona está incluido en el passwd programa, no el sistema operativo y el esquema SUID.

Los programas que se ejecutan con privilegios elevados pueden presentar riesgos de seguridad si no se crean con una mentalidad de «seguridad por diseño». Eso significa que la seguridad es lo primero que considera y posteriormente se basa en eso. No escriba su programa y posteriormente intente darle una capa de seguridad.

La mayor ventaja del software open source es puedes mirar el código fuente tú mismo o refiérase a revisiones de pares confiables. En el código fuente del passwd programa, hay comprobaciones, para que pueda ver si la persona que ejecuta el programa es root. Se posibilitan diferentes capacidades si alguien root (o alguien usando sudo).

Esta es el código que detecta si alguien está root.

Un fragmento de código fuente de "passwd.c"

El siguiente es un ejemplo en el que se tiene en cuenta. Debido a que root puede cambiar cualquier contraseña, el programa no tiene que preocuparse por las comprobaciones que regularmente realiza para ver qué contraseñas tiene permiso para cambiar la persona. Entonces, para root, eso omite esas comprobaciones y sale de la función de comprobación.

Un fragmento de código fuente de "passwd.c".

Con los comandos y utilidades principales de Linux, puede estar seguro de que disponen la seguridad incorporada y que el código se ha revisado a menudo. De todos modos, siempre existe la amenaza de exploits aún desconocidos. A pesar de esto, los parches o actualizaciones aparecen rápidamente para contrarrestar cualquier vulnerabilidad recientemente identificada.

Es software de terceros, especialmente cualquiera que no sea open source, debe tener mucho cuidado al utilizar SUID con. No estamos diciendo que no lo haga, pero, si lo hace, debe asegurarse de que no exponga su sistema a riesgos. No desea elevar los privilegios de un programa que no va a autogobernarse correctamente a sí mismo y a la persona que lo ejecuta.

Comandos de Linux que usan SUID

Los siguientes son algunos de los comandos de Linux que usan el bit SUID para otorgar privilegios elevados al comando cuando lo ejecuta un usuario normal:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Tenga en cuenta que los nombres de archivo están resaltados en rojo, lo que indica que el bit SUID está establecido.

Los permisos sobre un archivo o directorio suelen estar representados por tres grupos de tres caracteres: rwx. Estos significan lectura, escritura y ejecución. Si las cartas están presentes, se ha concedido ese permiso. Si un guión (-) en lugar de una carta está presente, a pesar de esto, ese permiso no se ha dado.

Hay tres grupos de estos permisos (de izquierda a derecha): para el propietario del archivo, para los miembros del grupo del archivo y para otros. Cuando el SUID bit se establece en un archivo, una «s» representa el permiso de ejecución del propietario.

Si el SUID bit se establece en un archivo que no tiene capacidades ejecutables, una «S» mayúscula lo indica.

Veremos un ejemplo. Usuario regular dave escribe el passwd mando:

passwd

los passwd indicaciones de comando dave por su nueva contraseña. Podemos utilizar el ps mando para ver los detalles de los procesos en ejecución.

Usaremos ps con grep en una ventana de terminal diferente y busca el passwd procedimiento. Además usaremos el -e (cada procedimiento) y -f (formato completo) opciones con ps.

Escribimos el siguiente comando:

ps -e -f | grep passwd

Se informan dos líneas, la segunda de las cuales es la grep procedimiento buscando comandos con la cadena «passwd» en ellos. A pesar de esto, es la primera línea que nos interesa, debido a que es la de la passwd procedimiento dave lanzado.

Podemos ver el passwd El procedimiento se ejecuta igual que si root lo había lanzado.

Configuración del bit SUID

Es fácil cambiar el SUID poco con chmod. los u+s modo simbólico establece el SUID poco y el u-s modo simbólico borra el SUID poco.

Para ilustrar algunos de los conceptos del bit SUID, creamos un pequeño programa llamado htg. Está en el directorio raíz del dave usuario, y no tiene el SUID bit establecido. Cuando se ejecuta, muestra los ID de usuario reales y efectivos (UID).

El Real UID pertenece a la persona que lanzó el programa. El ID efectivo es la cuenta con la que se comporta el programa como si lo hubiera iniciado.

Escribimos lo siguiente:

ls -lh htg
./htg

Cuando ejecutamos la copia local del programa, vemos que los ID reales y efectivos están configurados en dave. Entonces, se está comportando como debería hacerlo un programa normal.

Copiemos en el /usr/local/bin directorio para que otros puedan usarlo.

Escribimos lo siguiente, usando chmod para configurar el SUID bit, y posteriormente verifique que se haya configurado:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Entonces, el programa se copia y se establece el bit SUID. Lo ejecutaremos de nuevo, pero esta vez ejecutaremos la copia en el /usr/local/bin carpeta:

htg

Aún cuando dave iniciado el programa, la ID efectiva se establece en el root usuario. Por lo tanto si mary inicia el programa, ocurre lo mismo, como se muestra a continuación:

htg

La identificación real es mary, y el ID efectivo es root. El programa se ejecuta con los permisos del usuario root.

RELACIONADO: Cómo utilizar el comando chmod en Linux

El bit SGID

El ID de grupo establecido (SGID) bit es muy semejante al SUID poco. Cuando el SGID bit se establece en un archivo ejecutable, el grupo efectivo se establece en el grupo del archivo. El procedimiento se ejecuta con los permisos de los miembros del grupo del archivo, en lugar de los permisos de la persona que lo inició.

Ajustamos nuestro htg programa para que además muestre el grupo efectivo. Cambiaremos el grupo del htg programa para ser usuario marygrupo predeterminado, mary. Además usaremos el u-s y g+s modos simbólicos con chown para quitar el SUID bit y determinar el SGID.

Para hacerlo, escribimos lo siguiente:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Puedes ver el SGID bit denotado por la «s» en los permisos de grupo. Al mismo tiempo, tenga en cuenta que el grupo está configurado para mary y el nombre del archivo ahora está resaltado en amarillo.

Antes de ejecutar el programa, establezcamos qué grupos dave y mary pertenece a. Usaremos el id comando con el -G opción (grupos), para imprimir todos los ID de grupo. Posteriormente, ejecutaremos el htg programa como dave.

Escribimos los siguientes comandos:

id -G dave
id -G mary
htg

El ID del grupo predeterminado para mary es 1001, y el grupo efectivo de la htg programa es 1001. Entonces, aún cuando fue lanzado por dave, se ejecuta con los permisos de los miembros en el mary grupo. Es lo mismo que si dave se había unido al mary grupo.

Apliquemos el SGID bit a un directorio. Primero, crearemos un directorio llamado «trabajo» y posteriormente cambiaremos su grupo a «geek». Posteriormente configuraremos el SGID bit en el directorio.

Cuando usamos ls para chequear la configuración del directorio, además usaremos el -d (directorio) para que veamos los detalles del directorio, no su contenido.

Escribimos los siguientes comandos:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

los SGID Se establecen el bit y el grupo «geek». Esto afectará a los ítems creados dentro de la work directorio.

Escribimos lo siguiente para ingresar al work directorio, cree un directorio llamado «demo» y verifique sus propiedades:

cd work
mkdir demo
ls -lh -d demo

los SGID bit y el grupo «geek» se aplican automáticamente al directorio «demo».

Escribamos lo siguiente para crear un archivo con la touch comando y verifique sus propiedades:

touch useful.sh
ls -lh useful.sh

El grupo del nuevo archivo se establece automáticamente en «geek».

RELACIONADO: Cómo utilizar el comando chown en Linux

El pedacito pegajoso

El bit pegajoso recibe su nombre de su objetivo histórico. Cuando se configura en un ejecutable, indica al sistema operativo que las partes de texto del ejecutable deben mantenerse en intercambio, lo que agiliza su reutilización. En Linux, el bit pegajoso solo afecta a un directorio; configurarlo en un archivo no tendría sentido.

Cuando establece el bit de pegamento en un directorio, las personas solo pueden quitar archivos que les pertenecen dentro de ese directorio. No pueden quitar archivos que pertenecen a otra persona, sin importar qué combinación de permisos de archivo se establezca en los archivos.

Esto le posibilita crear un directorio que todos, y los procesos que inician, pueden utilizar como almacenamiento de archivos compartidos. Los archivos están protegidos debido a que, nuevamente, nadie puede eliminar los archivos de otra persona.

Creemos un directorio llamado «compartido». Usaremos el o+t modo simbólico con chmod para determinar el bit adhesivo en ese directorio. Posteriormente veremos los permisos en ese directorio, así como los /tmp y /var/tmp directorios.

Escribimos los siguientes comandos:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Si se establece el bit adhesivo, el bit ejecutable del «otro» conjunto de permisos de archivo se establece en «t». El nombre del archivo además se resalta en azul.

los /tmp y /var/tmp Las carpetas son dos ejemplos de directorios que disponen todos los permisos de archivo establecidos para el propietario, el grupo y otros (es por ello que están resaltados en verde). Se usan como ubicaciones compartidas para archivos temporales.

Con esos permisos, cualquiera debería, teóricamente, poder hacer cualquier cosa. A pesar de esto, el bit pegajoso los anula y nadie puede quitar un archivo que no le pertenece.

Recordatorios

La próxima es una lista de verificación rápida de lo que cubrimos previamente para referencia futura:

  • SUID solo funciona en archivos.
  • Puede aplicar SGID a directorios y archivos.
  • Solo puede aplicar el bit adhesivo a los directorios.
  • Si el «s«,»g«, o «tLos indicadores ”aparecen en mayúsculas, el bit ejecutable (x) no se ha configurado.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.