1

Bits SUID, SGID y de persitencia (sticky bit)
Aún hay otro tipo de permisos que hay que considerar. Se trata del bit de
permisos SUID (Set User ID), el bit de permisos SGID (Set Group ID) y el bit de
permisos de persistencia (sticky bit). Para entender los dos primeros el SUID y
el SGID veamos los permisos para un comando de uso común a todos los
usuarios, que es el comando passwd, que como se sabe sirve para cambiar la
contraseña del usuario, y puede ser invocado por cualquier usuario para
cambiar su propia contraseña, si vemos sus permisos observaremos un nuevo
tipo de permiso:
#> ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 feb 12 2006 /usr/bin/passwd
SUID
En vez de la 'x' en el grupo del usuario encontramos ahora una 's' (suid). passwd
es un comando propiedad de root, pero sin embargo debe de poder ser
ejecutado por otros usuarios, no solo por root. Es aqui donde interviene el bit
SUID, donde al activarlo obliga al archivo ejecutable binario a ejecutarse como
si lo hubiera lanzado el usuario propietario y no realmente quien lo lanzó o
ejecutó. Es decir, es poder invocar un comando propiedad de otro usuario
(generalmente de root) como si uno fuera el propietario.
SGID
El bit SGID funciona exactamente igual que el anterior solo que aplica al grupo
del archivo. Es decir si el usuario pertenece al grupo 'ventas' y existe un binario
llamado 'reporte' que su grupo es 'ventas' y tiene el bit SGID activado,
entonces el usuario que pertenezca al grupo 'ventas' podrá ejecutarlo. También
se muestra como una 's' en vez del bit 'x' en los permisos del grupo.
STICKY BIT (Bit de persistencia)
Este bit se aplica para directorios como en el caso de /tmp y se indica con una
't':
#> ls -ld /tmp
drwxrwxrwt 24 root root 4096 sep 25 18:14 /tmp
Puede apreciarse la 't' en vez de la 'x' en los permisos de otros. Lo que hace el
bit de persistencia en directorios compartidos por varios usuarios, es que el sólo
el propietario del archivo pueda eliminarlo del directorio. Es decir cualquier otro
usuario va a poder leer el contenido de un archivo o ejecutarlo si fuera un
binario, pero sólo el propietario original podrá eliminarlo o modificarlo. Si no se
tuviera el sticky bit activado, entonces en estas carpetas públicas, cualquiera
podría eliminar o modificar los archivos de cualquier otro usuario.
Estableciendo los permisos especiales
Para cambiar este tipo de bit se utiliza el mismo comando chmod pero agregando
un número octal (1 al 7) extra al principio de los permisos, ejemplo:
#> ls -l /usr/prog
-r-x--x--x 24 root root 4096 sep 25 18:14 prog
2

#>chmod 4511 /usr/prog
#> ls -l /usr/prog
-r-s--x--x 24 root root 4096 sep 25 18:14 prog
Nótese que el valor extra es el '4' y los demás permisos se dejan como se
quieran los permisos para el archivo. Es decir, los permisos originales en este
ejemplo eran 511 (r-x--x--x), y al cambiarlos a 4511, se cambió el bit SUID
reemplazando el bit 'x' del usuario por 's'.
Los posibles valores serían los siguientes:
- - - - - - - -
-
=
0
Predeterminado, sin permisos especiales. No se requiere
indicar.
- - - - - - - -
t
=
1
Bit de persistencia, sticky bit
- - - - - s - -
-
=
2
Bit sgid de grupo
- - - - - s - -
t
=
3
Bit sgid y sticky
- - s - - - - -
-
=
4
Bit suid
- - s - - - - -
t
=
5
Bit suid y sticky
- - s - - s - -
-
=
6
Bit suid y sgid
- - s - - s - -
t
=
7
Bit suid, sgid y sticky
MUY IMPORTANTE: Algo sumamente delicado y que se tiene que tomar muy
en cuenta es lo que decidas establecer con permisos de bit SUID y SGID, ya
que recuerda que al establecerlos de esta manera, cualquier usuario podrá
ejecutarlos como si fueran el propietario original de ese programa. Y esto puede
tener consecuencias de seguridad severas en tu sistema. Siempre considera y
reconsidera si conviene que un usuario normal ejecute aplicaciones propias de
root a través del cambio de bits SUID o SGID. Mejores alternativas pueden ser
los comandos sudo y su, en este tip de LinuxTotal.com.mx encuentras una
manera de identificar archivos y ejecutables con estos bits establecidos.

