viernes, 8 de enero de 2010

SUID y SGID

ID usuario (SUID) El conjunto de ID de usuario (SUID) opción se
utiliza junto con archivos ejecutables, y le dice a Linux para ejecutar el
programa con los permisos de quien posee el archivo y no con los
permisos del usuario que ejecuta el programa . Por ejemplo, si un archivo
es propiedad de root y tiene su bit SUID, el programa se ejecuta con
privilegios de root, por lo que puede leer cualquier archivo en el
equipo. Algunos servidores y programas de otro sistema corre de este
modo, que a menudo se denomina SUID root. Los programas de SUID se
indican con una s en el propietario de ejecutar la posición del bit en la
cadena de permiso, como en rwsr-xr-x.
=====================================

ID grupo (SGID) El ID grupo (SGID) es similar a la opción de SUID,
pero se establece el grupo de programa en ejecución al grupo del
archivo. Es indicado por una s en la posición del bit de ejecución de
grupo en la cadena de permiso, como en rwxr-sr-x. Cuando el bit SGID
se encuentra en un directorio, los archivos nuevos o subdirectorios en el
directorio original heredarán el grupo propietario del directorio, en lugar
de basarse en el grupo predeterminado del usuario actual.


Sticky bit El sticky bit ha cambiado de significado en el curso de la
historia de Unix. En las modernas implementaciones de Linux (y la
mayoría de las versiones modernas de Unix), se usa para proteger
archivos de ser eliminados por aquellos que no son propietarios de los
archivos. Cuando este bit está presente en un directorio, el directorio de
archivos puede ser eliminado sólo por sus propietarios, el propietario del
directorio, o la raíz. El bit sticky se indica en ejecutar de la posición del
bit general, como en rwxr-xr-t.

=====================================================

fuente http://www.linuxtotal.com.mx/index.php?cont=info_admon_011

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.


==========================================================

fuente: http://www.linuxtotal.com.mx/index.php?cont=info__tips_016

un archivo con permisos SUID o SGID, pueden ser potencialmente peligrosos porque básicamente se trata de ficheros ejecutables propiedad de root y a los que se les permite ser ejecutados por cualquier usuario normal del sistema. Los permisos de este tipo de archivos se ven asi:

#> ls -l /bin/mount
-rwsr-xr-x 1 root root 90192 2007-10-11 10:29 /bin/mount

Nótese la 's' en vez de la 'x' en los permisos del propietario, esto es el bit SUID (Set UserID), que permite que el programa sea ejecutado por cualquier otro usuario del sistema, el bit SGID (Set GroupID) es lo mismo para los permisos del grupo.

En sistemas con varios usuarios, esto es peligroso, se debe de tener cuidado que archivos se dejan con este tipo de permisos, ya que pueden ser mal usuados o incluso 'troyanizados', es decir, sustituidos por otro idénticos en funcionalidad, pero cuando se ejecuta, además de hacer su trabajo puede por ejemplo abrir un puerto, copiar archivos, establecer una conexión, eliminar archivos, lo que sea, ya que el archivo pertenece a root!!!.

Para encontrar ficheros o archivos con los bits de permisos suid y sgid activadas, la manera más fácil y rápida es con el comando find:

#> find / -perm -4000 -ls
5931076 96 -rwsr-xr-x 1 root root 90192 oct 11 10:29 /bin/mount
5931116 24 -rwsr-xr-x 1 root root 23156 sep 12 12:13 /bin/mount.cifs3
5931053 24 -rwsr-xr-x 1 root root 20824 sep 6 15:24 /bin/su
5931079 76 -rwsr-xr-x 1 root root 72020 oct 11 10:29 /bin/umount
5931062 32 -rwsr-xr-x 1 root root 32520 sep 19 16:46 /bin/ping
2916530 72 -r-sr-xr-x 1 root root 67080 sep 26 08:31 /sbin/mount.nfs
2916364 20 -rwsr-xr-x 1 root root 18816 sep 20 09:51 /sbin/unix_chkpwd
2916363 16 -rwsr-xr-x 1 root root 13020 sep 20 09:51 /sbin/pam_timestamp_check
5358576 128 ---s--x--x 2 root root 126344 sep 13 11:43 /usr/bin/sudo

