Permisos de Linux para Administradores y Desarrolladores de Sistemas

Permisos de Linux para Administradores y Desarrolladores de Sistemas

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.

Permisos de Linux para DevOps/BDA: Introducción

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

Permisos de Linux para SW/BD: Contenido 1

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:

  1. 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.
  2. 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

Permisos de Linux para SW/BD: Contenido 2

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.

Permisos de Linux para SW/BD: Contenido 3

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.

Permisos de Linux para SW/BD: Contenido 4

Permisos aplicados a Carpetas (Directorios)

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.

Permisos de Linux para SW/BD: Contenido 5

Permisos aplicados a Archivos (Ficheros)

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.

Permisos de Linux para SW/BD: Conclusión

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.


2 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Polg28 dijo

    Buenos días, cómo están?
    Estoy incursionando en linux, tengo una aplicación que se pueden importar archivos desde ella, el usuario sube un .zip que contiene una carpeta con archivos xml, luego de descomprimir los archivos se insertan en la base de datos. En windows no tengo problemas, al pasar la aplicación a linux me estarían faltando algunos permisos, en principio para probar todo eh realizado lo que bien comentan en este articulo y no se debe hacer jaja (pero que cambiare una vez pueda validar todas las funcionalidades).
    El caso es que se llegan a descomprimir los archivos pero veo que, se descargan solo con permisos de lectura y escritura para propietario, lectura para grupo propietario y sin permisos para otros. Cuando el propietario de los archivos son del usuario que utiliza la aplicación. Entiendo que al no tener los permisos de ejecución no esta pudiendo seguir el flujo normal del proceso y proceder a insertar los xml en la base. A lo que viene mi duda, ¿como puedo dar permisos a archivos que todavía no tengo en el sistema? En la carpeta que se descargan (tmp) tiene todos los permisos, se los aplique de forma re-cursiva pero cada vez que se descargan archivos dentro de esa carpeta solo tienen los permisos mencionados. ¿Existe alguno forma de que los archivos que aparezcan en esa carpeta puedan quedar con permisos de ejecución también?
    Espero haber sido claro, desde ya muchas gracias y excelente blog

  2.   Linux Post Install dijo

    Asumo que la carpeta /tmp o …/tmp tiene 755 de permisos pero aun así cuando el usuario propietario de la aplicación los deposita los deja con otros permisos. Yo no soy desarrollador pero asumo que en el lenguaje de la aplicación u otra se podría indicarle a la misma una rutina que ejecute la orden de comando (bash) de los permisos necesarios (chmod) y el propietario de los archivos (chown). De resto, podrías ejecutar un script cada minuto que ejecute las mismas.