Project Gleipnir: 홈 Linux 워크스테이션에서 AI 코딩 에이전트 격리하기
요약
본 글은 홈 Linux 워크스테이션 환경에서 AI 코딩 에이전트(Claude Code, OpenAI Codex)를 안전하게 격리하고 통제하는 방법을 설명합니다. 각 에이전트를 자체 사용자 및 샌드박스 환경에 배치하여 상호 간의 오작동과 시스템 전체의 위험으로부터 보호하며, 동시에 공유 지식 기반을 통해 협업할 수 있도록 설계했습니다.
핵심 포인트
- AI 에이전트별로 독립된 Linux 사용자 계정을 할당합니다.
- 시스템d와 nftables를 활용해 샌드박싱 및 네트워크 접근을 엄격히 통제합니다.
- 에이전트의 권한 설정보다 커널 레벨 제어(방화벽 등)가 핵심입니다.
- 공유 지식 기반은 Git 스냅샷과 백업으로 복구 기능을 확보했습니다.
Gleipnir: 홈 Linux 워크스테이션에서 AI 코딩 에이전트 격리하기
Patrick Robinson의 홈 랩 기록. 산업 전기 기술자이자 자동화 기술자로, OT/ICS 네트워크 보안 분야로 진출 중; CompTIA Network+ 검증 배지, Security+ 진행 중.
제가 구축한 것
저는 두 개의 AI 코딩 에이전트(Anthropic의 Claude Code와 OpenAI의 Codex)를 사용하여 공부하고 빌드하는 데 도움을 받습니다. 이러한 에이전트는 명령을 실행하고, 파일을 읽고, 인터넷에 접속할 수 있으므로, 저 자신으로 작동하도록 하고 싶지 않았습니다. Gleipnir는 제가 통제하고 테스트한 내부 벽 안에 머무르면서도 워크스테이션에서 실제로 유용하게 사용할 수 있도록 구축한 환경입니다.
목표는 간단했지만 달성하기 위해 실제 작업이 필요했습니다:
- 각 에이전트는 서로로부터 보호됩니다.
- 저는 어느 한쪽 에이전트의 오작동으로부터 보호됩니다.
- 하지만 이 세 주체는 여전히 하나의 지식 기반(저의 학습 노트)을 공유합니다. 왜냐하면 그것이 전체 목적이기 때문입니다.
작동 방식 (레이어)
- 분리된 신원. 각 에이전트는 저 자신으로가 아니라 자체 Linux 사용자로 실행됩니다.
- 샌드박스 실행. 에이전트들은 시스템d를 통해 샌드박싱(sandboxing)과 함께 시작합니다: 읽기 전용 시스템 디렉토리, 다른 사용자들의 홈은 숨겨지고, 명시적으로 나열된 경로만 쓰기가 가능합니다. 리소스 제한은 통제 불능의 프로세스가 기계 전체를 다운시키는 것을 방지합니다.
- 통제된 네트워크 외부 연결. 에이전트별 방화벽 규칙(nftables)은 에이전트가 로컬 필터링 프록시와만 통신하도록 허용하며, 이 프록시는 해당 에이전트의 AI 제공업체만 허용합니다. 각 에이전트의 런처는 이러한 벽이 제자리에 있는지 확인하고 그렇지 않으면 시작을 거부합니다.
- 단일 레이어가 아닌 두 번째 레이어로 정책 적용. 에이전트 자체의 권한 설정도 민감한 영역에 대한 접근을 거부하지만, 저는 그것들을 문 위의 표지판으로 취급합니다. 위에 있는 커널 레벨 제어들이 진짜 문입니다.
- 실제 권한을 가진 공유 지식 기반. 저의 노트는 그들만의 파일 시스템에 존재합니다.
그룹 소유권(Group ownership), setgid 디렉터리 및 기본 ACL(Access Control List)은 스터디 영역을 모두가 쓰기 가능하게 만들지만, 프로젝트 기록, 유료 강의 자료 및 앱 설정은 에이전트에게 읽기 전용이거나 보이지 않게 유지합니다.
- 복구 기능 내장. 공유 노트에 대한 시간별 Git 스냅샷(따라서 삭제되거나 손상된 노트는 복원 가능)과 제가 실제로 테스트해 본 밤샘 암호화 백업을 제공합니다.
제가 작업하는 방식
- 단계적 변경, 각 단계 검토. 모든 변경 사항은 초안 작성되고 다른 에이전트가 교차 확인하며, 저의 승인을 거칩니다. 특권(privileged)이 필요한 모든 변경은 제가 직접, 한 단계씩 수행합니다.
- 파괴하려는 시도로 테스트. 저는 구조화된 테스트를 실행하여 각 제어 장치에 의도적으로 공격을 가합니다: 금지된 곳에 쓰기, 숨겨진 것을 읽기, 심볼릭 링크(symlink)나 하드링크(hardlink)를 통해 빠져나가기, 네트워크에 직접 도달하기. 어떤 제어 장치가 거부하는 것을 제가 지켜본 후에만 유효하며, 정확한 오류가 기록됩니다.
- 정직한 기록. 발견 사항 등록부(findings register), 일일 로그, 그리고 설치된 모든 항목의 체크섬(checksum)이 포함된 정책 변경 로그를 작성합니다. 완전히 증명되지 않은 결과는 '통과'라고 부르기보다 그렇게 표시합니다.
- 검증된 설치. 소프트웨어는 서명된 패키지에서 오거나, 실행되기 전에 공개된 서명 및 체크섬과 비교하여 검증됩니다.
제가 배운 세 가지 것
- 표지판이 아닌 문을 테스트하라. '거부(deny)'라고 되어 있는 설정은 시스템이 실제로 거부하는 것을 지켜보기 전까지는 제어 장치가 아닙니다.
- 쌓인 계층들은 서로를 숨긴다. 한 번의 테스트 라운드에서 두 개의 샌드박스 레이어(sandbox layers)가 가장 깊은 벽에 도달하기 전에 모든 것을 막았습니다. 이는 좋은 보안이지만, 테스트가 내부 레이어가 아닌 외부 레이어를 증명했다는 의미였습니다. 저는 각 테스트가 정확히 어떤 레이어를 증명하는지 기록하는 방법을 배웠습니다.
- 복구 단계는 런북(runbook)의 마지막에 속하지 않는다. 저는 한 번 절차를 위에서 아래로 따라 하다가 실수로 롤백 섹션을 실행한 적이 있습니다. 그때 제가 정확히 그러한 상황을 위해 만든 복원 도구를 사용하여 깨끗하게 복구했으며, 그 이후로는 복구 단계가 항상 별도의 파일에 존재합니다.
다음 계획은
같은 원칙을 네트워킹에 적용하면 다음과 같습니다: 격리된 실험실 세그먼트를 가진 전용 가상화 호스트(방화벽 드롭 카운터로 증명되는 격리), 이후 물리적 네트워킹(관리형 스위칭, VLAN 분할, 전용 방화벽, 트래픽 캡처)을 거치고, 마지막으로 PLC/HMI 장비와 산업 프로토콜이 있는 OT 세그먼트를 구성합니다. 이곳에서 저의 전기 및 자동화 배경 지식이 보안과 만납니다.
실제 설정은 운영상 공개할 필요가 없는 운영 상세 정보를 담고 있기 때문에 설계상 비공개로 유지됩니다. 여기에는 아키텍처, 제어 장치, 테스트 방법론, 그리고 그 근거가 문서화되어 있습니다. 구현 과정을 자세히 설명해 드릴 수 있어 기쁩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기