SetUID, SetGID y Sticky Bit.

En Linux a parte de los permisos normales, R, W y X, existen otros tres tipos de permisos especiales, que nos podrían ayudar a trabajar de una manera más correcta con ficheros o carpetas, estos son los permisos que aparecen como titulo de la entrada. A continuación hablare de manera rápida de cada uno de ellos, de como funcionan, de como se establecen y como se quitan.

SetUID

El permiso SetUID en un archivo provoca que cualquier usuario que ejecute el fichero obtenga los  permisos del propietario del fichero, es decir si tenemos los siguientes permisos:

-rwx—— file.sh

Un usuario que no sea el propietario del fichero no podrá ejecutarlo, ni leerlo, ni escribirlo. Entonces para conseguir que un usuario cualquiera tenga los permisos del propietario del fichero en el momento de ejecutarlo, establecemos el SetUID en el fichero, y lo hacemos de la siguiente manera:

simbolicamente: $chmod u+s file.sh | para removerlo $chmod u-s file.sh

en base octal:  $chmod 4700 file.sh | para removerlo $chmod 0700 file.sh

Un ejemplo del uso del permiso SetUID esta en el fichero /etc/shadow, este almacena las contraseñas cifradas de todos los usuarios del sistema, y “solo puede ser escrito por el propietario, que es root, y leído por los usuarios que pertenezcan al grupo del propietario root”, pero lo entrecomillo ya que como todos sabemos, cuando ejecutamos el comando $passwd con cualquier usuario este fichero es modificado, aunque este no sea Root, ni pertenezca al grupo ¿como es posible esto?, pues gracias a que el comando passwd tiene un permiso especial SetUID. Si vemos sus permisos con un ls -l, veremos que en la columna de los permisos del usuario en vez de tener una X, de execute, tiene una s.

-rwsr-xr-x 1 root root 47032 Oct  2013 /usr/bin/passwd

Por tanto cuando se ejecuta este comando se obtienen los permisos del propietario, es decir podemos escribirlo.

También hay que tener en cuenta que el propietario del fichero podría no tener permisos de ejecución sobre el fichero, si esto es así el permiso especial SetUID no haría nada, para observar si se tiene establecido el permiso de ejecución por el propietario o no, Linux nos muestra el permiso estableciendolo con una ‘S’ mayúscula.

-rwS—— file.sh

SetGID

Este permiso especial es similar al SetUID, pero trabaja bajo los permisos del grupo y no del propietario. Este tiene dos formas de funcionar, sobre un directorio o un fichero.

En un fichero es similar a SetUID, trabaja dando los permisos del grupo al usuario que ejecuta el archivo, un ejemplo del uso de este permiso especial esta en el comando $wall

$ ls -l /usr/bin/wall

-rwxr-sr-x. 1 root tty 10996 Oct 21  2013 /usr/bin/wall

Como podemos ver el permiso especial está establecido en el grupo, y que el grupo es tty, esto es porque el comando wall envia mensajes a las terminales y necesita escribir datos en los siguientes ficheros de dispositivos:

$ ls -l /dev/tty?
crw——-. 1 root tty  4, 0 Mar 29  2013 /dev/tty0
crw–w—-. 1 root tty  4, 1 Oct 21 19:57 /dev/tty1

En un directorio actúa estableciendo siempre el grupo del propietario como grupo para todos los ficheros/directorios que se creen dentro del mismo, a modo de ejemplo tenemos el directorio /tmp/data

$ ls -ld /tmp/data
drwxrwsrwx. 2 root demo 4096 Oct 30 23:20 /tmp/data

El grupo del directorio es demo y tiene establecido el permiso especial SetGID, creamos un fichero dentro con un usuario el cual tiene como grupo admin

$touch /tmp/data/file.txt

$ls -l /tmp/data/file.txt

drwxrwsrwx. 2 sysadmin demo 4096 Jun 21 23:25 /tmp/data/file.txt

Como podemos observar el grupo se mantiene, por ende si creamos otro directorio este heredará el mismo grupo y el permiso especial SetGID, y por ende su contenido también tendrá los resultados del permiso especial.

para cambiar los permisos podemos hacerlo de dos maneras:

simbolicamente: $chmod g+s file.sh | para removerlo $chmod g-s file.sh

en base octal:  $chmod 2700 file.sh | para removerlo $chmod 0700 file.sh

Sticky bit

El sticky bit se utiliza en directorios compartidos, es decir, directorios en los que muchos usuarios pueden escribir, y como bien sabemos si un usuario puede escribir en un directorio también puede borrar aunque no sea propietario del archivo que borra. Para estos casos se utiliza el sticky bit, para cuando queremos que varios usuarios añadan rchivos, pero solo puedan borrarlos cuando sean propietarios de los mismos.

Para establecer el permiso sticky bit, lo podremos hacer de dos maneras:

simbólicamente: $chmod o+t directorio| para removerlo $chmod o-s directorio

en base octal:  $chmod 1700 directorio | para removerlo $chmod 0700 directorio

la salida del comando ls -l  muestra el sticky bit como una t en la posición de ejecución de los permisos de Otros:

drwxrwxrwt

Como comentamos una ‘T’ o una “S” mayúscula no significan errores como tal, simplimente indican que el permiso de ejecución no esta establecido en el fichero. Esto es igual para SetUID, SetGID y Sticky Bit.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s