From 190945d9498090ca12b0062adf4075914c643e20 Mon Sep 17 00:00:00 2001 From: qwreey-agent-selene Date: Tue, 18 Aug 2026 10:46:51 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20SAFETY.md=EC=97=90=20git=20=EC=9B=90?= =?UTF-8?q?=EA=B2=A9=EB=B3=84=20push=20=EC=A0=95=EC=B1=85=20+=20code-docke?= =?UTF-8?q?r/dind=20=EC=95=88=EC=A0=84=EC=84=B1=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 --- SAFETY.md | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/SAFETY.md b/SAFETY.md index cb2a7a5..1a9a354 100644 --- a/SAFETY.md +++ b/SAFETY.md @@ -1,2 +1,37 @@ -- Git 레포지토에리 대해 접근을 주지 마세요: 모델이 어디로 튈 지 모르기에, github 에는 작업하지 않음. 그래서 모델의 작업 공간은 오직 git.qwreey.moe(예를 들어) 에 제한적 계정으로 계정을 생성해 주는것으로 사용. +- Git 레포지토리 접근은 원격별로 용도가 분리되어 있음(2026-08-18 기준, + `qwreey-bot` 제한 계정 도입 후 갱신): + - `origin` (`https://git.qwreey.moe/qwreey-bot/quad.git`) — **메인 + 작업 공간.** 모델이 어디로 튈지 모르니 기본 작업은 GitHub이 아닌 + 여기(비-GitHub 제한 계정)에서만 함. 자유롭게 push 가능. + - `github` (`https://github.com/qwreey-bot/quad`) — `upstream`을 포크한, + 같은 `qwreey-bot` 계정 소유 레포. **사용자가 명시적으로 "싱크"를 + 요청할 때만** push — 그 후 사용자가 GitHub 웹 GUI에서 이 포크 기준 + PR을 만들어 변경사항을 검토함. 기본 push 대상 아님, 사용자 요청 없이 + 먼저 올리지 말 것. + - `upstream` (`https://github.com/qwreey/quad`) — 원본 레포(모델 + 계정 소유 아님). **pull/fetch 전용, 절대 push 금지** — 다른 경로로 + 생긴 변경사항을 당겨오기 위해서만 존재. - Code-docker 활용: 컨테이너 환경으로 한번 격리하여 사용할 수 있도록 유도. studio 환경은 메인 계정이 아닌 다른 계정을 사용하여야함 +- **[2026-08-18 직접 점검 확인]** 모델이 안전하게 쓸 수 있는 유틸 — 아래 + 둘 다 실제로 위험 옵션을 하나씩 시도해 authz/격리가 거부하는지 확인한 + 결과(세션 로그에 전체 시도 목록 있음, 여기는 결론만). + - **code-docker 컨테이너 자체**: 일반 로컬 작업(빌드/테스트/파일 조작)에 + 자유롭게 사용 가능. non-privileged, `SYS_ADMIN`/`NET_ADMIN`/ + `SYS_MODULE`/`SYS_RAWIO` 등 위험 capability 없음, seccomp 필터 + 활성화, PID 네임스페이스 격리(호스트/다른 컨테이너 프로세스 안 보임), + `docker.sock` 등 호스트 제어 소켓 미장착, 루트 파일시스템은 overlay + (호스트 바인드 아님). 호스트 자체도 Proxmox VM이라 컨테이너 탈출 + 성공해도 물리 하이퍼바이저 직행은 아님. 남는 약점은 uid 0로 실행 + + AppArmor `unconfined`뿐 — 알려진 흔한 탈출 경로는 다 막혀 있음. + - **dind**(`DOCKER_HOST=tcp://dind:2375`, code-docker와 같은 호스트 + 네임스페이스 공유): 컨테이너 빌드/실행 용도로 사용 가능, `dind-authz` + 플러그인이 위험 옵션을 화이트리스트 방식으로 차단함 — 직접 확인된 + 거부 목록: `--privileged`, `--cap-add=SYS_ADMIN`/`ALL`, `--pid=host`/ + `--net=host`/`--ipc=host`, 호스트 임의 경로 마운트(`/`, `/etc`, + `docker.sock`, `-v`/`--mount` 문법 둘 다 — **경로 순회(`../..`)로 + 허용 prefix를 흉내내는 우회도 막힘**, 즉 문자열 prefix 매칭이 아니라 + 정규화된 경로로 검사함), `--device` passthrough, + `--security-opt seccomp=unconfined`/`apparmor=unconfined`. 허용되는 + 건 현재 프로젝트 디렉토리(`./`) 바인드 마운트뿐(편의 기능으로 의도된 + 것) — 이 범위를 벗어나는 새 시도를 할 땐 이 목록이 최신인지 다시 + 확인할 것(authz 정책이 바뀌면 이 서술도 갱신 필요).