Bazofia o maravilla: la equis mayúscula y la equis minúscula en Linux y sistemas UNIX-Like.
Creando un script para la descarga, compilación e instalación de Trinity Desktop en Linux, me topé con tener que usar una equis mayúscula en un chmod:
chmod -R go+rX /opt/trinity
Esto me sucedió al ver que un "ls -l" apuntando al directorio /opt/trinity, me devolvía esto:
drwx------ 9 root root /opt/trinity
El significado: solo root podía iniciar sesión gráfica en el nuevo escritorio que acababa de instalar. LightDM ni siquiera "veía" el archivo que estaba dentro de ese directorio y que era fundamental para iniciar sesión usando el escritorio Trinity.
Cuando "make install", en pasos anteriores, creó ese directorio, le dejó, de paso, permisos root, haciendo que LightDM no pudiese manipular los archivos internos de ese directorio y que descartara el intento silenciosamente.
Al haber descubierto eso, en lo primero que pensé, fue en correrle al directorio un
chmod -R 755 /opt/trinity
pero también pensaba en que estaba ante la última fase antes de que el escritorio arrancara, y que lo único que faltaba era acceso a ese directorio... Quizás yo estuviese vulnerando la seguridad al abrir todo un camino recursivo de permisos tal vez innecesarios dentro de todo el directorio, ejecutando la línea de arriba (chmod -R 755...)...
En este preciso instante, me puse a conversar con Gemini. El chat con Claude estaba tan sobresaturado de logs hiper extensos, que yo conversaba por fuera con Gemini para las "pavadas" que iban apareciendo.
Le pregunté por qué Claude había sugerido esa bazofia de línea inicial (...-R go+rX...).
Fue entonces que aprendí que, en realidad, hubiera estado mal hacer el "chmod 755": lo que correspondía era, ni más ni menos que "chmod -R go+rX /opt/trinity".
El porqué de esta sintaxis ininteligible y contraintuitiva, es porque si intentáramos un "chmod -R 755", romperíamos los permisos de ejecución de todos los archivos involucrados en el proceso.
Al aplicarle "755" a todo (tabla rasa), todos los archivos contenidos en /opt/trinity ganarían gratuita e inesperadamente un bit de ejecución, y el sistema pasaría a verlos a todos ellos como a programas ejecutables, así fueran recetas de flan casero y de pucherito de gallina (¡gracias, Miguel, por el tangazo que me hiciste escuchar, también, inesperadamente!)
Por eso mismo es que se inventó el mamotreto "go+rX", porque es una forma directa en Linux de operar sobre "carpetas y archivos" con una sola línea, sin bucles ni condicionales, tocando solo lo que debe ser tocado y nada más: solo las carpetas.
El "go" significa "grups y others" y el "+rX" significa "read and eXecution".
Este es el verdadero por qué de la "X" mayúscula.
Pero una cosa es "decir", otra es "mostrar" y otra "demostrar".
En una carpeta, "x" no significa "ejecutar", significa "entrar".
Si tenés una carpeta SIN permiso "x", aunque seas el dueño, no vas a poder ingresar a ella a menos que seas root (o que le asignes manualmente "+x", cosa que un programa, por si solo, no hará nunca).
Mirá la prueba que hice en su momento:
mkdir masequis
touch masequis/contenido.txt
echo "Hola" > masequis/contenido.txt
cat masequis/contenido.txt
Creé un directorio llamado "masequis", dentro de él creé un archivo llamado "contenido.txt". Escribí en ese archivo la palabra "Hola" y luego intenté leerla. La terminal devolvió, tal como se esperaba:
HolaLuego, le quité el atributo de "ejecución" (ingreso) a la carpeta, y traté de leer el archivo que estaba alojado dentro de la misma.
chmod -x masequis/
cat masequis/contenido.txt
Pero esta vez,la terminal no devolvió un "Hola", sino un
cat: masequis/contenido.txt: Permiso denegado
Pensé: "Gemini -al menos en parte- tiene razón. Voy a seguir adelante, pero haré una prueba acerca de "X" y el "bit de ejecución en un archivo".
Es decir: me faltaba comprobar lo del "+X" (equis mayúscula).
Entonces, hice esto:
Para explicarlo, lo dividí en 3 bloques (amarillo, anaranjado, rojo) para que vieras la secuencia. Pese a que la imagen es de calidad, se ve demasiado chiquito el texto. Por eso lo traigo acá abajo. Lo que hago primero que nada (bloque amarillo) es muy similar a lo anterior: crear un directorio, crear un archivo dentro de él, meterle dentro un texto, asegurarme de que EL ARCHIVO no tenga permisos de ejecución, y verificar todo.
mkdir prueba
echo "Fue posible leer este archivo." > prueba/incógnito.txt
chmod -x prueba/incógnito.txt
ls -l prueba
cat prueba/incógnito.txt
La terminal devuelve lo esperado:
-rw-r--r-- 1 entropia entropia 31 jul 22 17:56 incógnito.txt
Fue posible leer este archivo.
Luego, hago esto (bloque anaranjado): quitar permisos de ingreso A LA CARPETA e intentar leer el archivo que la misma contiene.
chmod -x prueba;ls -l prueba
cat prueba/incógnito.txt
La terminal, ahora, devuelve:
ls: no se puede acceder a 'prueba/incógnito.txt': Permiso denegadoEntonces, para probar la sintaxis sugerida por Claude y explicada por Gemini, por último, hice lo siguiente (bloque rojo): aplicar RECURSIVAMENTE permisos EQUIS MAYÚSCULA (solo a carpetas) y comprobar a ver si el archivo fue tocado o no, ya que con equis minúscula hubiese sido afectado todo, sin distinción, hasta el último elemento presente ahí adentro.
total 0
-????????? ? ? ? ? ? incógnito.txt
cat: prueba/incógnito.txt: Permiso denegado
chmod -R +X prueba
ls -l prueba
cat prueba/incógnito.txt
La terminal, finalmente, devuelve no solo el texto, sino la confirmación buscada: "X" afecta SOLO A CARPETAS, mientras que "x" afecta A TODO.
-rw-r--r-- 1 entropia entropia 31 jul 22 17:56 incógnito.txt
Fue posible leer este archivo.
¿Te das cuenta de lo que estoy intentando mostrarte?
La X mayúscula sirve para tocar todas las carpetas y saltearse los archivos, mientras que la x minúscula toca todo.
Me costó confiar en esa información: nunca la había comprobado, ni había tenido que utilizarla. Esto, creo que demuestra que las inteligencias artificiales pueden ayudar a aprender, solo si somos críticos con lo que nos devuelven y tomamos verdadera responsabilidad sobre el resultado final.
Te dejo un ejercicio, para que lo pruebes.
1. Creá estos 3 directorios, y al final, un archivo:
dir1/dir2/dir3/archivo.txt
Aplicá:
chmod -x dir1/dir2/dir3/programa.sh
chmod -x dir1/dir2/dir3
¿Quitaría, esto, permisos de ejecución al archivo?
¿Se podría acceder a dir3?
¿Y a los directorios anteriores?
2. Luego hacé:
chmod -x dir1/dir2
¿Podrías acceder al dir2?
¿Y al directorio anterior?
3. Luego, ejecutá:
chmod -x dir1
¿Podrías acceder al dir1?
¿Y a sus subdirectorios?
4. Finalmente:
chmod -R +X dir1
¿Quedarían habilitados nuevamente todos los directorios?
¿Ganaría, el archivo, un bit de ejecución?
0 Comentarios:
Publicar un comentario