검색/루트 권한 없는 컨테이너 도구를 잠금과 이미지 다운로드 검증까지 갖춰 만들기

루트 권한 없는 컨테이너 도구를 잠금과 이미지 다운로드 검증까지 갖춰 만들기

루트 권한 없이 동작하는 컨테이너 도구를 만들 때 사용합니다. AI가 변경 중인 컨테이너를 잠그고, 내려받은 이미지 레이어를 모두 검증하며, 호스트 설정을 컨테이너에 넘기지 않고, 프로세스 트리 전체를 종료하며, 백업 복원 시 위험한 경로를 거부합니다.

이 AI 규칙을 사용하려면
## 핵심은 표준 라이브러리만으로 만들고 모바일 호스트를 판별하기 핵심 실행 환경에서 서드파티 의존성을 제거하고, 시스템 조회, 다운로드, 아카이브 처리, 플랫폼 검사에 셸을 호출하는 대신 언어의 기본 기능을 우선 사용하세요. ### 의존성 정책 - 터미널 기능 확인, 사용자 및 그룹 데이터, 바이너리 검사, 아키텍처 감지, HTTP, 아카이브 처리에는 표준 라이브러리를 사용하세요. - 실제 격리에 필요한 컨테이너 실행 환경만 실행하세요. - 지원되는 호스트에 해당 실행 환경이 없다면 대화형 터미널에서만, 그리고 사용자가 동의한 뒤에만 설치를 제안하세요. - 적절한 경우 셸 계층을 추가하지 말고 현재 프로세스를 교체하여 실행 환경을 시작하세요. - 패키지 매니페스트를 버전의 기준 정보로 유지하고, 설치되지 않은 소스 트리를 위한 대체 방법을 문서화하세요. - 모든 명령 별칭과 콘솔 진입점을 하나의 표준 메인 함수로 연결하세요. ### 플랫폼 감지 - 특수 모바일 호스트는 운영체제 증거, 전용 환경 변수, 접근 가능한 플랫폼 접두사 중 독립적인 신호가 최소 두 개 일치할 때만 감지하세요. - 결과를 한 번만 계산하고 경로, 기본 환경, 사용 가능한 플래그, 바인딩, 실행 환경 확장에 일관되게 사용하세요. - 일반 호스트에는 모바일 전용 바인딩 없이 표준 기본 디렉터리 규칙을 기본값으로 적용하세요. ## 폴더 이름으로 컨테이너를 구분하고 특수 게스트를 따로 다루기 디렉터리 식별자, 메타데이터 존재 여부, 레거시 마이그레이션, 게스트 동작을 서로 별개의 결정으로 다루세요. ### 저장소 모델 - 검증된 디렉터리 이름을 컨테이너의 유일한 식별자로 사용하세요. - 조립된 파일 시스템을 해당 디렉터리 아래에 저장하고 이미지 메타데이터는 별도의 매니페스트에 보관하세요. - 레지스트리 이미지가 없을 때는 일반 아카이브 설치에서 이미지 메타데이터를 생략할 수 있도록 하세요. - 새 구조가 필요한 첫 작업에서 레거시 레이아웃을 마이그레이션한 다음 영향을 받은 호환성 링크를 다시 작성하세요. - 실행 환경, 캐시, 컨테이너, 세션, 레이어, 매니페스트 위치를 플랫폼을 인식하는 하나의 경로 모듈에서 파생하세요. - 이미지에서 파생된 별칭과 아카이브에서 읽은 이름을 포함해 모든 진입점에서 컨테이너 이름을 검증하세요. ### 게스트 분류 - 특수 게스트는 단순히 존재하는 경로가 아니라 반드시 파일이어야 하는 센티널로 감지하세요. 동시 세션은 바인드 대상을 디렉터리로 만들 수 있습니다. - 특수 게스트에는 자체 홈, 경로, 접두사, 임시 디렉터리 기준값을 제공하세요. - 자체 항목을 제공하는 게스트 위에 호스트 애플리케이션의 비공개 디렉터리나 설치 접두사를 절대로 바인드하지 마세요. - 해당 게스트 유형에는 호환되지 않는 링크 변환과 식별자를 변경하는 옵션을 비활성화하세요. - 선택적 호스트 시스템 바인딩은 격리 모드와 최소 모드가 아닐 때만 적용하세요. - 공유 접두사 때문에 호스트 바이너리가 게스트 바이너리를 가릴 수 있다면 아키텍처가 다른 특수 게스트를 거부하세요. ## 명령을 올바르게 분배하고 잠금과 임시 파일로 쓰기 작업 보호하기 명령 구문 분석과 잠금 소유권은 중단, 재진입, 프로세스 교체, 분리, 동시 캐시 활동 중에도 올바르게 유지되어야 합니다. ### CLI 흐름 1. 보조 종료 신호를 일반 중단 경로로 연결하여 진행 상태와 부분 파일을 일관되게 정리하세요. 2. 권한 상승 상태의 실행을 치명적 오류로 만들지 않고 경고하되, 컨테이너 실행 환경의 중첩 호출은 거부하세요. 3. 실행 환경이 필요한 명령에서만 이를 검사하고, 검사 전용, 프로세스, 이미지 전용 명령에는 더 좁은 조건을 정의할 수 있게 하세요. 4. 위치 인수를 검증하기 전에 명령 도움말을 가로채고, 일반 구문 분석 전에 알 수 없는 명령을 거부하세요. 5. 내부 프로그램을 실행하는 명령에서는 리터럴 옵션 구분자 뒤의 토큰을 보존하세요. 6. 입력 모드가 의도적으로 요구 사항을 결정하는 경우를 제외하고 필수 인수를 중앙에서 강제하세요. 7. 디스패치 전에 전역 저소음 모드를 적용하되 명령별 의미를 보존하고 오류와 경고는 항상 표시하세요. ### 잠금과 원자성 - 읽기 성격의 세션과 백업에는 공유 잠금을 사용하고, 설치, 제거, 이름 변경, 초기화, 복원, 대상 쓰기에는 배타적 잠금을 사용하세요. - 여러 컨테이너 잠금은 경로를 정렬한 순서로 획득하세요. - 빌드 잠금은 출력 이미지와 아키텍처를 키로 삼고, 공유 캐시 인덱스는 별도의 잠금으로 보호하세요. - 동일한 컨테이너를 변경하는 다른 명령을 호출하는 명령에서는 배타적 잠금이 재진입 가능하게 하세요. - 세션 잠금이 프로세스 교체 후에도 유지되게 하고, 분리된 하위 프로세스가 소유권을 상속하면 잠금을 해제하지 말고 원래 프로세스에서 소유 관계만 분리하세요. - 잠금이 충돌하면 즉시 실패하고, 소유자를 식별할 수 있을 때는 이를 보고하세요. - 모든 캐시 및 센티널 기록기는 임시 파일을 만든 뒤 원자적으로 교체하고 모든 예외에서 정리해야 합니다. ## 내려받은 이미지 레이어를 검증하고 레지스트리 인증 정보 보호하기 레지스트리 참조, 인증, 리디렉션, 다이제스트, 레이어, 아카이브 멤버는 검증되기 전까지 적대적인 것으로 취급하세요. ### 풀과 캐시 - 오프라인 사용에는 완전하게 검증된 캐시를 우선 사용하고, 레이어만 누락되었다면 누락된 레이어만 가져오세요. - 다운로드되는 각 레이어의 해시를 스트리밍 방식으로 계산하고 승격하기 전에 다이제스트를 비교하세요. - 조작된 참조가 캐시 루트 밖으로 벗어나지 못하도록 다이제스트 구문을 파일 시스템 경로로 변환하기 전에 검증하세요. - 아카이브 구현이 안전하게 디코딩할 수 없는 압축 형식은 거부하세요. - 불투명 화이트아웃과 항목별 화이트아웃을 구현하고, 하드 링크 대상을 필터링하며, 멤버 이름의 경로 순회를 거부하세요. ### 인증과 푸시 - 토큰 서비스로 Basic 자격 증명을 전달하기 전에 사용자 이름과 비밀번호가 명시된 형식을 요구하세요. - 다른 호스트로 리디렉션될 때는 인가 헤더를 제거하세요. - 획득한 토큰의 범위를 요청된 풀 또는 푸시 작업으로 제한하세요. - 푸시 전에 저장된 구성을 표준 형식으로 변환하고 그 다이제스트를 매니페스트와 대조하여 검증하세요. - 원격 블롭을 확인하고 누락된 콘텐츠만 업로드하세요. - 지원하지 않는 업로드 모드와 다중 아키텍처 인덱스를 어설프게 흉내 내지 말고 범위에서 제외하세요. - 자격 증명을 노출하지 않으면서 인가 실패를 권한 오류로 표시하세요. ## 게스트 아키텍처를 정확히 알리고 자식 프로세스 환경을 처음부터 만들기 아키텍처 보고와 하위 프로세스 환경은 호스트를 실수로 상속하지 말고 게스트를 설명해야 합니다. ### 아키텍처 - 알려진 실행 파일의 바이너리 헤더에서 설치된 게스트의 아키텍처를 감지하세요. - 네이티브, 레지스트리, 플랫폼 접두사가 붙은 아키텍처 이름을 하나의 매핑으로 정규화하세요. - 네이티브 실행을 사용할 수 없을 때만 에뮬레이터를 선택하고, 에뮬레이터 로더에 필요한 시스템 경로만 바인드하세요. - 호스트 값을 복사하지 말고 게스트 아키텍처와 에뮬레이션된 커널 식별자를 보고하세요. ### 하위 프로세스 환경 - 빈 매핑에서 하위 프로세스 환경을 구성하고 프로세스 교체에 직접 전달하세요. - 우선순위를 의도적으로 적용하세요. 기준값, 필터링된 이미지 변수, 허용된 호스트 변수, 사용자 재정의, 식별자 변수, 터미널 변수 순입니다. - 이미지 변수와 사용자 변수는 모든 모드에 적용하되, 모바일 호스트 변수는 일반 비격리 모드로 제한하세요. - 최소 모드에서는 명시적으로 필요한 경우가 아니면 기준 경로, 호스트 통합 변수, 사용자 식별자를 생략하세요. - 로그인 프로필을 작성하기 전에 변수 이름을 검증하고 값을 안전하게 따옴표로 감싸세요. - 세션별 변수, 실행 환경 내부 변수, 로더 변수, 식별자 변수는 영구 프로필에서 제외하세요. - 실행 전에 로더 사전 로드 변수를 제거하고 동시 세션에서 공유 호환성 디렉터리를 안정적으로 유지하세요. ## 컨테이너를 백그라운드로 실행하고 프로세스 트리 전체를 종료하기 실행, 분리, 종료, 빌드 작업은 매니페스트 동작, 잠금 수명, 이식성, 프로세스 소유권을 보존해야 합니다. ### 실행과 분리 - 컨테이너 이미지 의미 체계에 따라 이미지 진입점과 명령 값을 결합하세요. - 명시적인 작업 디렉터리 재정의를 따르고, 그렇지 않으면 이미지 설정이나 파일 시스템 루트를 사용하세요. - 분리 분기로 들어가기 전에 명령 미리 보기 모드를 결정하세요. - 이중 포크와 새 세션으로 분리하고 표준 스트림을 리디렉션한 뒤 최종 실행 환경 프로세스를 손자 프로세스에 등록하세요. - 최종 프로세스 식별자를 포그라운드에 전달하고 분리된 하위 프로세스가 상속된 컨테이너 잠금을 계속 보유하게 하세요. ### 안전한 종료와 빌드 - 활성 세션 레지스트리에서만 종료 대상을 확인하세요. - 루트 실행 환경 프로세스만이 아니라 전체 하위 프로세스 트리를 종료하세요. - 순환에 안전한 부모 맵을 만들고, 현재 프로세스나 시스템에 중요한 프로세스 식별자에는 절대로 신호를 보내지 말며, 트리를 순회하기 전에 루트 프로세스의 실행 파일을 검증하세요. - 기본적으로 정상 종료 신호를 사용하고 이름이나 숫자로 명시적으로 재정의할 수 있게 하세요. - 실행 전에 빌드 단계와 전역 인수를 분석하고 대상을 조기에 검증하며, 메타데이터, 실행, 복사, 추가 작업을 전용 처리기로 디스패치하세요. - here-document가 입력을 제공하는 경우가 아니면 빌드 단계를 격리된 비대화형 방식으로 실행하세요. - 빌드 캐시 항목은 부모 상태, 명령, 관련 추가 입력을 키로 삼고 캐시 인덱스 업데이트를 잠그세요. - 참조된 파일의 콘텐츠는 보존하면서 실행 환경 호환성 메타데이터는 이식 가능한 레이어 스냅샷에서 제외하세요. ## 컨테이너를 백업·복원하며 위험한 아카이브 항목 거부하기 아카이브와 터미널 출력은 신뢰 경계를 넘으므로 컨테이너 상태나 대화형 프롬프트를 손상시키면 안 됩니다. ### 백업과 복원 - 각 컨테이너를 선택적 메타데이터와 파일 시스템 트리가 포함된 하나의 아카이브 루트 아래에 저장하세요. - 읽을 수 없는 하위 트리를 백업할 수 있게 만들고, 장치와 통신 엔드포인트를 필터링하며, 소유권 메타데이터를 정규화하세요. - 명시적인 출력 대상이 제공되지 않으면 대화형 터미널로 바이너리 아카이브를 출력하지 마세요. - 스트리밍 입력을 포함해 아카이브 데이터와 표준 형식에서 압축 방식을 감지하세요. - 레거시 아카이브 레이아웃의 루트를 현재 컨테이너 구조에 맞게 다시 설정하세요. - 비어 있거나 현재 디렉터리, 부모 디렉터리 또는 유효하지 않은 컨테이너 이름을 가리키는 멤버는 거부하세요. - 대상 잠금을 획득하고 해당 컨테이너의 첫 번째 유효한 멤버가 복원할 준비가 된 경우에만 기존 파일 시스템을 비우세요. ### 터미널 및 명령 통합 - 형제 프로세스의 비밀번호 또는 전체 화면 프롬프트가 터미널 에코나 정규 모드를 소유하는 동안에는 정보성 터미널 쓰기를 억제하세요. - 도움말 콘텐츠를 데이터로 유지하고 문서화된 너비 범위 안에서 반응형으로 렌더링하세요. - 모든 새 명령을 디스패치, 구문 분석 메타데이터, 필수 인수, 도움말 데이터, 별칭 맵에 등록하세요. - 모든 새 소스 파일에서 패키지 라이선스 헤더와 명명 규칙을 유지하세요.