EACCES (errno 13)

errno 13

LINUX

Messaggio ufficiale (come appare sullo schermo): Permission denied

Cercato anche come: Permission denied, errno 13, EACCES: permission denied, npm ERR! code EACCES, listen EACCES

Terminale Linux che esegue strace con la chiamata di sistema non riuscita e l'errno evidenziati
errno di Linux: individua la chiamata di sistema che fallisce prima di modificare qualsiasi cosa.

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)

  1. 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
  2. Correggi la proprietà dei tuoi file con 'sudo chown -R $USER:$USER <dir>' invece di eseguire il programma come root
  3. 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')
  4. 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
  5. 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))'
  6. Controlla i contesti SELinux con 'ls -Z' e ripristinali con 'restorecon -Rv <percorso>' se i file sono stati spostati in una web root
  7. 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: