Como entender los permisos en Linux.


Si alguna vez has trabajado en Linux, es muy probable que te hayas topado con algo como esto: -rw-r--r--. ¿Te suena a chino? ¡No te preocupes! Hoy vamos a desentrañar el misterio de los permisos en Linux, un concepto fundamental para entender cómo funciona la seguridad y el acceso a los archivos en este sistema operativo.

Los permisos son la columna vertebral de la seguridad en Linux. Determinan quién puede leer, escribir o ejecutar un archivo o directorio. Sin un sistema de permisos robusto, cualquiera podría modificar archivos importantes del sistema o acceder a información sensible, lo que sería un caos.

¿Cómo se representan los Permisos?

Cuando ejecutas el comando ls -l en tu terminal, obtendrás una lista detallada de los archivos y directorios en el directorio actual, incluyendo la información de sus permisos. La cadena de 10 caracteres al principio de cada línea es la clave:

drwxr-xr-x 2 usuario grupo 4096 May 21 15:30 mi_directorio

-rw-r--r-- 1 usuario grupo 1024 May 21 15:30 mi_archivo.txt

Vamos a desglosar esos 10 caracteres:

  • Primer carácter: Indica el tipo de archivo.
    • -: Archivo regular.
    • d: Directorio.
    • l: Enlace simbólico.
    • Y hay otros menos comunes como c para archivos de caracteres, b para archivos de bloques, etc.
  • Los nueve caracteres restantes: Se dividen en tres grupos de tres, representando los permisos para:
    1. Dueño (Owner): Los primeros tres caracteres (rwx en el ejemplo anterior) definen los permisos del usuario que es el propietario del archivo o directorio.
    2. Grupo (Group): Los siguientes tres caracteres (r-x en el ejemplo) definen los permisos para los miembros del grupo al que pertenece el archivo o directorio.
    3. Otros (Others): Los últimos tres caracteres (r-x en el ejemplo) definen los permisos para todos los demás usuarios del sistema que no son el dueño ni forman parte del grupo.

Entendiendo los Permisos: rwx

Cada uno de estos tres caracteres tiene un significado específico:

  • r (read – lectura):
    • Archivos: Permite ver el contenido del archivo.
    • Directorios: Permite listar el contenido del directorio (es decir, ver qué archivos y subdirectorios hay dentro).
  • w (write – escritura):
    • Archivos: Permite modificar o eliminar el archivo.
    • Directorios: Permite crear, renombrar o eliminar archivos y subdirectorios dentro de ese directorio. ¡Cuidado! Para eliminar un archivo, necesitas permiso de escritura en el directorio que lo contiene, no necesariamente en el archivo en sí.
  • x (execute – ejecución):
    • Archivos: Permite ejecutar el archivo si es un programa o un script.
    • Directorios: Permite «entrar» al directorio, es decir, acceder a sus contenidos y subdirectorios. Sin este permiso, no puedes usar cd para navegar a él, incluso si tienes permiso de lectura.

Cuando un permiso no está presente, se muestra un guion (-) en su lugar. Por ejemplo, -rw-r--r-- significa:

  • Dueño: Puede leer y escribir (rw-).
  • Grupo: Solo puede leer (r--).
  • Otros: Solo puede leer (r--).

Modificando Permisos: chmod

Aquí es donde las cosas se ponen interesantes. El comando chmod (change mode) es tu mejor amigo para modificar los permisos. Hay dos formas principales de usarlo:

1. Notación Simbólica (Letras)

Esta es una forma intuitiva de agregar o quitar permisos. Usamos u (dueño), g (grupo), o (otros) y a (todos). Los operadores son + (añadir), - (quitar) y = (establecer exactamente).

  • Ejemplos:
    • chmod u+x mi_script.sh: Añade permiso de ejecución al dueño del archivo mi_script.sh.
    • chmod g-w mi_archivo.txt: Quita el permiso de escritura al grupo en mi_archivo.txt.
    • chmod o=r mi_documento.pdf: Establece el permiso de lectura para «otros» en mi_documento.pdf, quitando cualquier otro permiso que tuvieran.
    • chmod a+rw archivo_compartido: Añade permisos de lectura y escritura para todos (u, g, o).

2. Notación Octal (Números)

