Fecha: 04/04/2007
Autor: Fernando Lagos
Contacto: fernando@zerial.org

Permisos en UNIX




INTRODUCCION

Debido a la existencia de usuarios y privilegios, cuando un usuario tiene algo que es de su propiedad y no quiere que nadie lo lea o modifique, o al contrario quiere que todos puedan acceder a el pero que solo algunas personas puedan modificarlo, este usuario le otorga privilegios a usuarios quienes podran acceder al fichero o bien le asigna permisos al fichero en si. Los permisos pueden ser para escribir, leer o ejecutar segun corresponda.
Los permisos nos permiten poder leer, escribir o ejecutar un fichero determinado.


ESTRUCTURA DE LOS PERMISOS

Los permisos de ficheros o directorios se separan en tres; los permisos para el usuario a quien pertenece el fichero, los permisos para el grupo donde pertenece el usuario y los permisos para quienes no pertenecen a ninguno de los dos casos anteriores.
Los permisos se estructuran asi:
- - - - - - - - - - donde el primer guion corresponde a si es un directorio o un fichero. En el caso de un directorio el se reemplaza por una letra d quedando de la siguiente manera:
d --- --- --- Cuando es un directorio
- --- --- --- Cuando es un fichero

El segundo bloque de tres guiones consecutivos corresponde a los permisos que tendra el propietario del archivo y en el orden de rwx corresponde a Read (leer), Write (escribir) y eXecute (ejecutar), y de esta misma forma los dos siguientes bloques de tres guiones consecutivos pertenecen al grupo y a los externos respectivamente.
Por ejemplo, si un fichero llamado "prueba.txt" tiene los permisos - rwx --- --- y su propietario es el usuario usuario significa que solamente el usuario podra leer, escribir y ejecutarlo. Si los permisos estan puestos como - rwx r-- r-- significa que el propietario tiene derecho a ejecucion, edicion y lectura del fichero y que ademas, todos los usuarios pertenecientes al grupo y gente que no lo sea puedan leer el fichero.


COMO SABER QUE PERMISOS TIENEN LOS FICHEROS

Para saber a quien pertenece un fichero o directorio y ademas saber que permisos tiene podemos facilmente ir a una terminal (o consola) y escribir ls -l.
Veremos algo parecido a:
1651628 drwxr-xr-x   2 zerial users  4096 2007-04-04 15:29 directorio
1651629 -rw-r--r--   1 zerial users     0 2007-04-04 15:29 fichero
Nos centraremos en lo que esta con negrita, en ambos casos lo primero son los permisos y lo segundo corresponde al usuario propietario (owner) del fichero o directorio y el grupo a que pertenece.
En este ejemplo, los permisos para el directorio directorio son rwxr-xr-x que si lo dividimos quedaria como rwx r-x r-x, es decie el propietario puede hacer todo sobre el directorio, el grupo puede leer y ejecutar al igual que los externos al grupo. Lo mismo pasa con el fichero fichero. Y ambos pertenecen al usuario zerial y al grupo users.


CAMBIANDO PROPIETARIOS Y GRUPOS

Como ya vimos, los ficheros y directorios pertenecen a un usuario y tambien a un grupo y estos atributos se pueden modificar.
Usaremos el comando chown que significa "Cambiar Propietario" (change owner) y se aplica de la siguiente manera:

chown usuario.grupo FICHERO|DIRECTORIO

Para hacerlo de manera recursiva, es decir, si se trata de un directorio cambiar el propietario y grupo de todos los subdirectorios se pone el parametro -R (recursive) y para saber sobre que ficheros o directorios hizo efecto el comando tambien se pasa el parametro -v (verbose).

# ls -l
1651628 drwxr-xr-x   2 zerial users  4096 2007-04-04 15:29 directorio
1651629 -rw-r--r--   1 zerial users	0 2007-04-04 15:29 fichero
$ chown zerial.zerial fichero
# ls -l
1651628 drwxr-xr-x   2 zerial users  4096 2007-04-04 15:29 directorio
1651629 -rw-r--r--   1 zerial zerial    0 2007-04-04 15:29 fichero
# chown -Rv nobody.users *
cambiado el propietario de «directorio» a nobody:users
cambiado el propietario de «fichero» a nobody:users
# ls -l
drwxr-xr-x 2 nobody users 4096 2007-04-04 15:29 directorio
-rw-r--r-- 1 nobody users    0 2007-04-04 15:29 fichero



MODIFICANDO LOS PERMISOS

Para modificar los permisos de los directorios o ficheros usaremos el comando chmod que significa "Cambiar modos" (change modes) y se aplica de la siguiente manera:
chmod XXX FICHERO|DIRECTORIO

Para el modo recursivo y verbose es similar a chown. Las XXX corresponden a los permisos que obtendra el fichero o el directorio.
Ahora explicare que significan esas XXX y como saber que poner ahi:
Las XXX corresponden a numeros y corresponden cada uno a los permisos que obtendra el propietario, el grupo y los ajenos al grupo. El primer numero corresponde a los permisos que tiene el propietario de este fichero o directorio, la segunda X corresponde a los permisos que obtendran los miembros del grupo y la tercera X a los que no son ni del grupo ni propietarios.
Un numero adecuado para los permisos son por ejemplo 700, 777, 666, 660, 550, etc.
Para obtener estos misteriosos numeros es necesario hacer un pequeño calculo y con mucha imaginacion llegaremos al permiso deseado, el calculo es el siguiente:

Imaginemos que tenemos los permisos rwxr-xr--, que como ya vimos en casos anteriores, seria rwx r-x r--. Ya sabemos a quien o a que corresponde cada bloque de tres guiones y a la vez cada guion de cada bloque corresponde al permisos de lectura, escritura y ejecucion. En este caso cuando no queramos dar permisos reemplazaremos el guion por un 0 (cero) y cuando queramos dar permisos lo reemplazaremos por un 1 dejandolo asi: rwx r-x r-- = 111 101 100, Tenemos tres numeros binarios y al pasarlos a decimal formaremos los numeros que reemplazaremos por las XXX, en este caso: 7 5 4, entonces nuestro permiso formado es el 754 que nos permitira que el usuario ejecute, lea y escriba, el grupo lea y ejecute y que los ajenos al grupo puedan solo leer.
--- --- ---000 000 000000
r-- --- ---100 000 000400
r-- r-- r--100 100 100444
rw- rw- rw-110 110 110666
rwx rwx rwx111 111 111777