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

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

→ Índice de contenidos

Ya estan en uso

La integración de la seguridad en un sistema operativo multiusuario presenta varios dilemas. Tomemos, por ejemplo, el concepto (aparentemente) básico de contraseñas. Todos deben almacenarse para que cada vez que alguien inicie sesión, el sistema pueda comparar la contraseña ingresada con la copia almacenada. Por supuesto, dado que las contraseñas son las llaves del reino, deben salvaguardarse.

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

Eleva tu estatus

Normalmente, 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 comando passwd para cambiar una contraseña, se ejecuta con rootlos permisos. Esto significa que el comando passwd puede acceder libremente a las contraseñas almacenadas en el archivo /etc/shadow.

Lo ideal sería un esquema en el que cualquiera en el sistema pueda iniciar el programa passwd, pero conservarlo. rootsus altos privilegios. Esto permitiría a cualquiera cambiar su contraseña.

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

Estás elevando el estatus del programa.

Sin embargo, hay otro dilema. Debe evitar que la persona interfiera con la contraseña de otra persona. Linux incorpora el SUID esquema que le permite ejecutar aplicaciones con un conjunto de permisos prestados temporalmente, pero eso es sólo la mitad de la historia de seguridad.

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

Los programas que se ejecutan con privilegios elevados pueden plantear riesgos de seguridad si no se crean con una mentalidad de "seguridad por diseño". Esto significa que la seguridad es lo primero que hay que considerar y luego se basa en eso. No escriba su programa y luego intente darle una mano de seguridad.

La mayor ventaja del software de código abierto es que usted mismo puede consultar el código fuente o consultar revisiones de pares confiables. En el código fuente del passwd programa, hay comprobaciones, por lo que puede ver si la persona que ejecuta el programa es root. Si alguien lo es, se permiten diferentes habilidades. root (o alguien que usa sudo).

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

A continuación se muestra un ejemplo en el que esto se tiene en cuenta. Por qué root puede cambiar cualquier contraseña, el programa no tiene que preocuparse por las comprobaciones que normalmente ejecuta para ver qué contraseñas la persona tiene permiso para cambiar. entonces para rootomite estas comprobaciones y sale de la función de verificación.

Fragmento de código fuente de passwd.c

Con los comandos y utilidades principales de Linux, puede estar seguro de que tienen seguridad incorporada y de que el código ha sido revisado muchas veces. Por supuesto, siempre existe la amenaza de exploits aún desconocidos. Sin embargo, los parches o actualizaciones aparecen rápidamente para contrarrestar cualquier vulnerabilidad recientemente identificada.

Se trata de software de terceros, especialmente los que no son de código abierto, que debes utilizar con extrema precaución. SUID con. No estamos diciendo que no lo haga, pero si lo hace, querrá asegurarse de que no exponga su sistema a riesgos. No desea elevar los privilegios de un programa que no se gobierna a sí mismo adecuadamente ni a la persona que lo ejecuta.

Comandos de Linux que usan SUID

A continuación se muestran algunos comandos de Linux que utilizan 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

Lista de comandos de Linux con el bit SUID configurado, en una ventana de terminal

Tenga en cuenta que los nombres de los archivos 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 el permiso. Si un guión (-) en lugar de una carta se indica, sin embargo, que no se concedió el permiso.

Hay tres conjuntos de estos permisos (de izquierda a derecha): los del propietario del archivo, los de los miembros del grupo del archivo y los de otros. Cuando el SUID bit está configurado en un archivo, una "s" representa el permiso de ejecución del propietario.

Si el SUID bit está configurado en un archivo que no tiene capacidades ejecutables, una "S" mayúscula lo indica.

Echemos un vistazo a un ejemplo. El usuario habitual Dave escribe el archivo. contraseña dominio:

passwd

comando passwd en una ventana de terminal

EL passwd símbolo del sistema dave para su nueva contraseña. Podemos usar el ps comando para ver detalles de los procesos en ejecución.

Usaremos ps con grepen una ventana de terminal diferente y busque el archivo passwd procesos. También usaremos las opciones -e (cada proceso) y -f (formato completo) con ps.

Escribimos el siguiente comando:

ps -e -f | grep passwd

ps-e-f |  grep passwd en una ventana de terminal

Se informan dos líneas, la segunda de las cuales es la grep proceso que busca comandos con la cadena "passwd" en ellos. Pero es la primera línea la que nos interesa, porque es la del passwd procesos dave lanzado.

Podemos ver el passwd el proceso funciona como si root lo había tirado.

Configuración del bit SUID

Es fácil cambiar el archivo. SUID un poco con chmod. EL u+s El modo simbólico establece el SUID poco y el u-s El modo simbólico elimina el archivo. SUID morder.

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

El UID real pertenece a la persona que inició el programa. El ID efectivo es la cuenta desde la que el programa se comporta como si se hubiera iniciado.

Escribimos lo siguiente:

ls -lh htg
./htg

ls -lh htg en una ventana de terminal

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