Esta es una forma más compacta y potente de establecer permisos, especialmente útil cuando quieres configurar varios permisos a la vez. Cada permiso tiene un valor numérico:

  • r (read): 4
  • w (write): 2
  • x (execute): 1
  • – (no permiso): 0

Para cada grupo (dueño, grupo, otros), sumas los valores de los permisos deseados. Luego, concatenas estos tres números para formar un código octal de tres dígitos.

  • Ejemplos:
    • rwx = 4 + 2 + 1 = 7
    • rw- = 4 + 2 + 0 = 6
    • r-x = 4 + 0 + 1 = 5
    • r-- = 4 + 0 + 0 = 4
  • Aplicando chmod con notación octal:
    • chmod 755 mi_script.sh: Da permisos rwx al dueño, r-x al grupo y r-x a otros. Esto es común para scripts ejecutables.
    • chmod 644 mi_archivo.txt: Da permisos rw- al dueño, r-- al grupo y r-- a otros. Esto es común para archivos de texto.

chown y chgrp: Cambiando Dueño y Grupo

Además de los permisos, también puedes cambiar el propietario de un archivo o directorio y el grupo al que pertenece:

  • chown (change owner): Cambia el dueño de un archivo o directorio.
    • chown nuevo_usuario archivo.txt
    • chown nuevo_usuario:nuevo_grupo archivo.txt (Cambia dueño y grupo a la vez)
  • chgrp (change group): Cambia el grupo de un archivo o directorio.
    • chgrp nuevo_grupo archivo.txt

Permisos por Defecto: umask

Cuando creas un nuevo archivo o directorio, Linux le asigna un conjunto de permisos por defecto. Este comportamiento se controla mediante el comando umask. El umask es una máscara que resta permisos a los permisos máximos posibles (666 para archivos, 777 para directorios).

  • Por ejemplo, si tu umask es 0022:
    • Para archivos (máximo 666): 666 - 022 = 644 (rw-r–r–)
    • Para directorios (máximo 777): 777 - 022 = 755 (rwxr-xr-x)

Puedes ver tu umask actual escribiendo umask en la terminal.


Los permisos en Linux son una herramienta poderosa y esencial para mantener tu sistema seguro y organizado. Dominarlos te dará un control total sobre tus archivos y directorios, y te permitirá trabajar de forma más eficiente y segura. Así que la próxima vez que veas esos misteriosos -rw-r--r--, ¡ya sabrás exactamente qué significan!

Permisos Especiales


Más Allá de rwx: Desentrañando los Permisos Especiales en Linux

Ya hemos explorado los permisos básicos de lectura (r), escritura (w) y ejecución (x) en Linux, un pilar fundamental para la seguridad del sistema. Sin embargo, el universo de los permisos en Linux esconde algunas joyas adicionales que ofrecen funcionalidades avanzadas y, a veces, cruciales para la administración del sistema. Hablamos de los permisos especiales: el setuid, setgid y el sticky bit.

Estos permisos, representados por un s o t en la cadena de permisos que obtenemos con ls -l, pueden parecer un poco intimidantes al principio. Pero una vez que entiendes su propósito, te darás cuenta de su utilidad y de por qué es tan importante manejarlos con precaución.

1. El Bit setuid (s)

El setuid (abreviatura de «set user ID») es un permiso que se aplica exclusivamente a archivos ejecutables. Su función es muy específica y potente: cuando un usuario ejecuta un archivo con el bit setuid activado, el proceso se ejecuta con los privilegios del dueño del archivo, en lugar de los privilegios del usuario que lo está ejecutando.

¿Cómo lo ves?

En la cadena de permisos, verás una s en lugar de la x para el dueño:

-rwsr-xr-x

¿Por qué es útil?

Imagina un programa como passwd, que permite a los usuarios cambiar su contraseña. Para hacer esto, passwd necesita escribir en un archivo que solo el usuario root tiene permiso para modificar (generalmente /etc/shadow). Si passwd no tuviera setuid activado, un usuario normal no podría cambiar su contraseña. Con setuid, passwd se ejecuta temporalmente con los privilegios de root (su dueño), permitiendo el cambio de contraseña.

Riesgos:

Debido a que otorga privilegios elevados, un uso indebido o una vulnerabilidad en un programa con setuid puede ser un grave riesgo de seguridad. Un atacante podría explotar un programa setuid para ejecutar código malicioso con permisos de root. Por eso, es fundamental que solo los programas de confianza y bien auditados tengan este permiso.

