PI가 수행하는 작업을 제한하려면 어떻게 해야 할까요?
How do you handle restricting what PI is allowed to do?
핵심 요약
AI 에이전트의 위험한 명령 실행을 방지하기 위해 bash 명령 필터링 대신 샌드박스 환경을 구축하라는 조언이 주를 이룹니다.
- 샌드박스 도입 — Bwrap이나 컨테이너를 사용하여 에이전트의 접근 권한을 격리함
- 커널 수준 제어 — OS 커널 레이어에서 샌드박스를 적용하여 보안을 강화함
- 도구 활용 — Nono.sh나 agent-safehouse 같은 전용 보안 도구 사용을 권장함
- 환경 격리 — 호스트 OS를 보호하기 위해 개발 컨테이너나 가상 머신을 활용함
내 목표는 AI가 PI를 통해 할 수 있는 일 중 파괴적이거나 원치 않는 행동을 줄이는 거야. 일어날 확률은 낮지만, 한 번이라도 터지면 진짜 골치 아픈 문제거든. 지금 집중해서 파고 있는 핵심은 bash 도구 호출 명령어들이야.
PI의 도움을 받아 처음 시도했던 방식은 대충 이런 식의 확장 기능을 만드는 거였어:
-
사용된 도구가 bash라면
-
도구가 호출하는 모든 명령어를 확인한다
-
DENY, ASK, ALLOW라는 3개의 명령어 리스트를 만들고, 리스트에 없는 명령어는 사용자한테 분류하라고 시킴 [확장 기능이 내 선택을 저장하는 보충 파일을 덮어씀]
-
DENY 리스트에 하나라도 있으면 정보를 포함해서 명령어 거부 [에이전트가 의도를 파악하고 우회 시도를 줄이도록 안내하는 정보]
-
ASK 리스트에 하나라도 있으면 사용자에게 확인 요청 [헤드리스 모드면 정보와 함께 거부]
-
전부 ALLOW 리스트에 있으면 명령어 실행
처음엔 꽤 잘 돌아가는 듯했는데, PI가 짜내는 명령어들이 생각보다 복잡하더라고. 뭐가 명령어고 뭐가 아닌지 제대로 구분하는 파서를 만드는 게 도저히 안 됐어. 예를 들어 첫 번째 버전은 이걸 썼거든:
.split(/&&|\|\||[;|]\s*| /)
근데 이게 ls | grep "option1|option2" 같은 걸 제대로 분류 못 하고 헛짓거리를 하더라고.
"option2"를 명령어로 인식해서 분류해달라고 징징대는 식이었지.
몇 번 더 수정해 봤는데 완벽한 해결책은 안 나오더라.
게다가 에이전트가 워낙 "목표 지향적"이라서, 확장 기능의 ALLOW 리스트를 수정해버리는 식으로 제한을 우회하려고 할 수도 있다는 지적을 받았어.
가장 간단한 해결책은 이 파일을 root:root 소유의 644 권한으로 바꾸고 확장 기능이 동적으로 업데이트 못 하게 막는 거였지. 리스트에 없는 명령어는 내가 직접 root 권한으로 추가해야 하지만, 뭐 세상 망하는 것도 아니니까. 파일 소유자가 root면 편집 도구도 함부로 못 건드리잖아.
파서만 완벽했어도 어떻게든 썼을 텐데, 지금 상태는 영 엉망이라서 말이야. 제대로 쓸만한 걸 만들 수 있을지도 의문이고.
혹시 비슷한 문제 겪어본 사람 있어? 다들 어떻게 해결했냐? 이 문제 해결해 주는 괜찮은 확장 기능 있으면 추천 좀 해줘.
아니면 그냥 샌드박스에 가두는 게 유일한 답인가?
참고로 나는 주로 로컬 AI를 돌려. 16GB VRAM에 쑤셔 넣은 Qwen3.8 Q3_S를 쓰고, 추론 엔진은 llama.cpp [rocm + hip 빌드]를 사용 중이야. PI는 워낙 가볍고 시스템 프롬프트도 작아서, 90~100k 토큰 정도 되는 제한된 컨텍스트를 알뜰하게 써먹기엔 아주 좋아.
