SUID y SGID en Linux explicados con ejemplos
On octubre 1, 2021 by adminImagina una situación en la que tienes un script o archivo ejecutable que siempre necesita ser ejecutado por un usuario en particular, simplemente porque ese usuario tiene los derechos de acceso adecuados para las acciones realizadas por el script. También estás dispuesto a que otros usuarios sean capaces de ejecutar ese script, pero en última instancia que necesita ser ejecutado como el usuario original del script (ya que ese usuario sólo tiene los conjuntos de permisos necesarios para las acciones realizadas).
Por defecto las aplicaciones y programas de Linux se ejecutan con los mismos permisos exactos del usuario que lo ejecuta. Debido a esta razón, necesitamos una buena solución para la situación antes mencionada (es decir, todos los usuarios deben ser capaces de ejecutar un programa propiedad de un usuario en particular como si el propietario mismo lo ejecutara).
Aquí es donde SUID entra en escena. SUID no es más que un bit de permiso especial disponible en Linux, que logra esto con mucha facilidad.
Si usted es el propietario de un archivo ejecutable, con la ayuda del conjunto de permisos SUID, otros usuarios ejecutarán el ejecutable con su permiso y no el de ellos.
SUID se utiliza normalmente en Linux, para proporcionar privilegios elevados temporalmente durante la ejecución. Esta elevación de privilegios no es permanente en absoluto. Es una elevación temporal sólo cuando el programa/script se está ejecutando.
Ejemplos de archivos ejecutables en Linux que tienen el bit de permiso SUID establecido
Entendamos esto considerando un ejemplo. De la lista anterior de ejecutables, /usr/bin/passwd es algo que debería ser ejecutable por todos los usuarios del sistema (esto es porque todos los usuarios deberían poder cambiar su propia contraseña). Si no sabes cómo funcionan las contraseñas en linux, te recomiendo que leas el siguiente artículo.
Lee: Cómo funcionan las contraseñas en Linux
Actualizar la contraseña de un usuario requiere que éste edite el archivo /etc/passwd, /etc/shadow en linux. Sin embargo, esto sólo se permite para el usuario root. Esta es la razón por la que se aplica el bit SUID en el archivo /usr/bin/passwd. Como root es el dueño de ese archivo, y el SUID está establecido en ese archivo, cualquier usuario que ejecute el comando /usr/bin/passwd lo ejecutará como usuario root. Veamos esto prácticamente.
Abajo se muestra el comando passwd disparado por el usuario llamado sarath. Veamos si ese proceso de comando passwd se está ejecutando como usuario root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Abramos otra terminal, y disparamos ps aux commad y vemos si el proceso de comando passwd se está ejecutando con el usuario root. Esto se puede hacer como se muestra a continuación.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Puedes ver claramente que el proceso del comando passwd se está ejecutando con el usuario root (visible desde el primer campo de la salida anterior). Al igual que el comando passwd, cualquier comando de la lista de archivos aplicados SUID mostrada anteriormente, siempre se ejecutará con el permiso del propietario del archivo, independientemente del usuario que lo ejecute.
También observe el hecho de que incluso el comando ping es SUID (Vea la lista inicial dada arriba), esto es porque la ejecución de PING requiere varias operaciones de red, que sólo pueden ser ejecutadas por root.
¿Cómo configurar SUID en Linux?
Configurar SUID en sus archivos/script requeridos está a un solo comando CHMOD.
$ chmod u+s /path/to/file/or/executable
Reemplace «/ruta/al/archivo/or/ejecutable», en el comando anterior, con la ruta absoluta del script en el que necesita el bit SUID. Esto se puede lograr utilizando el método numérico de chmod también.
$ chmod 4755 /path/to/file/or/executable
El primer «4» en «4755» indica SUID. Otro ejemplo de método numérico se muestra a continuación.
$ chmod 4750 /path/to/file/or/executable
Básicamente, en el método numérico, simplemente preagregar 4 a los otros conjuntos de permisos que se necesita en ese archivo.
¿Cómo verificar si el SUID se aplica en un archivo o no?
Puede verificar si el bit SUID se aplica en un archivo o no utilizando el comando ls como se muestra a continuación.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
El comando ls -l debería mostrarle si el SUID está aplicado o no. Simplemente mire el primer campo de la salida de ls -l. La s en -rwsr-xr-x indica el bit SUID. En algunos casos verá una S mayúscula en lugar de la s minúscula que vimos anteriormente. La S mayúscula indica que no hay permiso de ejecución aplicado a ese archivo/script.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Puede ver claramente en la salida anterior que, al eliminar el permiso de ejecución del archivo /usr/bin/passwd, la salida de ls -l se convirtió en una S mayúscula.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
¿Cómo encontrar todos los archivos, que tiene el bit SUID habilitado en linux?
Puede utilizar el siguiente comando find para buscar todos los archivos en el sistema que tiene el bit SUID habilitado. Si eres nuevo en el comando find, te recomiendo que leas el siguiente artículo.
Lee: Comando Find en Linux con ejemplos
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Sustituir la primera / en el comando anterior con la ubicación requerida para encontrar todos los archivos SUID en esa ubicación. Por ejemplo, para encontrar todos los archivos con SUID dentro de /usr/bin, ejecute el siguiente comando.
Por favor, recuerde el hecho de que el bit SUID es ignorado en los directorios en Linux.
SGID es muy similar a SUID. La única diferencia es que el script/archivo que tenga configurado SGID, se ejecutará con el mismo permiso del propietario del grupo.
Si se configura el SGID en los directorios, todos los archivos o directorios creados dentro de ese directorio serán propiedad del mismo grupo común (dueño del grupo del directorio donde se configura el SGID).
Ejemplos de archivos SGID en linux
¿Cómo configurar el SGID en Linux?
De forma similar al SUID, el SGID se puede configurar utilizando el comando chmod como se muestra a continuación.
root@localhost:~# chmod g+s /path/to/file
Sustituya «/ruta/al/archivo», en el comando anterior, por la ruta absoluta del script en el que necesita el bit SGID. Esto se puede lograr mediante el método numérico de chmod también (se muestra a continuación).
root@localhost:~# chmod 2755 /path/to/file
¿Cómo verificar si SGID se aplica en un archivo o script?
De manera similar a SUID, puede ejecutar fácilmente el comando ls -l en un archivo/directorio para encontrar si SGID está habilitado o no. El siguiente ejemplo muestra lo mismo.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
La parte de la s pequeña del primer campo en la salida de about (-rwxr-sr-x) indica el bit SGID. Al igual que el SUID, si no se ha aplicado el permiso de ejecución en el grupo, será la S mayúscula en lugar de la minúscula, como se muestra a continuación.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
Y habilitando el permiso de ejecución en el grupo, hará que sea la s minúscula (se muestra a continuación.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Deja una respuesta