TechFeedTechFeed
Programming Languages

노드 권한, 허용 읽기, 허용 쓰기, 크론 | 검수 스크립트가 홈 폴더를 열면?

검수 스크립트가 홈 폴더를 열면 허용 목록이 없거나 별표입니다. 노드 권한 모델은 22.13부터 안정이고, 퍼미션 플래그를 켜면 읽기 쓰기가 기본 거절입니다. 쓰기는 포스트 폴더만 엽니다. 2026년 7월 보안 배포 패치를 먼저 봅니다. 개발자, Next.js, 노드, API, 백엔드, 데브옵스, 깃허브, 보안 기준으로 프로세스 칸만 보고 테스트 러너 글, 시크릿 글과 자리를 섞지 않습니다.

by

노드 22.13.0과 23.5.0부터 권한 모델은 실험이 아닙니다. 안정 등급 2입니다. 퍼미션 플래그를 켜면 파일 읽기, 쓰기, 네트워크, 자식 프로세스가 기본 거절입니다. 엔트리 파일만 읽기가 열리고, 그 밖은 접근 거절 코드가 납니다. 검수 스크립트가 홈 폴더를 열면 허용 목록이 별표이거나, 플래그 자체가 빠진 겁니다. 저는 발행 게이트를 이 플래그로 돌리고, 쓰기는 포스트 폴더만 엽니다. 어서트와 커버리지는 노드 테스트 글, 클론 직후 런타임은 미즈 글입니다. 키 파일이 커밋에 붙는 칸은 시크릿 체크 글입니다. 여기는 프로세스가 열 수 있는 칸만 봅니다.


숫자는 2026년 8월 노드 권한 문서와 7월 29일 보안 배포 기준입니다.


22.13부터 안정인데, 플래그 없이는 집이 그대로 열린다

퍼미션을 켜면 읽기와 쓰기, 네트워크, 자식 프로세스가 기본 거절입니다. 엔트리 파일만 읽기가 열립니다.


문서는 20.0.0에 들어왔다고 적습니다. 22.13.0과 23.5.0에서 실험 표기를 뗐고, 안정 등급은 2입니다. 플래그 없이 node scripts/validate-post.js만 돌리면, 그 프로세스는 홈의 키 파일도 읽을 수 있습니다. 운영체제 계정 권한이 그대로입니다. 플래그를 켠 뒤에 허용을 안 주면, 엔트리 말고는 읽기도 막힙니다. 접근 거절 코드와 권한 이름, 자원 경로가 같이 나옵니다.


플래그기본(퍼미션만)검수 크론메일·핑이 있는 크론
허용 읽기엔트리 파일만scripts, posts, data같은 세 칸
허용 쓰기없음없으면 검수만요약 제이슨, 썸네일 폴더
허용 네트워크거절끄기핑 스크립트만 켜기
자식 프로세스거절끄기필요할 때만
별표해당 없음쓰지 않기쓰지 않기

테스트 러너 칸은 노드 테스트 글입니다. 액션이 같은 브랜치에서 겹치는 칸은 동시성 글입니다. 오늘은 프로세스가 집을 여는지 그 칸만 봅니다.


퍼미션만 켜고 허용을 안 주면 엔트리 읽기에서 막힐 수 있습니다 | 공식 예는 인덱스 파일만 읽기가 열린다고 적습니다. require로 옆 파일을 불러오면 그 경로도 목록에 넣습니다.


저장소 루트를 통째로 열면 로컬 환경 파일까지 들어간다

허용 읽기에 점 슬래시만 주면, 저장소 안의 로컬 환경 파일도 읽기가 열립니다. 폴더를 칸으로 나눕니다.


발행 게이트는 포스트 파일과 데이터 파일, 스크립트만 보면 됩니다. 홈의 에스에스에이치 키도, 로컬 환경 파일도 검수에 필요 없습니다. 읽기 목록에서 그 두 칸을 빼면, 실수로 파일 읽기가 집을 가리켜도 접근 거절이 납니다. 쓰기가 없는 검수면 허용 쓰기를 아예 안 줍니다. 요약 제이슨을 갱신하는 명령은 데이터 폴더만 엽니다.


저는 12개 사이트 게이트를 같은 맥에서 돌립니다. 예전에는 노드 한 줄이 저장소 전체를 읽었습니다. 지금은 스크립트와 포스트, 데이터만 엽니다. 타입 파일을 노드가 직접 지우는 칸은 타입 스트리핑 글입니다. 런타임 버전은 미즈 글입니다. 권한 목록은 그 다음입니다. 실수로 파일을 읽는 호출이 집을 가리켜도, 목록 밖이면 거절이 납니다.


검수 | 읽기 세 칸, 쓰기 없음, 네트워크 없음
node --permission \ --allow-fs-read=./scripts/ \ --allow-fs-read=./posts/ \ --allow-fs-read=./data/ \ scripts/validate-post.js 3689
패키지 스크립트 | 검수와 요약을 갈라 둔다
{ "scripts": { "validate:safe": "node --permission --allow-fs-read=./scripts/ --allow-fs-read=./posts/ --allow-fs-read=./data/ scripts/validate-post.js", "summary:safe": "node --permission --allow-fs-read=./data/ --allow-fs-read=./scripts/ --allow-fs-write=./data/posts-summary.json scripts/update-posts-summary.js" } }
플래그 없음과 별표 허용과 폴더 허용을 나눈 세 칸 표
플래그 없으면 집이 열리고, 별표는 플래그를 켠 것과 가깝습니다. 폴더만 엽니다

거절이 어디서 나는지 모르면 감사 모드를 먼저 돌린다

감사 모드는 접근을 막지 않습니다. 거절됐을 경로만 진단 채널에 남기고 실행은 계속됩니다.


문서는 강제 모드가 기본이라고 적습니다. 퍼미션만 켜면 목록 밖은 에러입니다. 검수가 한 번에 스무 파일을 읽는데 어디가 부족한지 모르면, 먼저 감사 플래그로 한 바퀴 돕니다. 채널은 파일과 네트워크, 자식, 워커처럼 칸이 나뉩니다. 구독해서 권한 이름과 자원 경로를 보면, 그 경로만 허용에 넣습니다.


두 플래그를 같이 주면 퍼미션이 이깁니다. 감사는 무시됩니다. 크론에 감사를 오래 두면 거절이 에러로 안 바뀝니다. 목록을 만든 뒤에는 감사 플래그를 뺍니다. 한국 표준시 날짜 헬퍼를 어서트로 보는 순서는 노드 테스트 글입니다. 권한 목록은 그 검사 명령 앞에 붙입니다.


감사 | 거절될 경로만 찍고 실행은 계속
'use strict' const diagnostics = require('node:diagnostics_channel') diagnostics.channel('node:permission-model:fs').subscribe((msg) => { console.error(msg.permission, msg.resource) }) require('./scripts/validate-post.js')

감사와 강제를 같이 켜면 강제가 이깁니다 | 공식 본문이 그 순서를 적습니다. 목록을 찾는 낮만 감사를 쓰고, 크론에는 강제만 남깁니다.


사실 이 모델은 악성 코드를 막는 칸이 아니다

문서는 안전띠라고 적습니다. 믿는 코드가 집을 실수로 만지지 않게 할 뿐, 악성 코드의 보안 보장은 없다고 분명히 씁니다.


노드 보안 정책은 실행하라고 받은 코드를 믿는다고 적습니다. 워커 스레드는 권한을 상속하지 않습니다. 워커를 켜면 그 쪽은 다시 열린 것과 가깝습니다. 환경 파일 플래그와 암호 설정 파일은 환경이 뜨기 전에 읽히므로, 권한 모델 밖에 있습니다. 이미 연 파일 번호로 읽으면 검사를 건너뜁니다. 런타임 확장은 이 모델이 켜져 있으면 못 올리고, 내장 데이터베이스 모듈은 파일 권한을 우회할 수 있다고 적혀 있습니다.


공급망에서 장기 키를 빼는 칸은 오아이디씨 글입니다. 시크릿이 커밋에 남는 칸은 시크릿 체크 글입니다. 오늘은 크론이 집을 넓게 여는 실수만 줄입니다. 모르는 패키지를 이 플래그 하나로 가두지 않습니다.


강제 모드와 감사 모드, 안전띠와 샌드박스를 나눈 비교
감사는 목록을 찾을 때, 강제는 크론에 둡니다. 악성 코드 칸이 아닙니다

허용한 경로 안에 상대 심볼릭 링크가 있으면, 목록 밖 파일까지 따라갑니다. 2026년 7월 29일 보안 배포는 경로 트리가 접두를 과하게 열던 구멍을 고쳤습니다.


문서는 상대 링크가 임의 파일로 이어질 수 있다고 적습니다. 허용 폴더를 만들기 전에 링크가 밖으로 나갔는지 봅니다. 이미 연 파일 번호는 모델 밖입니다. 디버그 프로세스 호출은 인스펙터 권한과 무관하게, 같은 운영체제 사용자의 다른 노드 프로세스에 신호를 보낼 수 있습니다. 다른 사용자로 나누거나, 운영체제 격리로 막으라고 적혀 있습니다.


