LINUX

Sticky Bit, SUID y SGID en Linux con ejemplos

Stickybit con ejemplos

En este artículo, explicamos los permisos especiales que funcionan en archivos y directorios denominados Sticky bit, SUID y SGID.

El bit adhesivo solo funciona en directorios. Si un usuario desea crear o eliminar un archivo / directorio en algún directorio, necesita permiso de escritura en ese directorio. El permiso de escritura en un directorio le otorga al usuario el privilegio de crear un archivo, así como el privilegio de eliminarlo.

El directorio / tmp es el directorio de archivos / directorios temporales. Este directorio tiene todos los derechos en los tres niveles porque todos los usuarios necesitan crear / eliminar sus archivos temporales. Pero como los usuarios tienen permiso de escritura en este directorio, pueden eliminar cualquier archivo en este directorio. Los permisos de ese archivo no tienen ningún efecto sobre la eliminación.

Pero con el bit adhesivo establecido en un directorio, cualquiera puede crear un archivo / directorio en él, pero solo puede eliminar sus propios archivos. Los archivos que pertenecen a otros usuarios no se pueden eliminar.

Sticky bit: cómo ver y configurar

Podrías notar t etiqueta agregada al directorio / tmp y significa que el bit está establecido para este directorio.

$ ls -ld /tmp/
drwxrwxrwt 4 root root 4096 Aug 19 02:29 /tmp/

En Linux, el bit pegajoso se puede configurar con el comando chmod. Puede usar la etiqueta + t para agregar y -t etiqueta para eliminar el bit pegajoso.

$ chmod o-t dir1
$ ls -l
total 8
drwxr-xr-x 2 root root 4096 Aug 19 03:08 dir1
$ chmod o+t dir1
$ ls -l
total 8
drwxr-xr-t 2 root root 4096 Aug 19 03:08 dir1

Alternativamente,

$ chmod 1777 dir1/
$ ls -l
total 8
drwxrwxrwt 2 root root 4096 Aug 19 03:08 dir1

Nota: En el sistema operativo con sabor a Unix, el bit pegajoso tiene un propósito diferente, pero no lo discutiremos aquí.

¿Qué es SUID Bit y cómo configurarlo?

Cuando se ejecuta un archivo ejecutable, se ejecuta bajo la propiedad del usuario que lo ha ejecutado. Significa que cuando el usuario estudiante ejecuta el comando ls, el proceso correspondiente se ejecutará bajo la propiedad del estudiante. El bit SUID, también conocido como bit Set User ID, sobrescribe este comportamiento. Si el bit SUID se establece en un programa, ese programa se ejecutará como propietario de ese archivo, independientemente de quién lo esté ejecutando.

El comando passwd en Linux tiene el bit SUID establecido.

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 23420 Aug 3 2010 /usr/bin/passwd

Esto se puede ver en el tercer campo de permisos. La ‘s’ en lugar de la ‘x’ indica que el bit SUID está establecido. Con el bit SUID establecido, cuando un usuario normal (digamos estudiante) ejecuta el comando passwd, el comando se ejecuta con la propiedad de ‘root’, y no como estudiante, porque root es el propietario de este archivo. Este comportamiento es necesario porque las contraseñas se almacenan en el archivo / etc / shadow, que no tiene permiso de grupo u otro nivel.

$ ls -l /etc/shadow
-r-------- 1 root root 1027 Jul 13 21:56 /etc/shadow

Debe comprender que no todos los usuarios pueden tener permiso de lectura o escritura en este archivo por razones de seguridad; de lo contrario, leerán / cambiarán las contraseñas de otros usuarios. Entonces, esto causa el problema de que si los usuarios no tienen permiso en este archivo, ¿cómo cambiarán sus propias contraseñas? Entonces, el bit SUID resuelve el problema. El comando passwd tiene el bit SUID establecido, por lo que cuando los usuarios normales ejecutan este comando, lo ejecutan con la propiedad de root, es decir, el propietario del comando passwd.

Cómo configurar y desarmar el bit SUID

Debe tenerse en cuenta que el bit SUID solo funciona en archivos. Para establecer el bit SUID en un archivo, use el comando chmod de la siguiente manera

$ ls -l
total 8
-rwxr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ chmod u+s hello.sh
$ ls -l
total 8
-rwsr--r-- 1 root root 104 Aug 19 01:26 hello.sh

