Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

npm EACCES 권한 거부가 뜨나요? sudo·chown·prefix 변경 전에 실패 경로부터 확인하세요

캐시, 프로젝트, 전역 prefix, 컨테이너 오류는 비슷해 보여도 소유자가 다릅니다. 변경 전에 정확한 경로와 범위를 기록하세요.

세 파일 시스템 범위와 확대된 npm 실패 경로를 보여 주는 원본 개념 일러스트.
Watch at Ease 원본 개념 일러스트: 소유권이나 권한을 바꾸기 전에 거부 경로를 분류합니다. Watch at Ease / OpenAI-generated

EACCES는 한 파일 시스템 작업이 거부됐다는 뜻일 뿐 npm 전체, 캐시, 프로젝트 또는 전역 설치 prefix가 모두 망가졌다는 뜻이 아닙니다.

핵심 단서는 정확한 `npm ERR! path`, syscall, 실행 계정입니다. 소유권, 권한, 캐시, prefix 또는 사용자를 바꾸기 전에 이 세 가지를 보존하세요.

이 가이드는 사용자 캐시, 로컬 프로젝트, 전역 prefix, 컨테이너/CI 마운트의 네 범위로 나누고 읽기 전용 증거 카드를 만듭니다.

하나의 오류 코드가 네 권한 범위를 가리킬 수 있습니다

`~/.npm`은 사용자 캐시, 프로젝트 안의 `node_modules`는 작업 트리, `npm config get prefix` 아래 경로는 전역 설치를 가리킵니다. `/workspace`, `/app`, 마운트 볼륨이나 예상 밖 HOME은 컨테이너, CI, 원격 작업공간 계정 불일치일 수 있습니다.

각 분기의 소유자와 조치는 다릅니다. prefix 변경은 `/var/test/node_modules`를 쓰기 가능하게 만들지 않고, 캐시 재귀 변경은 읽기 전용 마운트를 고치지 않습니다. sudo 재실행은 새 root 소유 파일을 만들 수 있습니다.

변경 전에 읽기 전용 증거 카드를 만드세요

EACCES 블록 전체와 code, syscall, path, cwd, Node/npm 버전, 원래 명령을 저장하세요. `npm config get cache`, `npm config get prefix`, `npm prefix`, `npm root -g`, 현재 계정과 작업 디렉터리도 기록합니다.

macOS/Linux에서는 `ls -ld` 또는 `namei -l`, 컨테이너에서는 UID/GID, HOME, 마운트, Windows에서는 `Get-Acl`을 확인하세요. 레지스트리 토큰이나 `.npmrc` 내용은 티켓에 붙이지 마세요.

경로가 npm 캐시면 소유권과 런타임을 먼저 확인하세요

실패 경로가 캐시 아래라면 프로젝트는 정상적으로 쓰기 가능할 수 있습니다. 캐시와 부모 소유자, 현재 UID, 과거 sudo나 컨테이너가 같은 HOME에 썼는지 비교하세요. `npm cache verify`는 무결성 검사이지 권한 진단이 아닙니다.

npm이 출력한 chown 명령을 무조건 실행하지 마세요. Termux 사례는 root 소유 진단 자체가 환경과 맞지 않을 수 있음을 보여줍니다. 실제 오소유를 확인한 뒤 HOME 소유자가 좁은 범위의 복구를 검토해야 합니다.

경로가 프로젝트 안이면 프로젝트 경계를 고치세요

`/var/test/node_modules`, 저장소 또는 마운트 작업공간에서 실패하면 현재 계정이 로컬 설치 위치에 쓸 수 없습니다. prefix 변경은 해당 디렉터리를 바꾸지 않습니다. 프로젝트 소유자, 그룹, ACL, 마운트 모드와 생성 계정을 확인하세요.

검토 없이 `chmod -R 777`, `chmod a+w`, 공유 트리 재귀 chown을 쓰지 마세요. 의도된 계정/그룹으로 복구하거나 작업공간 소유자로 빌드하세요.

경로가 전역 prefix면 npm의 지원 경로를 사용하세요

npm 문서는 Node 버전 관리자 또는 사용자 소유 prefix를 권장하며, 간헐적 명령에는 `npx`도 안내합니다.

실패 경로가 실제 전역 prefix 아래인지 먼저 확인하세요. 관리 기기의 시스템 Node 디렉터리는 관리자 정책일 수 있으므로 승인된 런타임을 요청하세요.

컨테이너와 CI는 UID, HOME, 마운트를 맞춰야 합니다

컨테이너에서는 이름보다 숫자 UID/GID가 중요합니다. 호스트 마운트의 소유자, 공유 또는 읽기 전용 HOME, 이전 root 단계를 양쪽에서 기록하세요.

지속 가능한 해결은 UID 정렬, 작업별 캐시, 마운트 정책 수정입니다. 볼륨 소유자 승인 없이 임시 컨테이너에서 호스트 볼륨을 재귀 chown하지 마세요.

가장 작은 승인 조치를 선택하고 인계하세요

실패 경로, syscall, 계정, 캐시, prefix, 프로젝트 소유자, 환경 유형을 기록하고 네 분기 중 하나로 분류하세요.

예상 밖 경로, 공유 소유권 불일치, 읽기 전용 마운트, 관리 런타임, 알 수 없는 계정, 권한 확대가 있으면 중지하세요. 더 강한 계정으로 오류를 숨기는 것이 아니라 의도된 계정이 의도된 작업을 수행하는 것이 해결입니다.

캐시·프로젝트·전역·컨테이너 실패를 읽기 전용 점검으로 보내는 원본 개념 일러스트.
Watch at Ease 원본 개념 일러스트: 각 범위에는 고유 증거와 소유자가 있으며 범용 sudo 지름길은 없습니다. Watch at Ease / OpenAI-generated