¿Cómo administro los permisos de archivos y directorios en Texto-plano.xyz?

En los sistemas operativos similares UNIX conta con estructura de directorios, y que los mismos pueden contener archivos. Estos normalmente son visibles y evidentes para todos los usuarios del sistema.

Tanto estos archivos como los directorios que los contienen, disponen de permisos de uso, y que del conocimiento y buen empleo de los mismos depende una adecuada utilización de los recursos informáticos que tendremos a disposición.

Estos permisos de uso pueden referirse a los archivos, y los permisos de uso de los directorios. Sirven para limitar o potenciar el acceso y utilización de los mismos tanto para el administrador de sistema (superusuario), los usuarios comunes, u otros grupos de usuario diferentes.
Estructura básica de permisos en archivos

Los permisos de uso del archivo describen el accionar que podemos contemplar con elos. Debemos tener en claro los tres atributos básicos que nuestros archivos puede tener: lectura, escritura y ejecución.

    Permiso de Lectura (r, o "read"): Este permiso nos permite "leer" o "ver" el contenido del archivo.
    Permiso de Escritura (w, o "write"): Este permiso nos permite "modificar" el archivo escribiendo en el disco. Podremos agregar, sobrescribir o directamente borrar su contenido.
    Permiso de Ejecución (x, o "execute"): Si el archivo tiene permiso de ejecución, entonces nuestro sistema operativo podrá cargarlo en memoria y correrlo (darle ejecución) como si de un programa se tratara. Si es un programa lo podremos ejecutar como cualquier comando, si es un script, necesitará de permisos de lectura y ejecución (y debemos también tener acceso a su intérprete). Un programa compilado sólo necesita ser de lectura.

Las letras que identifican de los atributos son los caracteres de los permisos, y son: r "read", quiere decir lectura w "write", quiere decir escritura x "eXecute", quiere decir ejecución

Para ver los atributos de un directorio, podríamos usar el comando "ls -l", que nos informará de los mismos.
Usar chmod para cambiar los permisos

Comprendido esto, debemos conocer cómo cambiar estos permisos. A tal fin se utiliza el comando chmod ("change mode", o cambiar modo). Con él podremos agregar o quitarle permisos a uno o mas archivos con + (mas) o – (menos).

Si tuviésemos que prevenir la modificación del archivo importante.txt, podremos hacerlo quitándole a este archivo su permiso de escritura mediante el comando chmod:

chmod -w importante.txt

Si queremos hacer que el script llamado instalador.sh pueda ejecutarse, debemos ingresar:

chmod +x instalador.sh

...si quisiéramos quitar o agregar todos los atributos a la vez

chmod -rwx instalador.sh

chmod +rwx instalador.sh

También podremos utilizar el signo = para establecer los permisos en una combinación específica. Por ejemplo, con la siguiente sintaxis el comando chmod quitará permisos de escritura y ejecución dejando solo el de lectura.

chmod =r instalador.sh

Debemos tener especial cuidado y precaución al modificar los permisos de nuestros archivos, pues podríamos dejarlos inaccesibles. Si editamos los permisos para hacer pruebas, no debemos olvidar dejarlos como estaban originalmente.
Estructura básica de permisos en directorios