2. El Bit setgid (s)

Similar al setuid, el setgid (abreviatura de «set group ID») puede aplicarse tanto a archivos ejecutables como a directorios.

  • En archivos ejecutables: Cuando un usuario ejecuta un archivo con el bit setgid activado, el proceso se ejecuta con los privilegios del grupo propietario del archivo, en lugar de los privilegios del grupo principal del usuario que lo ejecuta. ¿Cómo lo ves?Una s en lugar de la x para el grupo:-rwxr-sr-x Utilidad: Permite que un programa interactúe con recursos que son accesibles para un grupo específico, incluso si el usuario que lo ejecuta no pertenece a ese grupo, siempre y cuando el programa sea parte de ese grupo.
  • En directorios: Este es un uso muy común y práctico. Cuando el setgid está activado en un directorio, todos los nuevos archivos y subdirectorios creados dentro de él heredarán automáticamente el grupo del directorio padre, en lugar del grupo principal del usuario que los creó. ¿Cómo lo ves?Una s en lugar de la x para el grupo:drwxr-sr-x Utilidad: Es ideal para directorios compartidos donde varios usuarios necesitan colaborar. Asegura que todos los archivos creados por diferentes usuarios en ese directorio pertenezcan al mismo grupo, simplificando la gestión de permisos para la colaboración.

3. El Sticky Bit (t)

El sticky bit es un permiso que se aplica exclusivamente a directorios. Su función principal es evitar que los usuarios eliminen o renombren archivos de otros usuarios dentro de un directorio compartido, incluso si tienen permisos de escritura sobre ese directorio.

¿Cómo lo ves?

Una t en lugar de la x para «otros»:

drwxrwxrwt

Utilidad: El ejemplo más claro y común es el directorio /tmp. En este directorio, cualquier usuario puede crear archivos y directorios. Sin el sticky bit, un usuario malicioso podría eliminar los archivos temporales de otro usuario. Con el sticky bit activado, un usuario solo puede eliminar o renombrar los archivos y directorios que él mismo posee dentro de /tmp.

Cómo Establecer los Permisos Especiales con chmod

Al igual que los permisos básicos, los permisos especiales se pueden establecer utilizando el comando chmod, tanto con la notación simbólica como con la octal.

Notación Simbólica:

  • setuid:u+s
    • chmod u+s mi_programa
  • setgid:g+s
    • chmod g+s mi_directorio_compartido
  • sticky bit:o+t
    • chmod o+t /var/tmp

Notación Octal:

Los permisos especiales tienen un dígito octal adicional que se coloca al principio de los tres dígitos de permisos básicos (dueño, grupo, otros).

  • setuid: 4
  • setgid: 2
  • sticky bit: 1

Para aplicar, sumas el valor del permiso especial que quieres establecer y lo antepones al número octal de los permisos básicos.

  • Ejemplos:
    • setuid en un ejecutable (755): chmod 4755 mi_programa (El 4 activa setuid, luego 755 para rwxr-xr-x)
    • setgid en un directorio (770): chmod 2770 mi_directorio_compartido (El 2 activa setgid, luego 770 para rwxrwx---)
    • sticky bit en un directorio (777): chmod 1777 /tmp (El 1 activa sticky bit, luego 777 para rwxrwxrwx)
    Si un permiso especial se activa pero el permiso de ejecución (x) no está presente para el grupo o «otros», la s o t se mostrará en mayúscula (S o T), indicando que el permiso especial está presente, pero el bit de ejecución está ausente.

Conclusión

Los permisos especiales en Linux son herramientas poderosas que, cuando se usan correctamente, mejoran la funcionalidad y la seguridad del sistema. Sin embargo, su poder conlleva una gran responsabilidad. El uso descuidado de setuid y setgid en programas no confiables puede abrir brechas de seguridad significativas.

Entender cuándo y cómo aplicar estos permisos, junto con los permisos básicos, es un paso crucial para cualquier administrador de sistemas o usuario avanzado de Linux. Así que, la próxima vez que veas una s o una t en un listado de permisos, ya sabrás que estás frente a algo más que simple lectura, escritura o ejecución. ¡Estás ante una capa adicional de control y seguridad en tu sistema Linux!


Deja un comentario

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

Scroll al inicio