Está en la página 1de 5

1

Bits SUID, SGID y de persitencia (sticky bit)


An 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 comn a todos los
usuarios, que es el comando passwd, que como se sabe sirve para cambiar la
contrasea del usuario, y puede ser invocado por cualquier usuario para
cambiar su propia contrasea, 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. Tambin
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 slo
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 slo el propietario original podr eliminarlo o modificarlo. Si no se
tuviera el sticky bit activado, entonces en estas carpetas pblicas, cualquiera
podra 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 nmero 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
Ntese que el valor extra es el '4' y los dems 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 seran 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 travs 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 mscara 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 simblico con la opcin -S)
$> umask -S
3

u=rwx,g=rwx,o=rx
Lo anterior indica que un directorio y archivos ejecutables se crearn 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 segn la mscara 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 segn la mscara 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 mscara, simplemente se usa el mismo comando
umask seguido del valor de mscara que se desee:
$> umask 0022
Para dejarlo fijo en la sesin, 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 mdulo, 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 todava 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 podrn 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 nmero octal que permite ajustar los
permisos del usuario, el grupo y otros y que vara entre 000 y 777. Y que determinan quin 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 proteccin adicional
ajustando permisos especiales sobre ficheros y directorios: El sticky bit, el bit SGID y el bit SGUID.

Su representacin 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 tenan el sticky bit activado, con el fin de facilitar ejecuciones posteriores. Al
permanecer el programa en memoria, no haba necesidad de volver a cargarlo.
Como los sistemas de almacenamiento (discos duros, etc...) han mejorado mucho, ste uso ya no es
necesario.

Hoy en da, 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 slo 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 slo podrn
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 aqul que ejecute el archivo va a tener, durante la
ejecucin, los mismos privilegios que quin lo cre. As que es importante usarlo lo menos posible y con
precaucin. 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 aadindole 4000 a la representacin octal de los permisos del
archivo y otorgndole adems permiso de ejecucin al propietario del mismo.

5

# chmod 4775 /home/prueba

Tambin puede activarse usando el modo simblico:

# 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 ejecucin correspondiente, en cuyo caso el bit no tiene
efecto.

No olvidemos que, con sto, un usuario normal, sin ningn 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 funcin muy concreta, pero, si el
ejecutable fuera una copia de un shell, el usuario normal tendra todos los privilegios del root mientras no
finalice la ejecucin, es decir, hasta que no se teclee exit en la lnea de rdenes!!!


Bit sgid.

Todo lo que acabamos de explicar con respecto al bit SUID es aplicable al bit SGID tan slo 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 representacin octal del permiso del fichero y
dandole, adems, permiso de ejecucin 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 tendrn 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.

También podría gustarte