Copiémoslo en el archivo. /usr/local/bin directorio para que otros puedan usarlo.

Escribimos lo siguiente, usando chmod para establecer el SUID bit, luego 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

sudo cp htg /usr/local/bin en una ventana de terminal

Luego, se copia el programa y se establece el bit SUID. Lo ejecutaremos nuevamente, pero esta vez lo copiaremos al archivo. /usr/local/bin carpeta:

htg

El programa htg ejecutándose en una ventana de terminal

A pesar de dave iniciado el programa, el ID efectivo se establece en root usuario. Así que si mary Inicie el programa, sucede lo mismo, como se muestra a continuación:

htg

htg lanzado por el usuario mary en una ventana de terminal

La identificación real es maryy la identificación real es root. El programa se ejecuta con permisos de usuario root.

La pieza del SGID

El ID de grupo establecido (SGID) bit es muy similar a SUID morder. Cuando el SGID bit se establece en un archivo ejecutable, el grupo real se establece en el grupo del archivo. El proceso se ejecuta con los permisos de los miembros del grupo del archivo, en lugar de los permisos de la persona que lo inició.

Hemos optimizado el nuestro. htg programa para que también muestre el grupo real. Cambiaremos el grupo de htg programa a utilizar maryel grupo predeterminado de, mary. También usaremos el archivo u-s Y g+s modos simbólicos con chown para eliminar el SUID bit y establezca el SGID.

Para ello 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

sudo chown root:mary /usr/local/bin/htg en una ventana de terminal

Puedes ver el SGID bit indicado por "s" en permisos de grupo. Además, 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 la opción -G (grupos), para imprimir todos los ID de grupo. Luego ejecutaremos el archivo. htg programa como dave.

Escribimos los siguientes comandos:

id -G dave
id -G mary
htg

id -G dave en una ventana de terminal

El ID de grupo predeterminado para mary es 1001, y el grupo real de htg el programa es 1001. Entonces, aunque fue lanzado por davese está ejecutando con permisos de miembro en el archivo mary grupo. Es como dave se había unido al mary grupo.

Aplicamos el SGID bits en un directorio. Primero crearemos un directorio llamado "trabajo" y luego cambiaremos su grupo a "geek". Luego configuraremos el SGID bit en el directorio.

cuando usamos ls para verificar la configuración del directorio, también usaremos el archivo -d (directorio) para que vea 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

sudo mkdir funciona en una ventana de terminal

EL SGID bit y el grupo "geek" están configurados. Estos afectarán a todos los elementos creados dentro del archivo. work directorio.

Escribimos lo siguiente para insertar el archivo work directorio, cree un directorio llamado "demo" y verifique sus propiedades:

cd work
mkdir demo
ls -lh -d demo

El cd funciona en una ventana de terminal.

EL SGID bit y el grupo "geek" se aplican automáticamente al directorio "demo".

Escribimos lo siguiente para crear un archivo con el comando touch y comprobar sus propiedades:

touch useful.sh
ls -lh useful.sh

Toque útil.sh en una ventana de terminal

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

la pieza pegajosa

La pieza pegajosa lleva el nombre de su propósito 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 la reutilización. En Linux, el bit adhesivo sólo afecta a un directorio; configurarlo en un archivo no tendría sentido.

Cuando configura el bit adhesivo en un directorio, las personas solo pueden eliminar archivos que les pertenecen dentro de ese directorio. No pueden eliminar archivos que pertenecen a otra persona, independientemente de la combinación de permisos que haya establecido para los archivos.

Esto le permite crear un directorio que todos, y los procesos que inician, pueden usar como almacenamiento de archivos compartido. Los archivos están protegidos porque, nuevamente, nadie puede eliminar los archivos de otra persona.

Creemos un directorio llamado "compartido". Usaremos el o+t modo simbólico con chmod para configurar el bit adhesivo en ese directorio. Luego veremos los permisos en ese directorio, así como el archivo /tmp Y /var/tmp directorio.

Escribimos los siguientes comandos:

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

mkdir compartido en una ventana de terminal

Si se establece el bit adhesivo, el bit ejecutable del conjunto de permisos de "otro" archivo se establece en "t". El nombre del archivo también está resaltado en azul.

EL /tmp Y /var/tmp Las carpetas son dos ejemplos de directorios que tienen todos los permisos de archivos establecidos para propietario, grupo y otros (es por eso que están resaltados en verde). Se utilizan como ubicaciones compartidas para archivos temporales.

Con tales permisos, cualquiera debería, en teoría, poder hacer cualquier cosa. Sin embargo, el bit adhesivo los sobrescribe y nadie puede eliminar un archivo que no les pertenece.

Memorándum

La siguiente es una lista de verificación rápida de lo que hemos cubierto anteriormente para referencia futura:

  • SUID Sólo funciona con archivos.
  • Puedes aplicar SGID a directorios y archivos.
  • Sólo puedes 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.

Tenga en cuenta estos puntos y estará en el camino correcto.

Subir Change privacy settings