2026-58043은 높음입니다. 경로 트리가 갈라질 때 허용하지 않은 경로까지 읽기 쓰기가 열릴 수 있었습니다. 공식 보안 글은 활성 줄 22, 24, 26에 영향을 준다고 적습니다. 패치는 22.23.2, 24.18.1, 26.5.1입니다. 그 미만이면 목록을 믿기 전에 런타임을 올립니다. 미즈 글이 그 버전 칸입니다.


패치 버전인지 먼저 본다
node -p "process.versions.node"

22.23.1, 24.18.0, 26.5.0 이하는 목록을 과하게 열 수 있습니다 | 7월 29일 배포 노트가 높음으로 적습니다. 크론에 퍼미션을 달기 전에 패치 버전인지 확인합니다.


오늘 15분에 발행 게이트에 허용 목록을 다는 순서

버전을 보고, 감사로 경로를 모으고, 읽기 세 칸만 남긴 뒤 강제 모드로 크론에 넣습니다.


  1. 노드가 22.23.2, 24.18.1, 26.5.1 이상인지 봅니다. 미만이면 먼저 올립니다.
  2. 검수 명령을 감사 플래그로 한 번 돌립니다. 찍힌 경로만 허용 후보입니다.
  3. 읽기는 scripts, posts, data만 엽니다. 로컬 환경 파일과 홈은 뺍니다.
  4. 쓰기가 없는 검수면 허용 쓰기를 안 줍니다. 요약 갱신만 데이터 파일 하나를 엽니다.
  5. 네트워크와 자식 프로세스는 검수에서 끕니다. 네이버 핑은 별도 명령으로 갈라 둡니다.
  6. 패키지 스크립트에 플래그를 적고, 크론은 그 스크립트만 부릅니다. 워커와 엔픽스는 기본값 그대로 둡니다.

액션에서 장기 키를 빼는 순서는 오아이디씨 글입니다. 같은 브랜치 분이 두 번 깎이는 칸은 동시성 글입니다. 회사 폴더 커밋 메일은 계정 칸 글입니다. 오늘은 게이트 한 줄 앞에 허용 목록만 붙입니다.


발행 게이트에 허용 목록을 다는 여섯 단계 순서
오늘 순서는 패치 확인, 감사 한 바퀴, 읽기 세 칸, 네트워크 끄기입니다

참고 자료


내부 연계: 노드 테스트, 미즈, 시크릿 체크, 타입 스트리핑, 오아이디씨, 액션 동시성


자주 묻는 질문

허용 읽기에 별표를 주면 안 되나?

별표는 파일 읽기를 전부 엽니다. 플래그를 켠 보람이 거의 없습니다. 검수는 스크립트와 포스트, 데이터만 보면 됩니다. 홈과 로컬 환경 파일은 목록에서 뺍니다. 와일드카드 뒤에 붙는 글자는 문서상 무시됩니다. 점 제이에스처럼 보여도 폴더 전체가 열릴 수 있습니다.


워커 스레드에도 같은 목록이 가나?

상속하지 않습니다. 워커를 허용하면 그 쪽은 다시 열린 것과 가깝습니다. 검수 크론은 워커가 필요 없습니다. 허용 워커 플래그를 넣지 않습니다. 자식 프로세스도 같습니다. 필요할 때만 켭니다.


환경 파일 플래그로 읽는 값은 막히나?

막히지 않습니다. 환경이 뜨기 전에 읽히므로 권한 모델 밖입니다. 오픈에스에스엘 설정 파일도 같습니다. 비밀은 그 파일에 두지 않거나, 시크릿 체크 글의 스캔 칸을 먼저 봅니다. 퍼미션은 그 다음입니다.


노드 22 초반에도 목록을 믿어도 되나?

안정은 22.13부터입니다. 그 아래는 실험이었습니다. 7월 29일 높음 패치는 22.23.2입니다. 22.23.1 이하는 경로 트리가 접두를 과하게 열 수 있습니다. 크론에 달기 전에 버전 문자열을 봅니다.


감사 모드를 크론에 그대로 두면?

실행이 막히지 않습니다. 거절이 로그만 되고 홈 읽기는 그대로입니다. 목록을 모으는 낮만 감사를 씁니다. 크론에는 강제만 남깁니다. 두 플래그를 같이 주면 강제가 이깁니다.


엔픽스로 같은 플래그를 넘기면?

노드 옵션으로 넘길 수 있습니다. 패키지를 찾으려면 전역 모듈 폴더나 캐시 읽기가 추가로 열립니다. 발행 게이트는 저장소 스크립트를 직접 부르는 편이 짧습니다. 엔픽스 캐시까지 열면 목록이 다시 넓어집니다.


노드 권한허용 읽기허용 쓰기크론퍼미션개발자Next.js노드API백엔드데브옵스깃허브보안

함께 보면 좋은 문제 해결

EXPLORE / Programming Languages

이어서 읽어보기

전체 토픽 둘러보기