En ocasiones puede ser necesario cambiar los permisos a un directorio que contiene a su vez todo un árbol de subdirectorios y archivos.1) La manera más simple de hacerlo es mediante el comando chmod
y la opción de recursividad, por ejemplo:
mkdir -p /tmp/prueba/prueba1/prueba2 touch /tmp/prueba/prueba1/prueba2/miarchivo chmod -R 755 /tmp/prueba
El problema de este ejemplo es que se le aplicaría el bit de ejecución tanto a /tmp/prueba/
con sus subdirectorios (lo cual es necesario para tener acceso de lectura en estos), como al archivo “miarchivo” (lo cual es totalmente innecesario para tener acceso de lectura). Esto podría introducir una vulnerabilidad, si en la ruta en la cual estamos cambiando los permisos existen scripts u otros archivos binarios que pueden ejecutarse.
El riesgo podría ser mayor si el directorio al que pretendemos cambiar los permisos es el de un sitio web, que en no pocos casos suele configurarse para permitir el acceso de lectura a cualquier usuario, y mucho mayor si se aplica de manera recursiva el permiso 777, una recomendación que soprendentemente, puede encontrarse con frecuencia en foros y blogs.
Además, desde hace algunos años, para la creación de sitios web es común utilizar sistemas de gestión de contenido, pues pueden ofrecer una funcionalidad adecuada y facilitan considerablemente la creación y el mantenimiento de un sitio. Dado que estos sistemas suelen utilizar lenguajes de programación que permiten interactuar con el sistema operativo, el tema de mantener la seguridad de un sitio se complejiza. De modo que para establecer los permisos en un sitio web, siempre es recomendable primeramente estudiar cuidadosamente lo que recomienda la documentación de las aplicaciones web que deseamos instalar.
Dicho esto, si por ejemplo necesitamos cambiar los permisos de manera recursiva en el directorio /var/www
y este no cntiene ningún archivo que requiera permisos de ejecución o de escritura, o archivos que contengan información delicada, como nombres de usuario y contraseñas, etc., podríamos utilizar estos comandos:
cd /var/www find . -type d -print0 | sudo xargs -0 chmod 755 find . -type f -print0 | sudo xargs -0 chmod 644
Aqui, el comando find
se utiliza con el parámetro -type
que permite especificar si deseamos buscar los directorios (d) o los archivos (f), y el parámetro -print0
produce en la salida estándar la ruta completa del archivo, seguida por un carácter nulo. En cuanto al comando xargs
, el parámetro -0
especifica que los elementos introducidos estarán terminados por un carácter nulo, y es sobre dichos elementos que finalmente se ejecutará el comando chmod
.