Permisos de Linux para Administradores y Desarrolladores de Sistemas
El tema de los permisos en Linux y su correcto uso mediante el comando “chmod” es algo muy comúnmente expuesto y discutido en las Comunidades de SL por los Usuarios avanzados, Técnicos y Administradores de Servidores y Sistemas. Por ejemplo en nuestro Blog tenemos 2 publicaciones muy buenas al respecto, que son: Permisos y derechos en Linux (01/12) y Permisos básicos en GNU/Linux con chmod (08/16).
Pero, muchas veces los Desarrolladores de SW que son quienes crean las Aplicaciones y Sistemas, la mayoría de ellos Sistemas y Sitios Web, al desarrollarlos no suelen considerar cuales son los correctos permisos a implementarse sobre los mismos, dejando la tarea casi siempre del lado de los Administradores de Servidores y Sistemas. En esta publicación trataremos de dar una pequeña orientación al respecto para los mismos.
Introducción
El comando “chmod” es muy útil e importante para un uso avanzado de los Sistemas Operativos basados en Linux. Sin embargo, como tal “chmod” no es un paquete independiente, sino que viene integrado dentro del paquete “coreutils“. El paquete “coreutils” es un paquete que provee al Sistema Operativo de muchas herramientas básicas para la gestión de ficheros, de intérpretes de comandos, y de proceso de textos. Y por lo general, el mismo ya viene instalado por defecto en la mayoría de las Distros Linux.
Específicamente, este paquete contiene, además del comando “chmod”, los siguientes comandos: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes.
En resumen, el comando “chmod” permite la tan importante tarea de la administración de los permisos sobre archivos y carpetas a todos los usuarios gestionados por el Sistema Operativo. Esto debido a que Linux como Sistema Operativo es multi-usuario, y por ende, necesita proveer al entorno de trabajo de un sistema de permisos para controlar el conjunto de operaciones autorizadas sobre los archivos y directorios, lo que incluye todos los recursos del sistema y los dispositivos.
Contenido
Uso para Desarrolladores de SW
Un Administrador de Servidores y Sistemas (Sysadmin) a la hora de decidir qué permisos debe otorgar a un Usuario de X nivel o perfil sobre X archivo o carpeta, necesita saber exactamente que tipo de operaciones o procesos necesitan estos realizar sobre los mismos. En el caso de un Servidor Web se pueden clasificar los Usuarios en 2 tipos:
- Usuarios Administradores: Que poseen una cuenta de usuario en el servidor para iniciar sesión, poseen privilegios específicos, y que por lo general llevan a cabo ciertos cambios (copiar/borrar/modificar) en el Sistema o Sitio web instalado mediante SSH o SFTP, por ejemplo.
- Usuarios No Administradores: Que no poseen una cuenta de usuario en el servidor, ya que solo son visitantes del Sitio y Sistema Web. Y por ende, no tienen permisos para acceder a los archivos y carpetas directamente, sino que interactúan con ellos, mediante la interfaz web del Sitio o Sistema Web instalado.
Sin embargo, cuando un Sysadmin no recibe la suficiente o la adecuada información, documentación, o soporte por parte de los Desarrolladores de SW sobre las capacidades, funcionalidades o la estructura de archivos de los Sitios y Sistemas Web a instalar termina por ejecutar la máxima confiable, que en este caso suele ser:
chmod 777 -R /var/www/sistema-web
Y muchas veces remata con:
chown root:root -R /var/www/sistema-web
Advertencia
Esta suele ser una mala practica, pero que suele evita de raíz cualquier problema de permisología y de mala ejecución de los Sitios y Sistemas Web instalados. Una mala práctica, ya que cuando el comando chmod 777 es ejecutado de esa manera sobre la carpeta y archivos de un Sitio o Sistema Web, no se tiene ninguna seguridad en absoluto sobre él.
Haciendo posible que cualquier usuario del Sitio o Sistema Web en línea pueda cambiar o eliminar cualquier archivo dentro de la estructura de archivos del Sitio o Sistema Web dentro del Servidor Web o más allá, sin mayores obstáculos. Ya que se debe recordar que es el Servidor Web el que actúa en nombre de los usuario visitantes, y que el mismo es capaz de cambiar los mismos archivos que se están ejecutando.
Y en caso de que el usuario sea un atacante, y consiga alguna vulnerabilidad en el Sitio o Sistema Web, podría fácilmente explotar el mismo para desfigurarlo, deshabilitarlo, o peor aún insertar código malicioso para ejecutar ataques de phishing, o robar información del servidor sin que nadie pueda saberlo fácilmente.
Recomendaciones
Para evitar este tipo de medidas, ya sea el Sysadmin o el Desarrollador de SW, deben procurar que las carpetas y los archivos de los diversos Sistemas o Sitios Web lleven los correctos y necesarios permisos y usuarios para evitar futuros problemas de seguridad y privacidad.
A nivel de permisos se pueden realizar las siguientes 3 ordenes de comandos para restaurar a la normalidad los permisos y los usuarios de un Sistema o Sitio Web instalado, es decir, establecer como valor 755 a todos los directorios y 644 a los archivos.
Recordando siempre ejecutar las mismas dentro de la carpeta del Sistema o Sitio Web, ya que si se ejecutan las mismas en una carpeta (directorio) superior, como por ejemplo, la raíz del servidor, la ordenes de comando modificarán recursivamente todos los permisos del Servidor, dejándolo muy probablemente inoperativo.
Ejemplos
Permisos de los directorios y archivos
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
y
chmod 777 -R .
o
chmod 777 -R /var/www/sistema-web
En caso de estar fuera de la carpeta (directorio) del Sistema o Sitio Web.
Usuarios del Sistema o Sitio Web
chown www-data:www-data -R .
o
chown www-data:www-data -R /var/www/sistema-web
En caso de estar fuera de la carpeta (directorio) del Sistema o Sitio Web. Y el usuario www-data solo es usado como ejemplo, ya que es el más usado u adecuado en cuanto al uso de Apache2 se refiere.
Una vez realizados los cambios de permisos, se puede proceder a modificar los permisos de los directorios y archivos que deseemos que posean permisos distintos de manera manual. Y en caso de ser necesario cambiar también los usuarios propietarios de los necesarios. Por eso, llegado a este punto tanto los Sysadmin como los Desarrolladores de SW deben acordar cuales deben ser los necesarios permisos para cada carpeta y archivo de la estructura del Sistema o Sitio Web.
Conclusión
La administración de los permisos sobre los archivos y carpetas de los Sistemas Operativos Linux o tipo UNIX, es una de las grandes ventajas y beneficios de los mismos, ya que permiten un mejor, preciso y seguro control de los diferentes niveles de acceso, edición y ejecución sobre los archivos y carpetas.
Y mucho más, cuando se trata a nivel de Servidores Web, es decir, donde están alojados los Sistemas o Sitios Web internos y externos de una Organización, ya que es de mayor prioridad el conocer qué permisos se deben asignar a cada directorio o archivo, para conseguir el mejor balance entre privacidad, seguridad y funcionalidad.
El artículo Permisos de Linux para Administradores y Desarrolladores de Sistemas aparece primero en Permisos de Linux para Administradores y Desarrolladores de Sistemas.