lunes, 25 de octubre de 2010

Permisos, comandos chown, chmod, dmask, fmask etc (linux)

Muchas veces nos hemos preguntado que significa el numero mágico 777 al utilizarlo con el comando "chmod". Bien pues este numero en realidad es simplemente una máscara para unos valores lógicos que interpreta el sistema a la hora de restringir o permitir acciones llevadas a cabo en ficheros de sistema.

Para comprender estos valores lógicos que otorgan permisos, debemos fijarnos en esta tabla de la verdad que expongo a continuación:

L|S|E|M
0|0|0|0
0|0|1|1
0|1|0|2
0|1|1|3
1|0|0|4
1|0|1|5
1|1|0|6
1|1|1|7

L = lectura
S = escritura
E = ejecución
M = máscara

Los valores 1 y 0 significan permitir (1) y no permitir (0). La máscara por lo tanto (es el valor decimal de los 3 bits que hay a la izquierda en la tabla y) es una combinación que se utiliza para "almacenar" los permisos que se aplican a los usuarios.

Si miramos la tabla atentamente nos podemos fijar en que el numero 4 por ejemplo significa que el usuario tiene permiso para leer el fichero pero no para editarlo ni ejecutarlo, 6 permite la lectura y escritura pero no ejecución y 7 permite las tres cosas.

¿Pero porque 777?

El numero en sí representa como se distribuyen los permisos y a que usuarios se distribuyen. El primer numero aplica la mascara al dueño del fichero, el segundo numero aplica la máscara a los demás usuarios que pertenecen al grupo del dueño del fichero y el ultimo numero aplica la mascara a los otros usuarios que no pertenecen al grupo del dueño del fichero.

Ejemplo: Tenemos 2 grupos el grupo "familia" y el grupo "visitante". El grupo familia incluye los usuarios "papá" y "mamá" mientras que el grupo visitante incluye el usuario "visitante". Supongamos un archivo llamado "archivo.txt" que pertenece al usuario "papá".

chmod 640 archivo.txt

Nos fijamos en la tabla y podemos comprobar que el numero 6 permite al usuario papá leer y escribir el fichero pero no ejecutarlo. El numero 4 permite al usuario mamá (que pertenece al grupo familia, grupo al que pertenece también el dueño del fichero) leer el fichero, pero no puede modificarlo ni ejecutarlo. Mientras que al otro usuario que es "visitante" (que no pertenece al grupo del dueño del fichero) no se le permite leer/escribir/ejecutar en ese archivo. Fin del ejemplo.

El comando chown cambia el dueño del fichero.

Ejemplo:

chown mamá archivo.txt

En este caso el usuario mamá pasa a ser el dueño del fichero en concreto.

Para cambiar el dueño de todos los ficheros de una carpeta hay que utilizar la opción "-R" despues de "chown" así:

chown -R papá carpeta

Fin del ejemplo.

Cuidado, nunca utilizar la opción "-R" (tanto con los comandos chmod como chown) sobre la carpeta raiz, esto dañaría vuestro sistema operativo de forma irecuperable. Ya que los componentes de la carpeta dev pertenecen a diferentes grupos de usuarios como son los grupos "video", "audio", "netdev", "fuse","lpadmin" etc. Y cada componente tiene unos permisos tan sensibles que son muy dificiles de recuperar.

¿Entonces si un 7 permite todo porque al utilizar dmask o fmask en el archivo fstab estamos aplicando permiso con el 000?

Es porque se "restan" los permisos. Por esta razón un fmask=033 es equivalente a un chmod 744 ejecutado sobre todos los ficheros de esa partición, ya que:

777 - 033 = 744


fuente: http://www.ubuntuhispano.org/wiki/permisos-comandos-chown-chmod-dmask-fmask-etc-aclaracion

me parecio muy util y lo postee

saludos