También se puede utilizar el método numérico para cambiar los permisos. Suponga que si los permisos normales para un archivo son 744, entonces con el bit SUID establecido, estos se convertirán en 4744. El bit SUID tiene valor 4.

$ ls -l
total 8
-rwxr--r-- 1 root root 104 Aug 19 01:26 hello.sh
$ chmod 4744 hello.sh
$ ls -l
total 8
-rwsr--r-- 1 root root 104 Aug 19 01:26 hello.sh

Cómo funciona SGID Bit en archivos y directorios

A diferencia del bit SUID, el bit SGID funciona tanto en archivos como en directorios, pero tiene un significado diferente en ambos casos.

En archivos:

Para el archivo, tiene un significado similar al bit SUID, es decir, cuando cualquier usuario ejecuta un archivo con el bit SGID establecido en él, siempre se ejecutará con la propiedad de grupo de ese archivo, independientemente de quién lo esté ejecutando. Por ejemplo, el archivo / sbin / netreport tiene un conjunto de bits SGID, que se puede ver en la ‘s’ en lugar de en la ‘x’ en los permisos de grupo.

$ ls -l /sbin/netreport
-rwxr-sr-x 1 root root 6020 Oct 13 2010 /sbin/netreport

Este archivo tiene propiedad de grupo del grupo raíz. Entonces, cuando un usuario (por ejemplo, un estudiante) lo ejecuta, el proceso correspondiente no tendrá la propiedad del grupo del estudiante, sino del grupo raíz.

En directorios:

Ahora hablemos de SGID en directorios. SGID en directorios se utiliza para crear directorios colaborativos. Para comprender el bit SGID en los directorios, considere el siguiente escenario:

Supongamos que tres usuarios, jack, jones y jenny están trabajando juntos en algún proyecto. Todos ellos pertenecen a un grupo llamado javaproject. Para el transcurso del proyecto, deben compartir todos los archivos relacionados con el proyecto. Todos ellos deben poder ver el expediente de los demás. Esto se puede hacer simplemente proporcionando permiso de lectura a nivel de grupo. Además, suponga que el directorio utilizado para el proyecto es «/ javaproject».

Aquí surge el problema de que cuando se crea un archivo, pertenece al grupo principal del usuario que creó el archivo. Entonces, cuando diferentes usuarios crean sus archivos en este directorio, esos archivos no tendrán propiedad grupal del grupo javaproject.

Lo que hacemos para nuestro problema es que configuramos el grupo del directorio / javaproject como grupo javaproject, y establecemos el bit SGID establecido en él. Cuando el bit SGID se establece en un directorio, todos los archivos y directorios creados dentro de él tienen la propiedad de grupo del grupo asociado con ese directorio. Significa que después de establecer el bit SGID en el directorio / javaproject, todos los archivos y directorios que se creen en este directorio tendrán la propiedad de grupo del grupo «javaproject». Además, este comportamiento es recursivo, es decir, los directorios creados en este directorio también tendrán el bit SGID establecido. Los permisos para el nuevo directorio también serán los mismos que los del directorio / javaproject.

El bit SGID se puede configurar con el comando chmod de la siguiente manera:

$ ls -ld /javaproject
drwxrwxr-x 2 root javaproject 4096 Aug 19 02:33 /javaproject
$ chmod g+s /javaproject
$ ls -ld /javaproject
drwxrwsr-x 2 root javaproject 4096 Aug 19 02:33 /javaproject

Ahora, cuando el usuario de jones crea un archivo en este directorio, se crea bajo la propiedad del grupo de javaproject group.

$ touch /javaproject/jones1.txt
$ mkdir /javaproject/jones1dir
$ ls -l /javaproject/
total 12
drwxrwsr-x 2 jones javaproject 4096 Aug 19 02:38 jones1dir
-rw-rw-r-- 1 jones javaproject 0 Aug 19 02:37 jones1.txt

El valor numérico correspondiente al bit SGID es 2. Por lo tanto, para agregar el bit SGID numéricamente, use el siguiente comando:

$ ls -ld /shared/
drwxrwxr-x 2 root adm 4096 Aug 19 02:47 /shared/
$ chmod 2775 /shared/
$ ls -ld /shared/
drwxrwsr-x 2 root adm 4096 Aug 19 02:47 /shared/

Gracias por leer este artículo y consultar página wiki sticky bit también.

Leer también:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar