Skip to content

Permisos


Cada archivo o carpeta tiene 3 tipos de permisos y 3 categorías de usuarios:


Terminal window
ls -l

Ejemplo:

Terminal window
-rwxr-xr-- 1 francisco users 1234 oct 21 script.sh

Significado:

  • rwx → usuario
  • r-x → grupo
  • r— → otros
  • francisco → dueño
  • users → grupo

Terminal window
chmod u+x script.sh # añadir ejecución al usuario
chmod g-w script.sh # quitar escritura al grupo
chmod o=r file.txt # solo lectura para otros
chmod a+r file.txt # todos pueden leer
Terminal window
chmod 755 script.sh

Terminal window
chown usuario archivo
chgrp grupo archivo
chown usuario:grupo archivo

Ejemplo:

Terminal window
sudo chown francisco:users script.sh

Existen tres permisos especiales en Linux:

El sticky bit se usa en directorios para evitar que otros borren archivos ajenos.

Terminal window
chmod +t /tmp/publico
# o modo numérico
chmod 1777 /tmp/publico

Ver resultado:

Terminal window
ls -ld /tmp/publico
drwxrwxrwt 9 root root 4096 oct 21 09:00 /tmp/publico

drwxrwxrwt → el “t” final indica el sticky bit activo.

Ejemplo típico: El directorio /tmp siempre lo tiene activado.

SUID

Ejemplo: ```bash ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 54256 oct 21 /usr/bin/passwd ```
  • La s en lugar de la x del usuario indica SUID activo.
  • Permite ejecutar con permisos del dueño del archivo (en este caso, root).

Activar o desactivar manualmente:

Terminal window
chmod u+s archivo # activar
chmod u-s archivo # desactivar

SGID

En ejecutables: ```bash chmod g+s archivo ```

En directorios:

Terminal window
chmod g+s carpeta/

Efecto:

Los nuevos archivos heredan el grupo del directorio, útil para carpetas compartidas.
---

Los atributos controlan cómo se comporta un archivo, más allá de los permisos.

Terminal window
lsattr archivo

Ejemplo:

Terminal window
----i--------e----- documento.txt

Hacer un archivo inmutable:

Terminal window
sudo chattr +i archivo.txt

Solo root puede revertirlo:

Terminal window
sudo chattr -i archivo.txt

Modo append-only (solo añadir contenido):

Terminal window
sudo chattr +a log.txt
#!/bin/bash
# Proteger archivos del sistema
ARCHIVOS=("/etc/passwd" "/etc/shadow" "/etc/fstab")
for f in "$(ARCHIVOS[@])"; do
if [ -f "$f" ]; then
sudo chattr +i "$f"
echo "Protegido: $f"
fi
done
lsattr "$(ARCHIVOS[@])"