Indicamos que find busque desde la raíz '/' del sistema de archivos, todo lo que tenga permisos '-perm' del tipo SUID, es decir '-4000' y despliegue el resultado en formato de ls -l '-ls'

Solo cambiamos un poco para buscar los que tengan el bit SGID:

#> find / -perm -2000 -ls
786770 4 drwxrwsr-x 2 root mail 4096 oct 29 03:51 /var/log/mailman
786768 4 drwxrwsr-x 2 root mail 4096 mar 7 2007 /var/lib/mailman/qfiles
738370 4 drwxrwsr-x 2 root mail 4096 oct 28 21:42 /var/lib/mailman/data
819514 4 drwxrwsr-x 2 root adm 4096 sep 12 12:12 /var/lib/samba/printers/WIN40
134628 4 drwxrwsr-x 2 root mail 4096 jul 27 10:17 /var/spool/mail
2916472 4 -rwxr-sr-x 1 root root 3908 oct 3 16:49 /sbin/netreport
9523868 12 -rwxr-sr-x 1 root tty 8912 oct 11 10:29 /usr/bin/write
9530735 84 -rwsr-sr-x 1 root mail 79944 sep 16 03:17 /usr/bin/procmail

5358037 88 -r-xr-sr-x 1 root games 85536 sep 19 04:55 /usr/bin/same-gnome

O agrupamos los dos permisos entre paréntesis con el caracter de escape '\' y con la opción '-o' que indica 'este o aquel' un or booleno pues.

#> find / \( -perm -4000 -o -perm 2000 \) -ls

Como los listados suelen ser bastante largos, puedes redireccionar la salida del comando a un archivo con '>', para ser analizado con calma.

#> find / \( -perm -4000 -o -perm 2000 \) -ls > archivos_con_suid_sgid.txt

Decide que ejecutables eliminar estos bits, es tedioso, pero tu sistema será mucho más seguro al restringir lo que los usuarios normales pueden ejecutar.

==========================================================

fuente: http://linux.ciberaula.com/articulo/linux_shell_parte2/
Existen ocasiones que los usuarios necesitan ejecutar algún programa que requiere de privilegios. Un ejemplo de esto es el uso del programa passwd para cambiar la contraseña. Sería un error darle a los usuarios los privilegios necesarios para que puedan ejecutar esta clase de programas ya que el usuario podría cambiarse de grupo o crear una cuenta con privilegios de root. Para que esto no suceda, se implemento en Unix, un sistema por el cual un programa que cuente con SUID o SGID puede ser ejecutado con los privilegios del dueño y/o grupo del programa. Para que quede más claro se tiene que saber que cada usuario esta identificado por el sistema con un número de identificación tanto para él, como para el grupo. Este número se denomina UID (user ID) para el caso de los usuarios y GID para el caso de los grupos. Por ejemplo, un usuario podría tener un UID 100 y un GID 500. En el caso del root, este tiene UID 0 y GID 0. Lo que se efectúa con el sistema SUID es una adquisición temporal de un UID o GID distinto al propio cuando se está ejecutando el programa. Cuando un programa cambia de UID se denomina SUID ( se establece UID) y cuando cambia de GID se denomina SGID (se establece GID) Un programa puede ser SUID y SGID al mismo tiempo. Para darse cuenta si un programa es SUID o SGID basta con hacer un listado largo con el comando ls -l y se verá que donde tendría que estar una x, que asigna permisos de ejecución, va a estar una letra s.

Si tienes curiosidad por que programas utilizan el SUID puedes comenzar a buscarlos ;) :
$find / -perm +4000
Algunos archivos con este tipo de permisos pueden resultar ser un problema de seguridad. Para solventar en cierta medida este punto podríamos cambiar los permisos de los programas afectos por este tipo de permisos que no lo necesiten. Sería sencillamente ejecutando: chmod -s archivo. También podríamos eliminar aquellos programas con este tipo de permiso que sean utiles. Podríamos también asegurarnos que no se puede escrbir en los script de SUID e instalar alguna herramienta que verifique los archivos suid del sistema como pueda ser COPS.

EL STICKY BIT
Este es un bit que tiene un significado para los directorios. Cuando este bit está activo, hace que un usuario sólo pueda borrar los ficheros que son de su propiedad en dicho directorio. Esto es particularmente útil en el directorio /tmp. El sticky bit se activa como:
$ chmod +t directorio

No hay comentarios: