Permisos especiales: El s-bit (SUID, SGID) y el t-bit:
Quizá te interese este artículo que escribí en su día ...
A parte de los permisos de lectura, escritura y ejecución, existen unos permisos especiales, que nos permiten generar excepciones sobre el comportamiento de los permisos anteriormente descritos. Realmente, chmod 755 es solamente una forma corta de decir chmod 0755. Este 0 es un cuarto permiso especial, que se hace llamar s-bit, SUID, SGID o t-bit según los casos.
Algunos programas del sistema (como passwd) tienen que tener el bit SUID:
[root@blackcluster /root]# ls -ld /usr/bin/passwd
-r-s--X--x 1 root root 12244 Feb 7 2000 /usr/bin/passwd
Vemos que la x ha sido sustituida por una s. Esta s es el bit SUID, o s-bit de usuario.
[root@blackcluster /root]# ls -ld /usr/sbin/sendmail
-Rwsr-sr-x 1 root root 394118 Jan 18 14:39 /usr/sbin/sendmail
Vemos que la x del grupo también ha sido sustituida por una s. Esta segunda s es el bit SGID, o s-bit de grupo.
¿Y entonces, para qué sirve el s-bit? El s-bit permitirá a usuarios no propietarios ejecutar un programa o script como si realmente fueran otro usuario. Un ejemplo: el programa passwd, lo ejecutan todos los usuarios del sistema cada vez que entran, al identificarse. Si tenemos las claves de acceso en el fichero /etc/shadow, el programa passwd tendrá que verificar la nuestra en contraste con las del fichero /etc/shadow, por lo que debe leerlo primero. Sin embargo, /etc/shadow no dispone de permisos de lectura salvo para el root. Esta excepción se resuelve asignando el permiso especial SUID al programa passwd, para que se comporte como si lo ejecutara siempre el usuario root. El s-bit funciona sólo cuando se usa con binarios y no en scripts (una excepción son los scripts de Perl), dado que sólo tiene sentido al intentar ejecutar un fichero.
SGID es lo mismo que SUID, pero aplicado al grupo.
El t-bit (a veces conocido como "sticky bit= bit pegajoso") es útil solo en combinación con directorios. Se utiliza con el directorio /tmp como se puede ver a continuación:
[root@blackcluster /root]# ls -ld /tmp
Drwxrwxrwt 4 root root 4096 Mar 16 18:22 /tmp
Normalmente (sin el t-bit activado en el directorio) los ficheros pueden ser borrados si el directorio que contiene los ficheros tiene permiso de escritura.
El t-bit cambia esta regla. Con el t-bit activado, solo el propietario del fichero o el propietario del directorio pueden borrar los ficheros. El t-bit puede ser activado con chmod 1777. El t-bit resulta útil en directorios compartidos, como por ejemplo el /tmp.
Así, pues, los t-bit aportan seguridad, dado que evitan el borrado accidental de ciertos ficheros, muestras que el s-bit aporta lo contrario: vulnerabilidad. Un programa con el s-bit activado, puede comportarse como un virus, dado que tiene unos privilegios mayores que el propio usuario, por lo que puede destruir zonas protegidas del sistema. Por eso, es muy importante, revisar periódicamente los programas con el s-bit activado.
Podemos obtener una lista de todos los programas en nuestro sistema con el SUID o SGID activado mediante el siguiente comando:
find / -type f \( -perm -04000 -o -perm -02000 \) -print
Lo normal será obtener una lista de programas ubicados en las rutas: /usr/bin, /usr/sbin, /usr/libexec, /bin y /sbin. Todo lo que se salga de ahí, es muy sospechoso, por lo que habrá que revisar con detalle.
También conviene tener controlados los ficheros que no pertenecen a ningún usuario o grupo existente en el sistema. Los podemos encontrar ejecutando:
Find / -nouser -o -nogroup -print
Es normal encontrar este tipo de ficheros tras descomprimir un fichero de código fuente tipo .tar o .tgz bajado de Internet, por ejemplo, dado que el formato tar y tgz mantienen los NO OBSTANTE's y GID's del sistema original donde se crearon, y estos ID's no tiene porqué estar definidos en nuestro sistema.
Si queremos ser estrictos en la asignación de permisos, es imprescindible buscar y revisar todos los ficheros de nuestro sistema que son susceptibles de ser modificados por cualquier usuario:
find / -perm -2 ! -Type l -ls
Para terminar esta sección, hablemos un poco de check. Pl. Es un interesante programa en perl que comprueba los permisos de ficheros y directorios, e informará acerca de cualquier cosa sospechosa (setuid, setgid, directorios con permiso de escritura, etc.). Vamos a probarlo:
cd /root/
wget "
http://opop.nols.com/proggie/check.pl"
chmod 700 check.pl
./check.pl /