Permisos preestablecidos con umask
El comando umask establece la máscara de permisos de directorio y de archivos.
Es decir los nuevos directorios y archivos que se crean obtienen el valor de los
permisos a partir de los valores de umask.
$> umask
0002
(o en formato simbólico con la opción -S)
$> umask -S
3

u=rwx,g=rwx,o=rx
Lo anterior indica que un directorio y archivos ejecutables se crearán con los
permisos 775 y los archivos comunes con los permisos 664. Esto se logra
restando de 777 el valor de umask (777-002) y (666-002) respectivamente. El
primer valor de umask corresponde para valores de Sticky bit, GUID o SUID,
que por default es 0.
$> umask
0002
(Creamos un archivo y según la máscara debemos de tener 666-002=664 o rw-rw-r--)
$> touch archivo
$> ll archivo
-rw-rw-r-- 1 sergio sergio 0 sep 25 20:14 archivo
(Ahora creamos un directorio y según la máscara debemos de tener 777-002=775 o
rwxrwxr-x)
$> mkdir dir
$> ls -ld dir
drwxrwxr-x 2 sergio sergio 4096 sep 25 20:20 dir
Para establecer el valor de la máscara, simplemente se usa el mismo comando
umask seguido del valor de máscara que se desee:
$> umask 0022
Para dejarlo fijo en la sesión, entonces conviene agregarlo a .bash_profile o
.bash_rc de nuestro directorio de inicio.


set-user-ID-on-execution (AKA SUID) permite que, al ejecutarse un fichero, se realice bajo los
privilegios del propietario. Por ejemplo, si necesitamos ejercer los privilegios de root para poder
acceder a cierto módulo, escribir en logs, leer/escribir de dispositivos, etc.
set-group-ID-on-execution (AKA SGID) permite que, al ejecutarse un fichero, se realice bajo
los privilegios del grupo propietario del fichero.
Sticky bit: Este permiso, si se asigna a un ejecutable, nos permite que este se guarde
directamente en memoria para que al ejecutarse las siguientes veces, sea leido desde allí.
Realmente lo que hace es guardar copia en la swap, por lo que en los sistemas modernos,
poco o nada nos va a beneficiar. Lo que todavía resulta muy interesante es al asignarlo a un
directorio. Si se lo asignamos al directorio, nos permite que los ficheros creados en el mismo,
independientemente de los permisos que tengan, únicamente podrán ser eliminados y/o
renombrados por el propietario de los ficheros residentes en el mismo. Un claro ejemplo de esto
es el directorio /tmp.




4

Ajustar permisos especiales en ficheros y directorios: Sticky
bit, SUID Y SGID
Los permisos de los archivos en Linux/Unix se establecen mediante un número octal que permite ajustar los
permisos del usuario, el grupo y otros y que varía entre 000 y 777. Y que determinan quién puede leer,
escribir y/o ejecutar un fichero o directorio determinado.

Sin embargo, existen unos bits que nos ofrecen la posiblidad de tener unas medidas de protección adicional
ajustando permisos especiales sobre ficheros y directorios: El sticky bit, el bit SGID y el bit SGUID.

Su representación en octal es la siguiente:
 Sticky bit --> 1000.
 Bit setgid --> 2000.
 Bit setuid --> 4000.

Sticky bit.

El sticky bit se utilizaba antiguamente en sistemas UNIX para conseguir que el sistema operativo mantuviera
en memoria los programas que tenían el sticky bit activado, con el fin de facilitar ejecuciones posteriores. Al
permanecer el programa en memoria, no había necesidad de volver a cargarlo.
Como los sistemas de almacenamiento (discos duros, etc...) han mejorado mucho, éste uso ya no es
necesario.

Hoy en día, utilizamos el sticky bit con ficheros y directorios.

Cuando se lo asignamos a un directorio, conseguimos que los elementos (ficheros y/o directorios) que haya
en ese directorio sólo pueden ser renombrados o borrados por:
 El propietario del elemento contenido en el directorio.
 El propietario del directorio.
 El usuario root.
El sticky bit prevalece sobre los permisos normales y los elementos, lo que quiere decir que tan sólo podrán
renombrar o borrar los elementos los usuarios mencionados, aunque el resto de usuarios tenga permisos de
escritura.

Ejemplo:

# chmod 1755 /home/aulas

Si queremos comprobar, en nuestro sistema, qué ficheros o directorios tienen el sticky bit activado, usaremos
el comando find:

# find / -perm -1000 -exec ls -la {} \;


Bit suid.

El bit SUID activado sobre un fichero indica que todo aquél que ejecute el archivo va a tener, durante la
ejecución, los mismos privilegios que quién lo creó. Así que es importante usarlo lo menos posible y con
precaución. Si el administrador crea un fichero y activa el bit SUID, todo aquel usuario que lo ejecute,
dispondrá, hasta que el programa finalice, de un nivel de privilegio total en el sistema.

El bit SUID o setuid se activa sobre un fichero añadiéndole 4000 a la representación octal de los permisos del
archivo y otorgándole además permiso de ejecución al propietario del mismo.

5

# chmod 4775 /home/prueba

También puede activarse usando el modo simbólico:

# chmod +s /home/prueba

Si hacemos:
#chmod u+s /home/prueba

En la primera terna de los permisos, en lugar de la x, aparecerá una s o una S.
La S aparecerá si no hemos otorgado el permiso de ejecución correspondiente, en cuyo caso el bit no tiene
efecto.

No olvidemos que, con ésto, un usuario normal, sin ningún privilegio especial en el sistema, cuando ejecuta
el programa con el bit SUID activado, está trabajando con un usuario efectivo (EUID o Effective UID) que, en
el caso de que el propietario sea el administrador, sera 0, lo que le otorga todo el poder del administrador.

Y ésto puede no tener mayor importancia en un ejecutable que haga una función muy concreta, pero, si el
ejecutable fuera una copia de un shell, el usuario normal tendría todos los privilegios del root mientras no
finalice la ejecución, es decir, hasta que no se teclee exit en la línea de órdenes!!!


Bit sgid.

Todo lo que acabamos de explicar con respecto al bit SUID es aplicable al bit SGID tan sólo que aplicado a
nivel de grupo del fichero en lugar de propietario.

En el caso del bit SGID, en lugar de trabajar con el EUID del propietario, todo usuario que ejecute un programa
al que se le ha activado el bit SGID, tendrá los privilegios del grupo al que pertenece el archivo.

El bit SGID se activa sobre un fichero sumando 2000 a la representación octal del permiso del fichero y
dandole, además, permiso de ejecución a la terna de grupo.
Para ver si hemos activado el bit SGID veremos si, al hacer un ls -l, aparece s o S aparecerá en lugar de la x
en esta terna.

Si el fichero es un directorio y no un archivo plano, el bit SGID afecta a los ficheros y subdirectorios que se
creen en él. Y los ficheros y sudirectorios tendrán como grupo propietario al mismo que el directorio al que se
le ha aplicado el bit SGID, siempre que el proceso que los cree pertenezca a dicho grupo.





Sign up to vote on this title
UsefulNot useful