Noticias
Nueva ubicación en Kazajstán: Almaty High Performance
AC
7 de mayo de 2026
Actualizado el 7 de mayo de 2026

Permiso denegado en LinuxCómo solucionar el error y restaurar el acceso

Linux

Casi todos Linux El administrador se ha encontrado con el error "Permiso denegado" en algún momento. Intentamos ejecutar un script, abrir un archivo, entrar en un directorio o conectarnos a través de SSHy la terminal devuelve el mensaje de bloqueo. La reacción más común es añadir un `chmod 777` y seguir adelante, lo que soluciona el problema pero abre vulnerabilidades de seguridad en el sistema.

En esta guía mostraremos cómo diagnosticar la causa real del error, identificar qué capa está bloqueando el acceso y aplicar la corrección mínima necesaria. Cubrimos el modelo POSIX, el uso adecuado de chmod y chown, escenarios comunes como SSH claves y directorios web, además de capas adicionales como SELinux y atributos extendidos.

Para los ejercicios prácticos, un servidor desechable es una buena idea. VPS Linux on Serverspace funciona bien para probar los comandos en un entorno aislado. Los ejemplos funcionan de la misma manera en Ubuntu, Debian, AlmaLinuxy Rocky.

Qué significa el error "Permiso denegado"

El mensaje aparece cuando el Linux El kernel rechaza una operación porque el usuario actual no tiene permisos suficientes sobre el archivo o directorio en cuestión. El mensaje es casi siempre el mismo, aunque las causas varían considerablemente.

Los contextos más frecuentes incluyen intentar ejecutar un script sin el bit de ejecución, leer un archivo propiedad de otro usuario, escribir en directorios del sistema como /etc o /var/www, acceder a una carpeta a través de cd sin el bit x, y SSH autenticación con claves cuyos permisos son demasiado permisivos.

Antes de aplicar cualquier solución, es útil saber que Linux Comprueba el acceso en tres capas. La primera son los permisos POSIX clásicos (rwx para el propietario, el grupo y otros). La segunda son las ACL extendidas, que permiten reglas más precisas para usuarios y grupos específicos. La tercera son los módulos de seguridad obligatorios: SELinux en RHEL y derivados, AppArmo Ubuntu y Debian.

Terminología: cómo Linux organiza permisos

El control de acceso se basa en tres categorías de sujetos y tres tipos de operaciones. Las categorías son: propietario del archivo (usuario, u), grupo del archivo (grupo, g) y otros usuarios del sistema (otros, o). Cada archivo tiene un único propietario y un único grupo asociado, que se definen al crear el archivo.

Los tipos de operación son leer (r), escribir (w) y ejecutar (x). Para archivos, el significado es directo. Para directorios, existe una sutileza importante: leer lista el contenido, escribir permite crear y eliminar archivos, y ejecutar permite recorrer el directorio, es decir, acceder a él mediante el comando cd y buscar archivos por ruta completa.

La salida de ls -l muestra este modelo en acción:

-rwxr-xr-- 1 maria devs 2048 Mar 10 14:20 deploy.sh

El primer carácter indica el tipo (- para archivo regular, d para directorio, l para enlace simbólico). Los siguientes nueve caracteres forman tres tríos, uno por categoría: rwx para el propietario, rx para el grupo, r-- para los demás.

Existen dos formas de establecer permisos con chmod. La forma simbólica utiliza letras y operadores (chmod u+x script.sh añade permisos de ejecución para el propietario). La forma octal suma los valores 4 (r), 2 (w) y 1 (x) por categoría, lo que produce tres dígitos. Las combinaciones más comunes en el trabajo diario son:

Octal Simbólico Uso típico Lo que otorga
644 rw-r--r-- Archivos de texto, configuraciones El propietario edita, otros leen
755 rwxr-xr-x Directorios, scripts públicos Todos pueden navegar y ejecutar
700 rwx------ ~/.ssh, datos privados Acceso exclusivo para propietarios
600 rw------- SSH claves privadas, archivos .env El propietario solo lee y escribe
775 rwxrwxr-x Carpeta de carga compartida Un grupo escribe, otros leen

Memorizar estas cinco combinaciones cubre la mayoría de las situaciones prácticas. Cualquier otra cosa se puede construir a partir de ellas con pequeñas variaciones.

Cómo funciona el sistema de permisos

Cuando un proceso intenta acceder a un archivo, el núcleo ejecuta una secuencia de comprobaciones. Primero, compara el UID del proceso con el UID del propietario del archivo. Si coinciden, se aplican los bits de propietario. De lo contrario, comprueba si alguno de los grupos del usuario coincide con el grupo del archivo y aplica los bits de grupo. Si ninguna de las dos condiciones se cumple, se aplica la tripleta de otros.

