Permisos

Oh cielos.. se fijan lo que pasa cuando uno usa wizardcillos que hacen las cosas automagicamente..? Para que vean que no todos los wizardcillos son graficos y con botones de “Siguiente” y “Terminar”, ahi esta el ejemplo de la capacidad de trabajar con simbolos del chmod.. asi que aqui va una pequenia contribucion sobre los permisos de archivos en *nix:

En un sistema de archivos tipo Unix, todos los archivos tienen relacionados con ellos 12 bits de permisos, separados en 4 grupos:

xxx xxx xxx xxx
Especial Duenio Grupo Otros

Los bits menos significativos (duenio, grupo, otros) son los que todo el mundo conoce -bueno, mas o menos- y representan (en cada grupo de tres) permisos de

lectura (r), escritura (w) y ejecucion (x) ==> Para archivos normales
lectura (r), escritura (w) y exploracion (x) ==> Para directorios

Lectura y escritura deben ser claros para todo el mundo. Ejecucion es la forma en que se le indica al sistema operativo que este archivo se debe tratar como un programa (de hecho, se le indica al shell) y que aquellos que tienen permiso de ejecucion (usuarios, esto es) pueden utilizarlo.

El bit “x” para los directorios significa eXploracion, o sea que el usuario con ese permiso puede entrar a ese directorio. Un directorio puede no tener permisos de lectura ni de escritura para un usuario o grupo pero si de exploracion, lo cual permite ciertas situaciones interesantes, como que aunque no puedas ver el listado de archivos del directorio (no tienes permiso de lectura) si puedes entrar a ese directorio y ejecutar o leer un archivo que este ahi, siempre y cuando tengas permiso de exploracion.

Una nota sobre el significado de “duenio, grupo, otros”: todo archivo en el sistema debe pertenecer a algun usuario y a algun grupo. Los grupos de bits de duenio especifican que puede hacer el duenio del archivo con el, y lo mismo aplica para los de grupo respecto de lo que pueden hacer los usuarios en ese grupo con el. Los permisos de “Otros” dicen lo que pueden hacer aquellos usuarios que no son ni el duenio ni pertenecen al grupo del archivo.

Ahora, con los bits de permisos especiales. Son los 3 bits mas significativos (los que estan mas a la izquierda) de los 12 bits de permisos, y su significado es:

Establecer ID de usuario, Establecer ID de grupo y Salvar imagen
(Archivos normales)

Para directorios, el bit de “Salvar imagen” actua distinto: un directorio con ese bit establecido permite que solo el usuario que creo un archivo pueda borrarlo (asumiendo que tenia permiso de crearlo en primer lugar, desde luego).

Establecer ID de usuario (Set User ID o Set UID) tiene efecto solo en archivos con el bit de ejecucion establecido. Significa que al ejecutarse el programa el proceso generado tendra los mismos privilegios que el duenio del archivo, aun cuando sea ejecutado por alguien mas. Varios programas usan esta tecnica en su sistema, pueden encontrarlos con este comando:

find / -perm +1000 -exec ls -l {} \;

Establecer ID de grupo (Set Group ID o Set GID) tiene el mismo efecto del SUID, pero aplicable al grupo al que pertenece el archivo en lugar del duenio.

Finalmente, el archivo de “Salvar imagen” (Save text-image o Sticky bit==>pegajoso). En un archivo ejecutable significa que el sistema va a guardar en un buffer en memoria el codigo ejecutable del programa la primera vez que lo ejecutas, de forma que la siguiente vez que lo ejecutes no tengaque ser leido nuevamente del disco. Esto es bueno para comandos ejecutados frecuentemente como “ls”. Sin embargo, esta es una especificaicion antigua y
no todos los sistemas lo implementan (no estoy seguro de que Linux lo haga, por ejemplo).

En directorios, el “Sticky bit” ya explique lo que hace. Si alguien puede excribir en un directorio, nadie mas puede borrar sus archivos, aun si esas otras personas tienen permiso de escritura para el directorio. Un ejemplo esta en el directorio /tmp de muchas distribuciones: ls -l /tmp

AHORA, todo comenzo porque muchos de ustede estan acostumbrados a trabajar simbolicamente con el chmod, pero eso los llevo a mucha confusion. Mi sugerencia es entonces que en lugar de hacerlo simbolicamente, le digan al chmod exactamente como quieren los permisos ahora que ya saben de donde salen. Recuerden que son 12 bits, si los dividen en 4 grupos de 3 bits entonces pueden representarlos con 4 digitos en octal. Ejemplos:

Lectura/escritura para duenio, solo lectura para grupo y otros:

-rw-r–r– 1 izto users 0 Aug 18 14:18 archivo
110100100 –> 110 100 100 –> 644 –> chmod 644 archivo

Lec/esc/ejecucion para duenio y grupo, nada para otros:

-rwxrwx— 1 izto users 0 Aug 18 14:18 archivo
111111000 –> 111 111 000 –> 770 –> chmod 770 archivo

Igual que el anterior, pero con SUID:

-rwsrwx— 1 izto users 0 Aug 18 14:18 archivo
111111000 (con bits especiales 100) –> 100 111 111 000 -> 4770->chmod 4770

Ahora con SGID:

-rwsrws— 1 izto users 0 Aug 18 14:18 archivo*
111111000 (con bits especiales 110) –> 110 111 111 000 -> 6770->chmod 6770

Espero que esto haya aclarado para alguien como estan organizados y como se manipulan los bits de permisos. Si no, su libro favorito de Unix se los explicara con toda claridad 😉