Dominando los permisos de archivos de Linux con el comando 'chmod'

Aprende chmod con modos simbólicos y numéricos, valores predeterminados seguros, cambios recursivos y bits de permiso especiales.

Dominando los Permisos de Archivos en Linux con el Comando 'chmod'

Los permisos de archivos en Linux determinan quién puede leer, modificar o ejecutar un archivo. Cuando un script no se ejecuta, un servidor web no puede leer un archivo o una clave privada es rechazada por ser demasiado abierta, chmod suele ser parte de la solución.

El comando chmod cambia los bits de permiso. Puedes usar modos simbólicos legibles como u+x o modos numéricos compactos como 755.

Leer Cadenas de Permisos

Ejecuta ls -l para ver el tipo y los permisos de un archivo:

ls -l deploy.sh

Ejemplo de salida:

-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh

El primer carácter es el tipo de archivo. Un archivo regular comienza con -, un directorio comienza con d y un enlace simbólico comienza con l.

Los siguientes nueve caracteres son tres grupos de permisos:

  • Usuario: el propietario del archivo.
  • Grupo: los miembros del grupo del archivo.
  • Otros: todos los demás.

Cada grupo puede tener:

  • r: leer el contenido del archivo o listar los nombres del directorio.
  • w: modificar un archivo, o crear/eliminar/renombrar entradas en un directorio.
  • x: ejecutar un archivo o recorrer un directorio.

El permiso de ejecución en directorios es importante. Sin x en un directorio, no puedes entrar ni acceder a los archivos dentro de él por su nombre, incluso si puedes listar algunos metadatos en otro lugar.

Usar Modos Simbólicos para Cambios Pequeños

La sintaxis simbólica se ve así:

chmod [quién][operador][permisos] ruta

quien puede ser u para usuario, g para grupo, o para otros o a para todos. Los operadores son + para agregar, - para quitar y = para establecer exactamente.

Hacer un script ejecutable para el propietario:

chmod u+x deploy.sh

Permitir que el grupo edite un archivo compartido:

chmod g+w shared_document.txt

Eliminar el acceso de escritura para grupo y otros:

chmod go-w config.yml

Establecer a otros solo lectura, reemplazando cualquier permiso existente para otros:

chmod o=r project_plan.txt

Los modos simbólicos son útiles porque solo cambian los bits que mencionas.

Usar Modos Numéricos para Conjuntos Completos de Permisos

Los modos numéricos establecen los permisos de usuario, grupo y otros en un solo comando. Cada permiso tiene un valor:

  • Lectura: 4
  • Escritura: 2
  • Ejecución: 1

Suma los valores para cada grupo:

Modo Significado
7 rwx
6 rw-
5 r-x
4 r--
0 ---

Establecer un archivo de texto normal para que el propietario pueda leer/escribir y todos los demás solo lectura:

chmod 644 important_file.txt

Establecer un directorio normal para que el propietario pueda administrarlo y otros puedan entrar y leerlo:

chmod 755 public_assets

Bloquear una clave privada para que solo el propietario pueda leerla y escribirla:

chmod 600 private_key.pem

Evita 777 a menos que estés en un entorno de prueba temporal y entiendas el riesgo:

chmod 777 scratch

777 permite que cualquier usuario local lea, escriba y ejecute o recorra la ruta. En sistemas compartidos, rara vez es aceptable.

Manejar Archivos y Directorios de Forma Diferente

Los archivos y directorios generalmente necesitan modos diferentes. Los archivos suelen usar 644; los directorios suelen usar 755. Si ejecutas esto a ciegas, harás que cada archivo sea ejecutable:

chmod -R 755 web_root/

Para un directorio web, un patrón más seguro es:

find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +

Luego agrega permiso de ejecución solo a los scripts que realmente lo necesiten:

chmod 755 web_root/scripts/deploy.sh

Usar Bits de Permiso Especiales con Cuidado

Los modos numéricos pueden incluir un cuarto dígito inicial para bits especiales:

Valor Nombre Efecto común
4 SetUID Un ejecutable se ejecuta con el ID de usuario efectivo del propietario del archivo.
2 SetGID Un ejecutable se ejecuta con el ID de grupo efectivo del grupo del archivo; en directorios, las nuevas entradas heredan el grupo del directorio.
1 Sticky bit En directorios, los usuarios solo pueden eliminar archivos que poseen, que posee el propietario del directorio o que root puede eliminar.

Establecer el bit SetGID en un directorio de proyecto compartido para que los nuevos archivos hereden el grupo del directorio:

chmod 2770 shared_group_files

Establecer el sticky bit en un directorio compartido con escritura:

chmod 1777 /srv/shared-upload

El ejemplo clásico es /tmp, que es escribible por todos pero protegido por el sticky bit.

Ten cuidado con SetUID y SetGID en ejecutables. Pueden crear un riesgo grave de escalada de privilegios si el programa es escribible, está mal diseñado o acepta entrada insegura. Muchos sistemas similares a Unix también ignoran SetUID en scripts por razones de seguridad.

Verificar el Resultado

Después de cambiar los permisos, verifícalos:

ls -ld web_root web_root/index.html

Usa stat cuando quieras el modo numérico:

stat -c '%a %n' web_root/index.html

En macOS, el formato de stat es diferente:

stat -f '%Lp %N' web_root/index.html

Conclusión

Usa chmod simbólico cuando quieras agregar o quitar un permiso. Usa chmod numérico cuando quieras establecer el modo completo exactamente. Trata los cambios recursivos con cuidado, mantén archivos y directorios separados, y verifica con ls -l o stat antes de continuar.