Este flujo tiene implicaciones importantes. Para la eliminación, el permiso de escritura en el directorio padre es más relevante que el permiso en el archivo en sí. Por eso, a veces podemos eliminar archivos de solo lectura sin problemas, siempre que tengamos acceso de escritura al directorio que los contiene.

Otra implicación tiene que ver con el bit de ejecución en los directorios. Si /home/maria/projects no tiene el bit x para el usuario actual, no se podrá acceder a ningún archivo en su interior, ni siquiera con permisos de apertura. La ruta completa al archivo debe ser transitable.

Por último, conviene conocer el concepto de umask. Al crear un archivo nuevo, el sistema parte de 666 (archivos) o 777 (directorios) y le resta el valor de umask. El valor predeterminado de 022 resulta en 644 para archivos y 755 para directorios.

Escenarios prácticos donde aparece el error

Script de shell sin permiso de ejecución

Creamos un script, escribimos unas pocas líneas e intentamos ejecutarlo:

$ ./deploy.sh

bash: ./deploy.sh: Permission denied

La causa es que el archivo se creó sin el bit x. La solución es agregar permisos de ejecución para el propietario:

chmod u+x deploy.sh

./deploy.sh

Si el script debe ejecutarse para todos los usuarios, podemos usar chmod 755. Para uso personal, chmod 700 mantiene el script privado.

SSH clave con permisos demasiado abiertos

Al conectarse a un servidor:

Permissions 0644 for '~/.ssh/id_rsa' are too open.

It is required that your private key files are NOT accessible by others.

Este comportamiento se debe al parámetro StrictModes yes, habilitado por defecto en sshd_config. El servidor rechaza cualquier clave que pueda ser leída por otros usuarios en la máquina cliente. La solución requiere permisos restringidos para la clave y el directorio.

chmod 700 ~/.ssh

chmod 600 ~/.ssh/id_rsa

chmod 644 ~/.ssh/id_rsa.pub

chmod 600 ~/.ssh/authorized_keys

Escribir en un directorio del sistema

Intentar crear un archivo dentro de /etc o /var/www como usuario normal provoca un bloqueo inmediato. La solución depende de la intención. Para cambios puntuales en archivos del sistema, sudo lo resuelve. Para directorios web donde una aplicación escribe regularmente, la ruta correcta es ajustar la propiedad:

sudo chown -R www-data:www-data /var/www/html

sudo find /var/www/html -type d -exec chmod 755 {} \;

sudo find /var/www/html -type f -exec chmod 644 {} \;

Acceder a los archivos de otro usuario

Si María necesita leer archivos creados por Joao, hay dos opciones sencillas. La primera es agregar a María al grupo de Joao y garantizarle acceso de lectura en el grupo:

sudo usermod -aG joao maria

chmod g+r /home/joao/report.txt

El segundo método utiliza ACL para una regla específica sin modificar los grupos:

sudo setfacl -m u:maria:r /home/joao/report.txt

Sistema de archivos de solo lectura o atributo inmutable

En algunos casos, el propio chmod devuelve "Permiso denegado", incluso para el usuario root. Las dos causas más probables son: el sistema de archivos se montó con la opción ro, o el archivo recibió el atributo i (inmutable) a través de chattr. Para diagnosticar:

mount | grep " on / "

lsattr file

Si el archivo tiene el atributo i, lo eliminamos con sudo chattr -i archivo. Si la partición está montada en modo de solo lectura, la volvemos a montar con acceso de escritura o ajustamos /etc/fstab.

Instrucciones paso a paso: diagnóstico y solución

Siempre que aparezca el mensaje "Permiso denegado", recomendamos seguir esta secuencia. Permite llegar al diagnóstico correcto sin necesidad de adivinar.

Paso 1. Identificar al propietario, el grupo y los permisos.

ls -l file

ls -ld directory

id

groups

El comando `ls -l` muestra el propietario, el grupo y los bits rwx. El comando `id` revela el UID del usuario actual, el GID principal y los grupos suplementarios. Al comparar ambos, descubrimos contra qué acceso de triplete se está evaluando. Para obtener información aún más detallada, `stat` proporciona todo, incluyendo marcas de tiempo y número de inodo.

stat file

Paso 2. Ajustar los permisos con chmod

Una vez identificada la causa, ajustamos los permisos. La forma simbólica resulta práctica para realizar cambios específicos:

chmod u+x script.sh

chmod g-w file.txt

chmod o=r file.txt

La forma octal es mejor cuando se configura un conjunto completo de una sola vez:

chmod 644 config.yaml

chmod 755 deploy.sh

chmod 600 ~/.ssh/id_rsa

chmod 700 ~/.ssh

Para realizar ajustes recursivos en árboles de directorios, evite usar `chmod -R` con un solo valor. Utilice `find` para separar archivos y directorios:

find /path -type d -exec chmod 755 {} \;

find /path -type f -exec chmod 644 {} \;

Paso 3. Corrige la propiedad con chown.

Cuando el problema reside en el propietario o grupo del archivo, el comando chown lo soluciona:

sudo chown maria file.txt

sudo chown maria:devs file.txt

sudo chown :devs file.txt

sudo chown -R www-data:www-data /var/www

La sintaxis usuario:grupo abarca ambos ajustes en una sola operación. El indicador -R se aplica recursivamente a los directorios y su contenido.

Paso 4. Usa sudo cuando tenga sentido.

sudo es la herramienta adecuada para operar con archivos del sistema (/etc, /var/log, /usr) y para iniciar servicios que requieren privilegios. Para archivos dentro de /home o tus propios proyectos, es preferible cambiar la propiedad con chown en lugar de ejecutar todo como root, lo que evita crear archivos propiedad de root en tu directorio personal.

Paso 5. Comprobar capas adicionales

Si los permisos POSIX son correctos y el error persiste, es hora de revisar las capas adicionales. Para comprobar las ACL:

getfacl file

If there are entries denying access, adjust with setfacl or remove them with setfacl -b.

Para comprobar SELinux en RHEL, AlmaLinuxo sistemas rocosos:

getenforce

sudo ausearch -m avc -ts recent

Si getenforce devuelve Enforcing y ausearch muestra bloqueos, el SELinux La política está denegando el acceso. La solución depende del contexto y posiblemente implique restorecon, chcon o ajustes booleanos con setsebool.

Para comprobar la aplicaciónArmo Ubuntu y Debian, use sudo aa-status. Si un perfil activo restringe la aplicación, los registros en /var/log/syslog o /var/log/audit/audit.log mostrarán la denegación.

Errores comunes al corregir permisos

Enumeramos los resbalones que causan más problemas y cómo evitarlos.

Aplicar permisos chmod 777 a todo es la solución más tentadora, pero la peor idea. Otorga permisos de lectura, escritura y ejecución a cualquier usuario del sistema. En servidores expuestos, es una receta para el ataque. Identifique el usuario o grupo específico que necesita acceso y otorgue solo lo necesario.

El uso de chmod -R 755 en árboles mixtos agrega innecesariamente el bit x a los archivos regulares. Use find con -type d y -type f para separar archivos y directorios.

Olvidar el bit x en el directorio padre provoca fallos incluso con permisos de apertura en el archivo. Comprueba la ruta completa con ls -ld en cada nivel.

Invertir el orden de chmod y chown en los scripts de aprovisionamiento (DockerLos archivos (Ansible) pueden generar permisos incorrectos si chown altera los bits suid y sgid. El orden seguro es chown primero, luego chmod.

Ignorando SELinux on CentOS, AlmaLinuxy Rocky suele hacer perder el tiempo. Siempre ejecute getenforce y ausearch cuando los ajustes POSIX no solucionen el problema.

Usar sudo donde la propiedad debería ser fija crea archivos propiedad del usuario root en ubicaciones incorrectas. Si una aplicación necesita escribir en /var/www, establezca el propietario como www-data y permita que la aplicación se ejecute con ese usuario.

Conclusión

El mensaje de "permiso denegado" no es tanto un obstáculo, sino más bien una clara señal de que el sistema está funcionando correctamente. Lo ideal es comprender qué capa provocó el bloqueo y corregir el problema en el punto exacto.

Con la práctica, decodificar un mensaje de "Permiso denegado" se convierte en cuestión de segundos. La secuencia funciona en cualquier escenario: `ls -l` e `id` para diagnóstico, `chmod` para ajustar bits, `chown` para corregir la propiedad, `sudo` solo cuando tenga sentido y verificación de ACL y SE.Linux cuando el resto parece estar bien.

Votar:
5 de 5
Calificación promedio: 5
Calificado por: 1
1101 CT Ámsterdam Países Bajos, Herikerbergweg 292
+31 20 262-58-98
700 300
ITGLOBAL.COM NL
700 300
Utilizamos cookies para hacer que su experiencia en el Serverspace mejor. Al continuar navegando en nuestro sitio web, usted acepta nuestros
Uso de Cookies y Política de privacidad.