Gestione los permisos de directorios y archivos con chmod de forma recursiva

¿Estás cansado de tener que cambiar los permisos de archivos y directorios manualmente? ¿Estás buscando una forma más rápida y eficiente de modificar los permisos de tus archivos y directorios? Si es así, ¡has llegado al lugar correcto porque, en este artículo, aprenderás cómo cambiar los permisos de archivos y directorios utilizando el comando chmod de forma recursiva!

¡Sigue leyendo para obtener más información!

Prerrequisitos

Para seguir adelante, necesitas un dispositivo Linux y un directorio cuyos archivos y subdirectorios tengan permisos disponibles para practicar.

Aprendiendo Acerca de los Usuarios y Grupos en Linux

Los propietarios y grupos son importantes en Linux, necesarios para gestionar archivos y directorios de forma segura. El propietario es a quien se asigna un archivo o directorio, que es el creador, por defecto. En Linux, los archivos y directorios también pertenecen a grupos. Tanto los usuarios como los grupos se establecen a través del comando chown.

En la captura de pantalla a continuación, el contenido resaltado en verde muestra el usuario que es propietario del archivo o directorio, mihail en este ejemplo. El contenido resaltado en azul muestra a qué grupo pertenece el archivo o directorio, propiedad del grupo staff en este ejemplo.

Listing the owner and group of a set of files and directories

Comprendiendo los Permisos de Archivos y Directorios en Linux

Los permisos establecen las acciones que un usuario o grupo puede realizar en un archivo o directorio dado. Se indican mediante una representación de caracteres y también se les asigna un valor numérico.

  • Lectura (r o 4): Indica si un usuario o grupo puede leer el contenido del archivo o directorio. El permiso de lectura se otorga de forma predeterminada a todos los archivos y directorios recién creados para todas las partes involucradas.
  • Escritura (w o 2): Indica si un usuario o grupo puede editar el contenido de un objeto. Este permiso se otorga de forma predeterminada solo al propietario del archivo o directorio.
  • Ejecución (x o 1): Indica si un usuario o grupo puede ejecutar un archivo o ejecutar comandos dentro de un directorio. El permiso de ejecución se otorga de forma predeterminada solo a los directorios pero no a los archivos.

¡Si no otorgas permisos de ejecución al usuario (u) para un directorio, no podrá listar el contenido ya que el usuario no podrá ejecutar comandos dentro del directorio!

A continuación se muestra un ejemplo, la salida del comando ls -l demuestra los diferentes tipos de permisos. Aquellos permisos precedidos por el valor d indican un directorio.

Listing file and directory permissions

Entonces, ¿por qué parecen haber tres conjuntos de permisos para cada objeto? El control detallado de los permisos se logra dividiendo los permisos en las secciones (referidas como partes para fines de este tutorial) que se enumeran a continuación.

  • Usuario (u): El propietario de un archivo o directorio, resaltado en azul.
  • Grupo (g): Miembros del grupo al que pertenece un archivo o directorio, resaltados en verde.
  • Otro (o): Todos los usuarios y grupos adicionales no asignados explícitamente, resaltados en rojo.
Demonstrating the combined permissions for a file or directory

Cambiar permisos de archivo mediante el comando recursivo chmod

Con el entendimiento adecuado de los permisos de Linux, continúe leyendo para aprender cómo cambiar los permisos de archivo. Los permisos se modifican mediante el comando recursivo chmod como se muestra en los ejemplos a continuación.

1. Primero, verifique los permisos actuales con el comando ls -l. Aquí se muestra el archivo my_dir/index.js.

Checking the current permission of index.js.

2. Ejecute el comando chmod, especificando la parte, a (todos), y los permisos, rwx, o lectura/escritura/ejecución. El comando completo es el siguiente: chmod a=rwx index.js.

Changing index.js’ permissions.

3. Como puede ver, al ejecutar chmod recursivo no se devuelve ninguna salida. Para verificar que los permisos han cambiado, ejecute el comando ls -l nuevamente.

Verifying index.js permissions

Establecer permisos de archivo mediante valores numéricos

¿Recuerda los números asociados con permisos como lectura o escritura? En lugar de especificar los valores de caracteres, puede especificar permisos específicos a través de un número. Al sumar los valores, crea un permiso específico como 6 que es una combinación de permisos de escritura (2) y lectura (4).

En el ejemplo a continuación, establezca permisos para el archivo main.py mediante el comando chmod 664 main.py. Los valores numéricos se desglosan de la siguiente manera.

  • Usuario: Lectura y Escritura (6).
  • Grupo: Lectura y Escritura (6).
  • Otros: Lectura (4).
Changing permissions for main.py.

Una vez cambiados los permisos, verifique los nuevos permisos para el archivo main.py con el comando ls -l.

Verifying permissions for main.py

Eliminación y Adición de Permisos de Archivos

Los comandos no numéricos que ha ejecutado hasta ahora usan el parámetro de asignación (=) con chmod de forma recursiva, para establecer permisos explícitos. En cambio, puede eliminar (-) o agregar (+) permisos a conjuntos de permisos existentes.

1. Primero, liste los permisos existentes para el archivo README.md mediante el comando ls -l README.md.

Checking README.md current permissions

2. A continuación, agregue (+) permisos de ejecución (x) al usuario (u), mientras elimina (-) permisos de lectura (r) del otro grupo (o) para README.md, con el siguiente comando chmod u+x,o-r README.md. Los permisos de diferentes grupos están separados por comas (,).

Changing README.md permissions

3. Ejecute el comando ls -l README.md para verificar que los permisos se modificaron.

Checking README.md new permissions

Cambiando Permisos de Archivos y Directorios de Forma Recursiva

Aunque estás progresando, solo estás trabajando en un archivo a la vez. ¿Qué pasa si tienes un gran número de archivos para cambiar los permisos? Es hora de elevar tu juego y aprender a cambiar los permisos para múltiples archivos.

Una de las opciones para cambiar múltiples archivos es ejecutar chmod recursivamente con la opción -R (recursivo, en minúsculas). La opción recursiva cambiará los permisos para todos los archivos, incluidos los que están en subdirectorios, dentro de una ruta dada.

1. Considera el siguiente comando, chmod -R a=r,u=rwx mi_directorio. La mayoría de las opciones ya las has visto antes.

Este comando cambiará los permisos para todos los archivos en el directorio, mi_directorio y sus subdirectorios, a través de la opción recursiva (-R). Los archivos se establecen como legibles (r) para todos (a), con permisos diferentes para el usuario actual (u) configurado para permisos completos (lectura, escritura, ejecución).

En la captura de pantalla a continuación, verás los permisos resultantes después de ejecutar el comando, que no tiene salida resultante.

Checking my_dir files new permissions

2. Supongamos que ejecutas el comando, chmod -R a=rwx mi_directorio, en el mismo directorio que antes, mi_directorio. Una vez más, estás cambiando todos los archivos en mi_directorio, y sus subdirectorios, para dar todos (a) permisos completos (lectura, escritura, ejecución). Aquí está el resultado del comando, ya que chmod recursivo no muestra salida.

Checking my_dir files new permissions to confirm every part now has every permission

3. ¿Qué hay del método numérico? Como se muestra a continuación, el método recursivo también funciona con permisos numéricos, chmod -R 770 my_dir. Aquí estás dando permisos completos al usuario y al grupo, pero ningún permiso a la otra parte.

Recursively changing permissions with the numeric method

4. Ejecute ls -l para verificar que los permisos de los archivos y subdirectorios de my_dir estén configurados con el método numérico.

Checking the permissions set once again, this time with the numeric method

Definir el Comportamiento de Archivos y Carpetas a través de Permisos Especiales

Los permisos especiales permiten varios privilegios adicionales que son únicos de los conjuntos de permisos estándar. Hay tres permisos especiales. Aquí te explicamos cómo funcionan estos permisos especiales y cómo puedes agregarlos a un archivo o directorio.

Configuración de Permisos SUID (Usuario + S)

Comúnmente conocido como SUID, es un permiso especial para el usuario. El SUID tiene una función única: un archivo con SUID siempre se ejecuta como el usuario que es dueño del archivo, independientemente de quién esté ejecutando el archivo.

Por ejemplo, considera index.js. Para dar el permiso adicional SUID, ejecuta chmod u+s index.js.

Ahora, si ejecutas ls -l index.js, verás que el usuario tiene una s en sus permisos en lugar de una x.

Checking index.js new permissions

Configuración de Permisos SGID (Grupo + S)

Comúnmente conocido como SGID, este permiso especial tiene dos funciones:

  • Si se establece para un archivo, permite que el archivo se ejecute como el grupo que es dueño del archivo, independientemente de quién esté ejecutando el archivo.
  • Si se establece para un directorio, cualquier archivo creado en el directorio tendrá su propiedad de grupo establecida como la del propietario del directorio.

Practica en el archivo index.php. Para agregar el permiso SGID a este archivo, ejecuta el siguiente comando: chmod g+s index.php.

Ahora, si ejecutas ls -l index.php, verás que el grupo tiene una s en sus permisos.

Checking index.php new permissions

Muevete a un directorio: mi_directorio. Puedes agregar el permiso SGID a este directorio usando el siguiente comando: chmod g+s mi_directorio. Cualquier archivo creado en este directorio ahora tendrá su propiedad de grupo establecida como la del propietario del directorio. Puedes verificar los nuevos permisos del directorio usando ls -ld mi_directorio (el parámetro d limita la salida solo a directorios).

Checking my_dir new permissions

Cambiando el Permiso de Bit de Pegajosidad

El último permiso especial también se conoce como el “bit de pegajosidad”. Este permiso no afecta a los archivos individuales. Sin embargo, a nivel de directorio, restringe la eliminación de archivos. Solo el propietario de un archivo puede eliminar un archivo dentro de ese directorio.

Agrega el bit de pegajosidad al antiguo y familiar directorio mi_directorio. Para hacerlo, ejecuta el comando de la siguiente manera: chmod +t mi_directorio.

Nota que, para agregar el bit de pegajosidad, no indicas el otro grupo(o) antes del +t.

Cuando revises los nuevos permisos de mi_directorio, verás una T mayúscula en los permisos otros, como se muestra en la captura de pantalla a continuación.

Checking my_dir new and special permissions

Conclusión

¡Felicidades! Has cubierto muchos temas sobre chmod recursivo. Ahora estás listo para abordar cualquier problema molesto de permisos que surja con la poderosa herramienta chmod. Incluso has aprendido cómo aprovechar el poder de la opción recursiva (-R).

¿Cómo planeas implementar la versátil funcionalidad de chmod a tu favor la próxima vez que necesites gestionar los permisos de archivos o directorios?

Source:
https://adamtheautomator.com/chmod-recursive/