El tema de permisos en los sistemas GNU/Linux es un referente. Aunque se suele decir que estos permisos son algo especial, en realidad se establecen en el sistema de ficheros, que así lo soporta. Y esto, lógicamente ofrece una gran ventaja respecto de sistemas de archivos en Windows. NTFS lo intentó, pero no consiguió lo que ext3/ext4, entre otros, tiene.
Para definir los permisos en GNU/Linux se suele emplear el comando chmod con un número octal (0..7) y en este número se hace la agrupación para definir si un fichero tiene permisos de lectura, escritura y/o ejecución. rwx (y sus permutaciones) es la combinación más típica de permisos que se suele dar, pero a mayores de esos permisos, hay otros más ocultos que permiten hacer cosas completamente diferentes. Estos permisos son los que vamos a ver a continuación: el sticky bit, el bit SGID y el bit SGUID y su representación octal es la que sigue,
Sticky bit --> 1000
Bit setgid --> 2000
Bit setuid --> 4000
Sticky bit
Aunque en la actualidad no es muy empleado, en los antiguos sistemas Unix este bit activado le indicaba al sistema operativo que mantuviese a dicho programa en memoria, con el fin de facilitar su ejecución. Puesto que estaba en memoria no es necesario volver a cargarlo y su ejecución es mucho más rápida. Con la evolución de la tecnología este bit ya no tiene esa funcionalidad, ya que la carga de programas actualmente es mucho más rápida.
Actualmente se emplea este Sticky bit para definir aquellos ficheros o directorios que interesa que sólo el propietario los pueda cambiar. Este bit prevalece sobre el resto de permisos, por lo que sólo el propietario tendrá acceso al fichero.
Un ejemplo de uso es el directorio /tmp, que presenta los siguientes permisos,
shell> ls -l /
...
drwxrwxrwt 10 root root 4096 jun 3 08:42 tmp
...
Para establecer un fichero o directorio con esta propiedad hay que elegir una de ambas opciones,
shell> chmod 1755 /tmp
shell> chmod a+t /tmp
Bit suid
Bit SUID es uno de los permisos más peligrosos que se pueda establecer, ya que permite al usuario que ejecute dicho fichero tener los mismos permisos durante toda la ejecución que el usuario que ha creado el fichero. De forma más clara, si el usuario root crea un fichero y le da permisos de setuid, todo aquel que lo ejecute tendrá permisos de root durante la ejecución de dicho binario. La forma de activarlo (una de las dos),
shell> chmod 4775 /usr/local/bin-ls
shell> chmod u+s /usr/local/bin-ls
La representación octal es 4000, como ya se dijo anteriormente y cuando se establece también hay que establecer los permisos de ejecución pertinentes. Cuando tengamos el setuid establecido, los permisos aparecerán con una 's' o una 'S', según el permiso de ejecución esté o no establecido.
Bit sgid
Es lo mismo que lo que acabamos de explicar para el setuid, pero aplicable al grupo. Si estableciendo el bit anterior conseguíamos establecer los permisos como un EUID (Efective UID) en este caso lo que vamos a lograr es lo mismo, pero a nivel de grupo EGID (Efective GID). La forma de establecer dichos permisos es con 2000, en su representación octal.
shell> chmod 2770 /usr/local/sbin
La entrada
Permisos especiales: Sticky bit, SUID Y SGID la puedes leer en
El mundo en bits.
Leer más