En el caso de los directorios, el procedimiento es un poco diferente, pero sigue los mismos rudimentos generales. Tendremos los mismo tres permisos, pero el significado operativo será ligeramente diferente:

    Permiso de lectura en un directorio: Si un directorio tiene permiso de lectura, podremos ver la lista de archivos contiene dicho directorio (por ejemplo, usar con el directorio el comando “ls", listar directorio). Es importante recalcar que contar con permiso de lectura en un directorio no significa que podamos leer el contenido de los archivos que están dentro de él, ya que para ello está el permiso de lectura del archivo.
    Permiso de escritura en un directorio: Con el permiso de escritura de directorio podremos agregar, borrar o mover archivos al directorio
    Permiso de ejecución en un directorio: Ejecución te permite usar el nombre del directorio cuando estas accediendo a archivos en ese directorio, es decir este permiso lo hace que se tome en cuenta en búsquedas realizadas por un programa. Por ejemplo, un directorio sin permiso de ejecución no seria revisado por el comando find ("buscar")

Usuarios, Grupos y Otros

Ahora conocemos los 3 permisos y como agregar o remover estos, pero estos 3 permisos son almacenados para 3 propietarios diferentes, llamados:

    Usuario (u): proviene del dueño "Usuario"
    Grupo (g): proviene del dueño "Grupo"
    Otros (o): proviene del dueño "Otros"

De esta manera, al introducir el comando:

chmod =r mensaje.txt

...asignaremos permisos de lectura a los 3 dueños (usuario, grupo y otros). De tal forma, cuando listamos el directorio con “ls -l” veremos algo parecido a.
-r--r--r-- 1 fulano users 4096 abr 13 19:30 mensaje.txt

Indudablemente que estas tres “r” denotan los 3 diferentes propietario de permisos que se han referido, donde:
Permisos Pertenece a: rwx------ Usuario (las primeras 3 letras) ---r-x--- Grupo (las segundas 3 letras) ------r-x Otros (las terceras 3 letras)

También podemos quitar permisos para cada dueño; supongamos que tenemos un archivo de un script ejecutable llamado guion.sh:
-rwxr-xr-x 1 fulano fulano 4096 abr 13 19:30 guion.sh

Si quisiéramos removerle los permisos de ejecución al propietario Grupos y al propietario Otros, bastaría con usar:

chmod g-x,o-x guion.sh

...de tal forma, nuestro archivo quedara con estos permisos
-rwxr--r-- 1 fulano fulano 4096 abr 13 19:30 guion.sh

Si deseamos removerle al dueño Usuario el permiso de escritura debemos ingresar:

chmod u-x guion.sh

-r-xr--r-- 1 fulano fulano 4096 abr 13 19:30 guion.sh

Para agregar y remover dos permisos a la vez al propietario Usuario:

chmod u-x+w guion.sh

...y al listarlo quedará:
-rw-r--r-- 1 fulano fulano 4096 abr 13 19:30 guion.sh
chmod en octales

Para simplificar la realización estos cambios es posibleutilizar también una nomenclatura opcional llamada octal. Ésta nos evitará tener que usar los atributos rwx, y los designadores de propietario usuario-grupo-otros. La representación octal de chmod es muy sencilla, si seguimos la siguiente regla nemotécnica:

    Lectura tiene el valor de 4
    Escritura tiene el valor de 2
    Ejecución tiene el valor de 1

Teniendo esto en cuenta, según se completen las ocho combinaciones del octal restantes:


    rwx 7, Lectura, Escritura y Ejecución
    rw- 8, Lectura y Escritura
    r-x 5, Lectura y Ejecución
    r-- 4, Lectura
    -wx 3, Escritura y Ejecución
    -w- 2, Escritura
    --x 1, Ejecución
    --- 0, Sin permisos

Por lo tanto:

    chmod usuario=rwx,grupo=rwx,otros=rx chmod 775
    chmod usuario=rwx,grupo=rx,otros= chmod 760
    chmod usuario=rw,grupo=r,otros=r chmod 644
    chmod usuario=rw,grupo=r,otros= chmod 640
    chmod usuario=rw,grupo,otros= chmod 600
    chmod usuario=rwx,grupo,otros= chmod 700

Un error que debemos prevenir cuidadosamente es el uso de chmod con comodines, pues esto puede provocar cambios de permisos de manera indiscriminada.

Supongamos que queremos aplicar permisos a todos los archivos dentro de un directorio, y a todos los subdirectorios contenidos en él. Que todos los archivos dentro de nuestra carpeta ~/docs reciban permiso rw para nuestro propietario usuario y para el propietario grupo, y r para el propietario otros; en tanto para los directorios queremos que el usuario tenga permisos de rwx para poder ver los archivos y usarlos, en tanto que el grupo y otros tienen permisos de r-x), pero que los grupos tengan lectura y ejecución, mientras que los grupos también tengan dicho permiso.

Esto podría ser para restaurar los permisos como estaban originalmente.

Para ello podríamos correr.

cd ~/docs/

find ~/docs/ -type f -print0 | xargs -0 chmod 664

find ~/docs/ -type d -print0 | xargs -0 chmod 755

En este ejemplo, el octal chmod 664 pone los permisos en -rw-rw-r-- (un conjunto de permisos común en sistemas similares a UNIX para las carpetas Documentos/, Música/, Vídeos/ y Escritorio/), mientras que el octal chmod 644 pone los archivos como -rw-r--r--. El Octal chmod 660 pone los archivos en -rw-rw---- (para una carpeta de Dropbox/ por ejemplo)

En el caso de una carpeta con posesión (como la carpeta para las llaves ~/.gnupg/, deberíamos hacer lo siguiente:

primero aseguramos que los contenidos de la carpeta nos pertenezcan:

chown -R $(whoami) ~/.gnupg/

...y luego le damos los permisos adecuados para la tarea que cumple esta carpeta .gnupg/ en particular:

find ~/.gnupg -type f -exec chmod 600 {} \;

find ~/.gnupg -type d -exec chmod 700 {} \;