Skip to content

[Bug]: Windows NTFS에서 ACL hardening이 5초 후 ETIMEDOUT으로 실패하며 파일시스템 미지원으로 오인 표시됨 #160

Description

@Love0118

Summary

Windows 11의 정상적인 로컬 NTFS 볼륨에서 OpenCodex 사용 중 아래 오류가 간헐적으로 발생했습니다.

ACL hardening failed (ETIMEDOUT) — filesystem may not support per-user NTFS ACLs

오류 발생 후 확인한 대상은 로컬 고정 NTFS 볼륨이었고 볼륨 상태도 정상이었습니다. icacls 조회는 약 9~16ms에 정상 완료됐으며, ~/.opencodex와 주요 파일은 현재 사용자 단독 Full Control 상태로 정상 hardening되어 있었습니다.

설치본의 src/lib/windows-secret-acl.ts를 확인하면 runIcacls()가 아래 세 명령을 각각 고정 5초 timeout으로 실행합니다.

  1. /inheritance:r
  2. broad grant SID 제거
  3. 현재 사용자 /grant:r

이 중 하나가 5초를 넘기면 Node/Bun의 execFileSync()ETIMEDOUT를 반환하지만, sanitizeDiagnostics()는 원인과 관계없이 “filesystem may not support per-user NTFS ACLs”라는 동일한 문구를 출력합니다.

따라서 ACL을 정상 지원하는 NTFS에서도 일시적인 icacls.exe 지연이 파일시스템 미지원처럼 표시되고, required: true인 설정/비밀 파일 쓰기 경로는 실패할 수 있습니다. 뒤 단계에서 timeout이 발생하면 앞 단계만 적용된 부분 상태가 남을 가능성도 있습니다.

기대 동작은 다음과 같습니다.

  • ETIMEDOUT와 실제 ACL 미지원/권한 오류를 구분해서 표시
  • timeout 시 제한적인 재시도 후 ACL 상태를 검증
  • 5초 제한을 늘리거나 설정 가능하게 함
  • 기존 required: true의 fail-closed 보안 동작은 유지

Reproduction

간헐적인 현상이라 현재는 안정적으로 반복 재현되지 않습니다.

  1. Windows 11의 로컬 NTFS 드라이브에 OpenCodex 2.7.25를 설치합니다.
  2. opencodex start로 실행합니다.
  3. OpenCodex를 사용하면서 설정/상태 파일 쓰기가 발생합니다.
  4. 간헐적으로 위 ACL hardening 오류가 표시됩니다.
  5. 같은 볼륨과 경로에서 icacls를 다시 실행하면 수십 ms 이내에 정상 완료됩니다.

Logs and screenshots

ACL hardening failed (ETIMEDOUT) — filesystem may not support per-user NTFS ACLs

OpenCodex: 2.7.25
Node.js: v24.15.0
OS: Microsoft Windows 11 Pro 64-bit, 10.0.26200 (build 26200)
Volume: local fixed disk, NTFS, Healthy, OperationalStatus=OK
Post-incident icacls query: 9–16ms, exit code 0
Current ACL: <USER> only, Full Control

개인정보 보호를 위해 실제 사용자명과 홈 경로는 <USER>로 치환했습니다. ~/.opencodex/crash.log에는 해당 메시지가 기록되어 있지 않아 어느 secret path/단계에서 timeout이 발생했는지는 확인할 수 없었습니다.

Area

CLI

Version

2.7.25

OS

Microsoft Windows 11 Pro 64-bit, 10.0.26200 (build 26200)

Config shape

특정 provider 또는 routing 설정에 의존하는 것으로 보이지 않습니다. 설정과 비밀 값은 첨부하지 않았습니다.

Checks

  • 기존 이슈와 문서를 먼저 검색했습니다.
  • 로그와 진단 정보에서 비밀 값, 토큰, 사용자명 및 개인 경로를 제거했습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions