Ya hemos aprendido como crear nuestros primeros scripts de Bash usando nano, el editor de texto integrado de nuestra terminal. Le hemos dado los permisos necesarios para permitirle al sistema ejecutarlo.
En esta clase vamos a profundizar más en los permisos de archivos de Linux y como configuralos en nuestros scripts de manera correcta, para que no produzcas de manera accidental , algún agujero de seguridad.
¿Qué son los permisos de los archivos ?
Los permisos de archivos determinan quien puede realizar determinadas acciones en un fichero dado. Para ver los permisos de los archivos podemos ejecutar el comando:
Como puedes ver, esto enumera el contenido de su directorio actual, junto con los permisos para cada entrada. en Linux , los permisos de archivo se representan mediante un conjunto de diez carácteres encadenados.
El primer caracter está solo y los otros nueve se dividen en grupos de tres. El primer caracter es un guión o una letra D. Si es un guión, significa que la entrada (entry), es un archivo. Si es un D, entonces la entry, es un directorio.
El siguiente conjunto de tres carácteres representa los permisos que el propietario del fichero tiene para el mismo.
El primer carácter de este primer grupo de tres, son los permisos de lectura. Si el usario tiene permisos de lectura, veremos una r (read/Leer) ahí. Si no, veremos un guión - . El segundo carácter es para los permisos de escritura, si los tiene, veremos una w, lo que significa que el propietario tiene permisos de escritura por lo que el user puede modificar su contenido.
El tercer caracter es para los permisos de ejecución, si ves una x ahí, entonces el propietario del archivo, tiene permisos de ejecución y podrá ejecutarlo como un script.
Los otros dos grupos de tres tienen el mismo formato, pero representan diferentes clases de usuarios del sistema. Mientras que el primer grupo representa los spermisos para elpropietario del archivo, el segundo conjunto representa los permisos para los files group , el grupo de archivos.
El propietario del archivo se muestra en la tercera columna, que en mi sistema es sofidev.
Mientras que la cuarta columna es el grupo de archivos, que en este caso es el grupo de sofidev.
Volvinedo al tercer grupo de tres, en los permisos, este representa a todos los demás usuarios del sistema. Asi que en este grupo estará cualquier otro usuario que no sea el propietario del archivo, y que no forme parte del grupo sofidev
Permisos en bash Scripts
Para los bash scripts, se recomienda que, a no ser que haya una razón en particular, solo el usuario propietario del archivo, tenga los permisos de leer, escribir y ejecutar el archivo(rwx). Lo que deberían acaso hacer, sería leer(r), pero no permitir que nadie más pueda escribir en el script, exceptoel owner. Con esto evitamos cambios furtivos en nuestros scripts. Además con esto también evitamos que alguien más ejecute nuestros scripts sin autorización.
Si nos dirigimos hacia nuestros scripts que creamos en clases anteriores en ~/.local/bin y hacemos un ls -l, veremos que practicamente todo mundo tiene permisos para ejecutar estos scripts. En estas condiciones, estos scripts podrían ser un verdadero problema de seguridad.
Así que vamos a ver como hacer que nuestros scripts sean más seguros
Manejar los permisos
Para modificar los permisos de nuestros scripts o dar acceso a ellos, usamos el comando chmod:
# Escribimos el comando chmod, luego 774 y el nombre de nuestro script
chmod 744 script1.sh
Bash
Al ejecutar este comando vemos como los permisos de nuestro script se han modificado. Ahora, solo el propietario del script tiene permisos para ejecusión mientras que el resto, solo tienen de lectura. En otras palabras, nadie que no sea el propietario puede modificar o ejecutar el script. Pero, ¿Qué significa el 744?
Numero Octal
En el kernel de Linux y en Bash, los permisos de un archivo se guardan en el disco como 9 interruptores encendidos o apagados (bits).
Imagina la matriz de permisos como 3 focos para cada tipo de usuario:
OWNER GROUP OTHERS
[r] [w] [x] [r] [w] [x] [r] [w] [x]
Bash
Donde:
r (Read): Mide 4
w (Write): Mide 2
x (Execute): Mide 1
Cada grupo de 3 permisos suma como máximo 7 (4+2+1). De ahí nace la notación octal en Bash: es una forma de comprimir 9 interruptores en solo 3 dígitos del 0 al 7.
La tabla mental de Bash
Cuando estás frente a la terminal, no necesitas calcular binarios. En la práctica con Bash, solo te memorizas esta suma básica:
| Valor Octal | Permisos en Bash | ¿Qué significa en la práctica? |
| 0 | --- | Sin acceso alguno. |
| 1 | --x | Solo ejecutar (poco común de forma aislada). |
| 2 | -w- | Solo escribir/modificar. |
| 4 | r-- | Solo lectura (ver contenido con cat, less, etc.). |
| 5 (4+1) | r-x | Lectura y ejecución (típico para scripts/carpetas públicas). |
| 6 (4+2) | rw- | Lectura y escritura (el permiso por defecto de archivos de texto). |
| 7 (4+2+1) | rwx | Control total (leer, modificar y ejecutar). |
Cómo entiende Bash un comando chmod
Cuando tú ejecutas esto en tu terminal Debian:
El comando chmod de Bash mapea directamente posición por posición:
chmod 7 5 4 script.sh
│ │ │
│ │ └─── Others (4 = r--)
│ └─────────── Group (5 = r-x)
└─────────────────── Owner (7 = rwx)
Plaintext
Al hacer un ls -l, el output refeljará exactamente esa conversión:
ls -l
-rwxr-xr-- 1 sofilab sofilab script.sh
Bash
Por ejemplo, /tmp tiene permisos 1777 (drwxrwxrwt), lo que significa que todos pueden escribir (777), pero el Sticky Bit (1) evita que un usuario borre los archivos de los demás.
En resumen para el workflow en Linux
- Tres dígitos:
[owner][group][others]
- Cada dígito es una suma: 4 (lectura) + 2 (escritura) + 1 (ejecución).
- Octal en Bash no es más que el atajo rápido para no tener que escribir
chmod u=rwx,g=rx,o=r.