Administración de Permisos de Archivos y Directorios en Linux

Guía práctica y Buenas Prácticas

Tabla de Contenido

Introducción

En el ámbito de la ciberseguridad, es importante establecer permisos a cada directorio, archivo o sistema en Linux, siendo una mala configuración un riesgo de seguridad alto.
Esta guía ayuda a los profesionales que desean ingresar al área de ciberseguridad,

Conceptos básicos

Permisos en Linux

Cuando se trata de establecer permisos en Linux, se debe considerar los iguiente aspectos más importantes a la hora de establecerlos.

ds1

Write

Esta opción permite la escritura o edición de archivos por parte del usuario, grupo u otro que tenga este permiso.
Puede verlo en la línea de comando como w en el siguiente comando:

chmod u-w project_k.txt 

Este comando le quitará el permiso de escritura/write a otros usuarios que no sea el propietario o el grupo, del archivo project_k.txt.

Read

La opción de lectura/read permite que los usuarios puedan leer el directorio o archivo especificado, el símbolo que permite la lectura está representado por la letra r.

chmod u+r project_k.txt 

La funcionalidad del comando anterior es el de darle permisos de lectura del archivo project_k.txt al usuario.

Execute

Esta opción permite el acceso a la información correspondiente de directorio o archivo, identificándose con la letra x. Como se puede observar en el siguiente código:

chmod u+x project_k.txt 

Este comando le da acceso para que el usuario visualice la información contenida en el archivo project_k.txt.

Tipos de Usuarios

Tipos de usuarios

Propietario (User)

Identifica al usuario que haya creado el archivo, quien se convierte en el propietario. Representado por la letra u.

Grupo (Group)

Tal como se conoce en los demás sistemas operativos, un grupo permite gestionar actividades que hayan sido asignadas al usuario dentro del grupo de trabajo. Dicho también de otro modo, consta de varios usuarios, siendo también una forma de administrar un entorno de usuarios múltiples. Represantado por la la letra g.

Otros usuarios (Others)

Este tipo de usuario no pertenece a ninguna de los tipos de usuaios anteriores, y se refiere a otros usuarios exluyentes del propietario o grupo de trabajo perteneciente a los usuarios globales de la empresa. Representado por la letra o.

Comandos esenciales

ds2

chmod

Permite el cambio de permisos de directorios y archivos dentro del sistema.

chmod o-w project_k.txt 

Donde:

  • chmod: Comando inicial para el cambio de acceso al archivo.
  • o: Indica el tipo de usuario al que se le aplica el cambio.
  • - : El signo indica si se desea agregar o quitar acceso, en este caso, indica que se quita el acceso.
  • w: Como se pudo observar anteriormente, la w indica acceso de escritura (write).
  • project_k.txt : Es el archivo al que se necesita modificar el acceso.
  • chown

    Se encarga de cambiar el propietario del archivo o directorio.
    Para cambiar el propietario del archivo, se coloca el siguiente comando:

    chown fgarcia access.txt 

    Donde:

  • chown: Comando inicial para el cambio de propietario del archivo.
  • fgarcia: Es el nuevo propietario del archivo.
  • access.txt : Es el archivo al que se necesita modificar el propietario.
  • chgrp

    Comando usado para el cambio de grupo al que pertenece el archivo o directorio.

    chgrp desarrollo access.txt 

    Donde:

  • chgrp: Comando para el cambio de grupo del archivo.
  • desarrollo: Es el nuevo grupo/área/departamento al que pertencerá el archivo.
  • access.txt : Es el archivo al que se necesita modificar el grupo.
  • Caso practico

    1. Configuración de Permisos para un Proyecto de Desarrollo

    Situacion

    Se tiene un equipo de desarrollo que trabaja en un proyecto compartido en un servidor Linux. Necesita asegurarse de que todos los desarrolladores puedan leer y escribir en los archivos del proyecto, pero sólo el líder del equipo pueda ejecutar scripts importantes.

    Objetivos

  • Todos los desarrolladores deben tener permisos de lectura y escritura en los archivos del proyecto.
  • Sólo el líder del equipo debe tener permisos de ejecución en los scripts importantes.
  • Solución

    Preparando el entorno en Debian

    Es importante revisar que el sistema tenga las actualizaciones necesarias para poder realizar esta práctica.
    Recuerda ingresar al modo root para poder realizar los cambios correspondientes dentro del equipo.

    Actualizar sistema

    Crear grupo de Desarrolladores

    Para crear el grupo correspondiente es importante considerar la información proporcionada en la descripción del caso.
    Donde:

    Grupo
    Desarrollo

    Con las especificaciones mostradas en la tabla anterior, el comando para crear un grupo dentro del sistema es el siguiente:

    sudo groupadd desarrolladores 

    Donde:

  • sudo: Permite ejeucuciones root.
  • groupadd: Permite crear el nuevo grupo.
  • desarrolladores: Nombre del grupo.
  • Agregar grupo

    Crear usuarios

    Para crear el grupo correspondiente de "desarrolladores" es importante considerar la información proporcionada en la descripción del caso.
    Donde:

    Grupo Usuario Categoría Permisos
    Desarrollo jgarcia Líder w + r + x
    rlopez Desarrollador1 w + r
    mmorgan Desarrollador2 w + r
    osmith Desarrollador3 w + r

    Para este caso, como estamos integrando usuarios desde cero, deben ser creados dentro del equipo. Y para ello colocamos los siguientes comandos:

    sudo useradd jgarcia
    sudo useradd rlopez
    sudo useradd mmorgan
    sudo useradd osmith

    Donde:

  • sudo: Permite ejeucuciones root.
  • useradd: Permite agregar el nuevo usuario.
  • jgarcia/rlopez/mmorgan/osmith: Nombre de usuarios.
  • Agregar usuarios

    Asignar usuarios al grupo

    Luego, asignamos cada usuario al grupo de “desarrollo” con los siguientes comandos:

    sudo usermod -a -G desarrolladores jgarcia
    sudo usermod -a -G desarrolladores rlopez
    sudo usermod -a -G desarrolladores mmorgan
    sudo usermod -a -G desarrolladores osmith

    O se puede colocar “-aG” sin separase, para cada usuario, como lo siguiente:

    sudo usermod -aG desarrolladores jgarcia

    Donde:

  • sudo: Permite ejeucuciones root.
  • usermod: Permite cambiar el grupo del usuario.
  • -aG: Usado para agregar un usuario a un grupo ya existente, es obligatorio que los dos vayan acompañados para que se pueda asignar correctamente al grupo.
  • desarrolladores: Grupo asignado.
  • jgarcia/rlopez/mmorgan/osmith: Nombre de usuarios.
  • Asignar usuarios a grupo

    Establecer permisos de lectura y escritura para el grupo en el directorio del proyecto

    Para asignar permisos de lectura y escritura, primeramente, se debe asignar el directorio, junto con todo su contenido, al grupo. Para ello, colocaremos el siguiente comando:

    sudo chown -R :desarrolladores /home/analyst/desarrolladores

    Donde:

  • sudo: Permite ejeucuciones root.
  • chwon: Permite cambiar el propietario del grupo.
  • -R: Usado obligatoriamente para cambiar el propietario de los directorios junto con todo su contenido, permitiendo también el cambio del grupo perteneciente.
  • :desarrolladores: Grupo propietario al cual se desea cambiar la carpeta; se usa “ : ” ya que originalmente se asigna un usuario junto con el grupo al cual pertenece, en este caso, estamos asignando a TODOS los usuarios del grupo “desarrolladores” al directorio.
  • /home/analyst/desarrolladores: Ruta específica del directorio.
  • Asignar grupo a directorio

    Con esto realizado, seguimos con el cambio de permisos específicos. Tanto el propietario como el grupo tienen los permisos de escritura, lectura y ejecución, pero cero permisos para oros usuarios ajenos al proyecto.

    Esto lo aplicamos de dos maneras, donde asignamos a cada tipo de usuarios sus permisos, o la asignación por representación numérica al usuario propietario, grupo y otros. Para ello seguimos los comandos (para asignación por tipo de usuario):

    sudo chmod -R g+wrx /home/analyst/desarrolladores
    sudo chmod -R u+wrx /home/analyst/desarrolladores
    sudo chmod -R o-wrx /home/analyst/desarrolladores

    Donde:

  • sudo: Permite ejeucuciones root.
  • chmod: Permite cambiar permisos.
  • -R: Usado obligatoriamente para cambiar el propietario de los directorios junto con todo su contenido, permitiendo también el cambio del grupo perteneciente.
  • g: Identifica al grupo.
  • u: Identifica al propietario.
  • o: Identifica a otros.
  • + : Agrega los permisos especificados.
  • - : Quita los permisos especificados.
  • w: Permisos de escritura.
  • r: Permisos de lectura.
  • x: Permisos de ejecución.
  • /home/analyst/desarrolladores: Ruta específica del directorio.
  • Cambiando permisos por usuario
    Asignar grupo a directorio2
    Asignar grupo a directorio

    Como se puede observar, el directorio “desarrolladores” (d), gestionado por el grupo “desarrolladores”, tiene los tres permisos (escritura, redacción y ejecución) para el propietario (los primeros rwx después de “d”), y para el grupo (los siguientes rwx), pero se observan guiones en los tres últimos espacios, esto indica que no hay ningún permiso para otros usuarios externos del proyecto de desarrolladores.

    Con la representación numérica ocurre algo similar, pues para definir que un tipo de usuario tenga los máximos accesos (rwx), se coloca el número 7. Podemos identificarlos de mejor manera de acuerdo la siguiente tabla:
    Valor Tipo de permiso
    4 Lectura
    2 Escritura
    1 Ejecución
    0 Ningún permiso
    Aplicando operaciones matemáticas, podemos identificar cuando un tipo de usuario tiene un permiso específico. Por ejemplo:

  • Si el grupo tiene permisos de lectura (4) y escritura (2) para un archivo en particular (4+2), debe colocar el número 6, resultado de la sumatoria de los dos valores..
  • Si otro usuario, no tiene ningún acceso al archivo, entonces su número es 0.
  • Si otro grupo solo debe tener permisos lectura, entonces el valor a colocar es 4.
  • Si un propietario tiene todos los permisos activos, entonces se suman los valores de rwx (4+2+1), lo cual dará el 7.
  • Ahora, consideremos que, para agilizar definición de permisos a algún directorio o archivo específico, se deberán asignar permisos a los tres tipos de usuarios, por lo tanto, es común que se vean tres valores, correspondientes a: propietario (u), grupo (g) y otros (o), en este orden se asignan los valores.

    Entonces, basándonos en nuestro caso, debemos considerar nuevamente que tanto el propietario tiene los permisos de escritura, lectura y ejecución, escritura y lectura para el grupo, pero cero permisos para oros usuarios ajenos al proyecto.

    Propietario Grupo otro
    rwx rwx ---
    4 + 2 + 1 4 + 2 + 1 0
    7 7 0

    Por lo tanto, el comando quedaría de la siguiente manera:

    sudo chmod -R 770 /home/analyst/desarrolladores

    Mayormente se usa esta representación numérica porque ahorra tipeos, tiempo al ser más directa, reduce la longitud del comando.

    Asignar grupo a directorio

    Configuración de permisos específicos para el script

    Para establecer permisos específicos del script importante al líder del equipo, es importante primero asignarlo como propietario.
    Para ello, cambiamos el propietario del srcipt, colocando el siguiente comando:

    sudo chown jgarcia /home/analyst/desarrolladores/crear_carpetas.sh

    Donde:

  • sudo: Permite ejeucuciones root.
  • jgarcia: Propietario asignado del proyecto (líder).
  • /home/analyst/desarrolladores/crear_carpetas.sh: Ruta específica del script.
  • Asignar propietario a script
    Asignar propietario a script
    Asignar propietario a script

    Aseguramos que los permisos estén asignados correctamente, donde solo lectura y escritura las tenga el propietario y el grupo. Luego, se establecen permisos para que solo el propietario (líder del proyecto) pueda ejecutar el script importante, y el grupo únicamente pueda leerlo con el siguiente comando:

    sudo chmod -R 740 /home/analyst/desarrolladores/crear_carpetas.sh
    Propietario Grupo Otro
    rwx r-- ---
    4 + 2 + 1 4 0
    7 4 0
    Asignar permisos correctos a script

    Explicación resumida de comandos

    Comandos

    Resultado

    Con esta configuración, todos los desarrolladores podrán leer y escribir en los archivos del proyecto, pero sólo el líder del equipo podrá ejecutar los scripts importantes. Esto ayuda a mantener la seguridad y el control de acceso adecuado en el entorno de desarrollo.

    Buenas Prácticas

    Seguridad

    Mantén la segurridad de los equipos siguiente los siguientes puntos:

  • Principio de Privilegio Mínimo: Otorga a cada usuario o grupo únicamente los permisos necesarios para realizar su trabajo. Evita permisos excesivos (por ejemplo, 777) que puedan comprometer la seguridad.
  • Uso Adecuado de Grupos y ACLs: Organiza usuarios en grupos lógicos y utiliza Access Control Lists (ACLs) para asignar permisos de manera granular cuando los permisos tradicionales de Unix no son suficientes.
  • Auditorías y Monitoreo: Realiza auditorías periódicas de permisos y cambios en el sistema. Utiliza herramientas de monitoreo para detectar configuraciones inesperadas o vulnerabilidades en tiempo real.
  • Protección de Scripts y Archivos Críticos: Asegúrate de que solo los usuarios autorizados (por ejemplo, el líder del equipo) tengan permisos de ejecución sobre scripts importantes, reduciendo el riesgo de ejecuciones accidentales o maliciosas.
  • Eficiencia

    Aplicar las mejores prácticas para administrar permisos de manera eficiente con las siguientes recomendaciones:

  • Automatización de Tareas: Crea scripts que apliquen configuraciones de permisos de forma recursiva (usando chmod -R y chown -R) , asegurando una implementación consistente y reduciendo errores humanos.
  • Auditorías y Monitoreo: Documenta las políticas de permisos y roles del equipo. Establecer plantillas y procedimientos claros mejora la consistencia y agiliza la incorporación de nuevos miembros.
  • Verificación y Pruebas Regulares: Antes de aplicar cambios a gran escala, prueba nuevas configuraciones en entornos de desarrollo o staging para evitar interrupciones en producción.
  • Revisión Periódica: Programa revisiones y actualizaciones periódicas de permisos para adaptarse a cambios en el equipo o en las políticas de seguridad, asegurando que el acceso continúe siendo el apropiado con el tiempo.

  • Conclusiones

    Una configuración adecuada de los permisos de los usuarios en Linux es crucial para desempeñarse en entornos seguros dentro de los equipos empresariales. En conclusión, los aspectos realizados en la presente práctica son los siguientes:

  • Se creó el grupo desarrolladores y se agregaron todos los miembros relevantes.
  • Los permisos de la carpeta del proyecto fueron configurados con 770, lo que permite al grupo lectura, escritura y ejecución en los directorios. Los permisos del grupo (desarrolladores) permiten a todos los integrantes trabajar colaborativamente en los archivos mediante el uso de 770.
  • El script importante tiene permisos 740, asignando la ejecución exclusivamente al líder del equipo y asegurando que el grupo pueda leerlos.
  • Como recomendación, es importante considerar el correcto uso de los permisos al momento de asignarlos a los usuarios específicos, es necesario verificar si se asignan correctamente para evitar acceso no autorizados o falta de algún tipo de acceso necesario para el equipo.

    Se necesita informar a los desarrolladores que deben cerrar y volver a iniciar sesión después de ser agregados al grupo desarrolladores.

    Como proceso de automatización, se puede diseñar un script que configure automáticamente permisos, grupos y usuarios para futuros proyectos con el objetivo de agilizar estos procedimientos.

    Es factible realizar auditorías periódicas en los permisos del servidor para identificar y corregir posibles desviaciones o configuraciones erróneas. El manejo correcto de permisos en Linux es crítico para la seguridad, la productividad y la colaboración en proyectos compartidos.

    A través de esta práctica, los participantes no solo aprenden a manejar permisos correctamente, sino que también desarrollan habilidades transferibles a otros sistemas y entornos profesionales. Esto refuerza la importancia de buenas prácticas en la administración de servidores y sistemas operativos.

    Agradezco mucho la vista a este espacio, espero que la información te haya sido de ayuda y la encuentres favorable para tu propio aprendizaje. Sientete libre de intercambiar información a mi correo electrónico para poder charlar sobre más estrategias para asegurars los equipos de la empresa.
    ¡Muchas gracias, espero verte nuevamente!


    Última modificación: 19-03-2025