EPERM (errno 1)

errno 1

LINUX

Messaggio ufficiale (come appare sullo schermo): Operation not permitted

Cercato anche come: Operation not permitted, errno 1, EPERM operation not permitted, npm ERR! code EPERM

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

EPERM, «Operation not permitted» (errno 1), significa che il kernel ha rifiutato un'operazione che richiede privilegi o proprietà che il processo non ha. Si distingue da EACCES: riguarda chi sei (root, proprietario, capability), non i bit dei permessi del file.

Si applica a: Linux, macOS (errno BSD), WSL, Container Docker

Come risolvere EPERM (errno 1)

  1. Controlla con quale utente gira il processo con 'id' e se l'azione richiede root (cambio di proprietà, socket raw, impostazione dell'ora di sistema)
  2. Se il file è tuo, controlla gli attributi immutable o append-only con 'lsattr file' e rimuovili con 'sudo chattr -i file'
  3. In Docker, il profilo seccomp predefinito e le capability rimosse causano EPERM; aggiungi la capability specifica (ad es. '--cap-add=NET_ADMIN') invece di usare '--privileged'
  4. Su macOS, EPERM sui file di Scrivania, Documenti o Download deriva spesso dalla protezione della privacy; concedi l'accesso completo al disco all'app Terminale
  5. Traccia la chiamata che fallisce con 'strace -f -e trace=%file,%process <comando>' per vedere esattamente quale syscall restituisce EPERM
  6. Controlla i rifiuti di SELinux o AppArmor ('ausearch -m avc -ts recent' oppure 'dmesg | grep -i apparmor')
  7. Per npm EPERM su percorsi Windows/WSL, chiudi gli editor o gli scanner antivirus che bloccano la cartella e riprova

Perché succede

Il kernel restituisce EPERM quando il chiamante non ha il privilegio o la capability necessari, quando la destinazione è immutabile, quando una policy seccomp o LSM blocca la syscall, oppure quando si opera in modo privilegiato su un processo o un file di un altro utente.

Domande frequenti

Qual è la differenza tra EPERM ed EACCES?

EACCES significa che i bit dei permessi del file o le ACL negano l'accesso. EPERM significa che l'operazione stessa richiede privilegi o proprietà che non hai, anche se i permessi sembrano a posto.

Perché ottengo EPERM anche con sudo?

Il file potrebbe essere immutabile (chattr +i), l'operazione potrebbe essere bloccata da SELinux/AppArmor o da seccomp, oppure su macOS dalla protezione della privacy.

Errori correlati

Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)

Ultimo aggiornamento: