EACCES (errno 13)
errno 13
Messaggio ufficiale (come appare sullo schermo): Permission denied
Cercato anche come: Permission denied, errno 13, EACCES: permission denied, npm ERR! code EACCES, listen EACCES
Che cosa significa
EACCES, «Permission denied» (errno 13), significa che i bit di modalità del file, le ACL o un modulo di sicurezza hanno negato l'accesso richiesto. Compare quando si legge, scrive o esegue un file, quando si apre una porta sotto la 1024 come utente normale e spesso con 'npm install -g'.
Si applica a: Linux, macOS (errno BSD), WSL, Container Docker
Come risolvere EACCES (errno 13)
- Controlla permessi e proprietario lungo tutto il percorso con 'namei -l /percorso/completo/del/file'; ogni directory richiede il permesso di esecuzione (x) per essere attraversata
- Correggi la proprietà dei tuoi file con 'sudo chown -R $USER:$USER <dir>' invece di eseguire il programma come root
- Se l'esecuzione di uno script fallisce, aggiungi il permesso di esecuzione con 'chmod +x script.sh' e verifica che il filesystem non sia montato 'noexec' ('mount | grep noexec')
- Per EACCES con 'npm install -g', usa un gestore di versioni di Node (nvm, fnm) oppure imposta un prefisso di tua proprietà con 'npm config set prefix ~/.npm-global' invece di sudo
- Per 'listen EACCES' sulle porte 80/443, usa un reverse proxy, una porta superiore a 1024 oppure assegna 'sudo setcap cap_net_bind_service=+ep $(readlink -f $(which node))'
- Controlla i contesti SELinux con 'ls -Z' e ripristinali con 'restorecon -Rv <percorso>' se i file sono stati spostati in una web root
- Nei volumi Docker, fai corrispondere UID/GID dell'utente del container ai file dell'host oppure usa l'utente documentato dell'immagine
Perché succede
L'accesso viene verificato in base ai bit proprietario/gruppo/altri, alle ACL POSIX e agli LSM come SELinux e AppArmor. Le cause tipiche sono bit di esecuzione mancanti sulle directory padre, file creati da root, mount noexec e porte privilegiate.
Domande frequenti
Devo usare sudo per risolvere EACCES?
Evita di farne un'abitudine. Correggi proprietà o permessi del percorso specifico, oppure esegui il programma in una posizione scrivibile dall'utente; sudo può creare file di proprietà di root che causano altri errori in seguito.
Perché Node dice 'listen EACCES: permission denied 0.0.0.0:80'?
Su Linux le porte sotto la 1024 richiedono privilegi. Usa una porta più alta dietro nginx oppure assegna la capability cap_net_bind_service.
Errori correlati
Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)
Ultimo aggiornamento: