Interpretar los permisos de archivos

Muchas veces hemos visto que haciendo un ls (listing) se muestra el contenido del directorio donde estemos "parados". Ahora si al comando ls le agregamos el modificador -l se mostrará un listado (largo) de directorios y archivos que incluye tambien los permisos de los mismos. Supongamos el siguiente ejemplo en una consola:

ls -l ../libXext.so.6.4

la respuesta del comando seria, para este ej., algo asi:

-rw-r--r-- 1 root root 0 ene 24 20:28 libXext.so.6.4

Donde el primer campo representa los permisos de archivo, el tercer campo es el propietario (en este caso root), y el cuarto es el grupo al que pertenece el archivo (tambien root).
Ademas de esto tenemos la fecha de creación y el nombre del archivo listado (libXext.so.6.4)

Vamos a concentrarnos en los permisos.

El primer carácter de la cadena de permisos (-) representa el tipo de archivo, donde - significa que es un archivo regular, y (d) que se trata de un directorio.

Las siguientes tres letras (en nuestro ejemplo: rw-) representan los permisos para el propietario del archivo, que en este caso son de lectura y escritura (read write)
Los siguientes tres caracteres (en el ejemplo: r--) representan los permisos para los miembros del grupo, por lo tanto, en este caso, el grupo solo podrá leerlo.
Los últimos tres caracteres (en el ejemplo: r--) representan los permisos para cualquier otro usuario del sistema, diferente del propietario o de los pertenecientes al grupo.

Por ej. -rwxrwxrwx significaria que todos los usuarios pueden leer, escribir y ejecutar el archivo.

Dependencias

Es importante darse cuenta que los permisos de un archivo también dependen de los permisos del directorio en el que se encuentran. Por ejemplo, aunque un archivo tenga los permisos-rwxrwxrwx, otros usuarios no podrán acceder a él a menos que también tengan permiso de lectura y ejecución para el directorio en el cual reside el archivo.

Es decir, para acceder a un archivo, tenes que tener permiso de ejecución en todos los directorios a lo largo de la ruta de acceso al archivo (PATH), además de permiso de lectura (o ejecución) del archivo en particular.

Cambios de permiso

El comando chmod se usa para establecer los permisos de un archivo. Solo el propietario puede cambiar los permisos del archivo (o root). La síntaxis de comando chmod es:

chmod [-R] {a, u, g, o}{+,-}{r,w,x}

Con las opciones {a, u, g, o}, indicamos a que usuarios afecta: all, user, group u other.
{+,-}: agregar o quitar permisos.
{r,w,x}: lectura, escritura o ejecución.

Para hacer cambios de forma recursiva (con la opcion -R) dentro de un directorio, es muy util la opcion +X, que dá permisos de ejecución únicamente a los directorios (para poder acceder a ellos).

Algunos ejemplos.:

chmod -R a+x /progs

Este ejemplo asigna en forma recursiva (-R) permisos de ejecucuion (+x) a todos los usuarios (a) en los sub-directorios y archivos dentro del directorio /progs

chmod u+rwx,g+rw,o-rwx archivo

Este ejemplo asigna todos los permisos al usuario que es dueño del archivo (u+rwx), lectura y ejecución a los usuarios del grupo (g+rw) y quita todos los permisos a los demas usuarios (o-rwx) al archivo file

A este modo de modificación se lo llama modo absoluto, pero hay otro modo que se conoce como octal donde los valores se representan por medio de la combinacion y suma de numeros enteros (en base al sistema de numeracion octal):

• Lectura: 4
• Escritura: 2
• Ejecución: 1

Volviendo al ejemplo -rw-r--r-- se puede ver que los permisos en modo octal serian 644 ya que:

• Usuario (rw-) = letura+escritura, es decir: 4+2= 6
• Grupo (r--) = lectura, es decir = 4
• el resto (r--) = lectura, es decir = 4

Por ej. si quisieramos cambiar los permisos del archivo libXext.so.6.4 para que nos quede de esta manera rwxrwxrwx tendriamos que hacer lo siguiente:

chmod 777 libXext.so.6.4

es decir: 4+2+1 para el propietario, grupo y todos los demas

Si quieremos dar a root todos los permisos, a los usuarios que pertenezcan al grupo lectura y ejecucion y los demas usuarios acceso denegado tendriamos que hacer lo siguiente:

chmod 750 libXext.so.6.4

es decir, 4+2+1 para el propietario (root en nuestro ejemplo), 4+1 para el grupo (tambien root) y 0 para todos los demas

Para mas ayuda man chmod, San Google!

Espero que les sirva.
Saludos!!