AI 에이전트가 홈 폴더를 삭제하나요? 에이전트를 Firejail에서 실행하고 안전을 유지하세요

발행: (2025년 12월 15일 오후 06:58 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

Introduction: The Double‑Edged Sword of AI Agents

개발자로서 나는 항상 생산성을 높여줄 도구를 찾고 있다. 오픈‑소스 터널링 툴이자 ngrok의 인기 대안인 Tunnelmole을 만들면서, 나는 코딩 및 비즈니스 관련 작업에 AI 에이전트를 점점 더 많이 활용하고 있다. 올바르게 사용하고 인간이 감독한다면, 이 에이전트들은 엄청난 힘을 발휘한다. 하지만 개발 머신에 무제한 접근 권한을 부여하는 것은 예측 불가능한 인턴에게 비밀번호를 넘겨주는 것과 같다—강력하지만 잠재적으로 재앙적이다. 만약 끔찍한 일이 일어나면 인턴을 탓할 수 없으며, 에이전트를 실행할 안전한 환경을 마련해야 한다.

에이전트가 파일을 읽고, 명령을 실행하고, 코드를 직접 작성하도록 허용하는 편리함은 부인할 수 없지만, 이는 종종 간과되는 거대한 위험을 동반한다. AI가 프롬프트를 오해하면 어떻게 될까? 혹은 더 나아가 에이전트 로직에 버그가 있어 파괴적인 명령을 실행한다면 어떨까?

이것은 이론적인 문제가 아니다. 최근 Reddit 게시물에서 Claude CLI가 전체 홈 디렉터리를 삭제해 Mac을 사실상 초기화했다고 보고되었다:

“Claude CLI deleted my entire home directory – wiped everything.”

문제의 원인은 AI가 생성한 단 하나의 무시무시한 명령이었다:

rm -rf tests/ patches/ plan/ ~/

대부분의 경로는 프로젝트‑특정 디렉터리를 대상으로 하지만, 마지막 ~/는 현재 사용자의 홈 디렉터리로 확장된다. 결과는 모든 문서, 사진, dotfile, 그리고 수년간의 작업이 재귀적으로 강제 삭제되는 것이다.

이 사건은 명백한 경고이다. 우리는 방어 장치를 구축해야 한다. 해결책은 샌드박싱, 즉 AI 에이전트를 제한된 통제된 환경에서 실행해 그 능력을 엄격히 제한하는 것이다.

이 가이드에서는 Firejail이라는 강력한 도구를 사용해 VS Code‑기반 AI 에이전트를 위한 안전한 샌드박스를 만드는 방법을 보여준다. 개인적으로는 Kilo Code를 사용하지만, 이 절차는 GitHub Copilot, Windsurf, 혹은 VS Code 내에서 실행되는 다른 도구에도 적용할 수 있다.

Note: Firejail은 네임스페이스와 같은 Linux 커널 기능에 의존하므로 이 가이드는 Linux(호스트 혹은 VM)에서 동작한다. Windows Subsystem for Linux에서 GUI 앱(VS Code 등)과 함께 동작할지는 보장되지 않는다.

What is Firejail and Why is it Effective?

Firejail은 Linux용 SUID(Set owner User ID upon execution) 보안 샌드박스 프로그램이다. 쉽게 말해, 어떤 애플리케이션이든 매우 제어된 환경에서 실행할 수 있게 해준다. 커널‑레벨 보안 기능인 네임스페이스seccomp‑bpf를 활용해 애플리케이션을 시스템으로부터 격리한다.

Why this approach works

  • Kernel‑Level Enforcement – 제한은 OS 커널에 의해 강제된다. 샌드박스된 애플리케이션(예: VS Code와 그 AI 에이전트)이 파일에 접근하거나 허용되지 않은 명령을 실행하려 하면 커널이 차단한다.
  • Default‑Deny Philosophy – 잘 구성된 샌드박스는 “모두 차단”으로 시작하고, 최소한으로 필요한 동작만 명시적으로 허용한다. 이는 애플리케이션이 할 수 없는 모든 것을 나열하려는 시도보다 훨씬 안전하다.
  • Lightweight and Transparent – Firejail은 가상 머신이 아니라 가벼운 래퍼이며 성능 오버헤드가 거의 없다. 설정이 끝나면 firejail 로 앱을 실행하면 안전한 거품 안에서 동작한다.

배포판의 패키지 관리자를 통해 Firejail을 설치할 수 있다. 예를 들어 Debian이나 Ubuntu에서는 다음과 같다:

sudo apt-get update && sudo apt-get install firejail

Crafting a Secure Firejail Profile for VS Code

Firejail은 기본적으로 code(VS Code)를 포함한 많은 일반 애플리케이션에 대한 기본 프로필을 제공한다. 홈 디렉터리 삭제라는 특정 위험에 대비하기 위해, 우리는 프로젝트 폴더만 접근하도록 제한하는 맞춤형, 보다 강력한 프로필을 만든다.

Step 1: Create the custom profile directory

mkdir -p ~/.config/firejail

Step 2: Create a new profile file for VS Code

touch ~/.config/firejail/code.profile

Step 3: Populate the profile

~/.config/firejail/code.profile 파일을 좋아하는 편집기로 열고 아래 구성을 붙여넣는다. 프로젝트를 보관하는 경로에 맞게 경로를 조정한다.

# Firejail profile for Visual Studio Code
# Highly restrictive for running AI agents safely.

# Persistent local customizations
include code.local
include globals.local

# Disable potentially unsafe includes
ignore include disable-devel.inc
ignore include disable-exec.inc
ignore include disable-interpreters.inc
ignore include disable-xdg.inc
ignore whitelist ${DOWNLOADS}
ignore whitelist ${HOME}/.config/Electron
ignore whitelist ${HOME}/.config/electron*-flag*.conf
ignore include whitelist-common.inc
ignore include whitelist-runuser-common.inc
ignore include whitelist-usr-share-common.inc
ignore include whitelist-var-common.inc
ignore apparmor
ignore disable-mnt

# Block D‑Bus to prevent inter‑process communication
ignore dbus-user none
ignore dbus-system none

# Allow files commonly used by IDEs, then override with a strict whitelist
include allow-common-devel.inc

# --- WHITELISTING ---
# Deny everything by default; only allow the paths listed below.

# VS Code configuration directories
whitelist ${HOME}/.config/Code
whitelist ${HOME}/.config/Code - OSS
whitelist ${HOME}/.vscode
whitelist ${HOME}/.vscode-oss

# IMPORTANT: Change this to point to where you keep your coding projects!
whitelist ${HOME}/projects

# Shell configuration for the integrated terminal
whitelist ${HOME}/.zshrc
whitelist ${HOME}/.bashrc
whitelist ${HOME}/.oh-my-zsh
whitelist ${HOME}/.profile

# Create the Code config directory structure if it doesn't exist (VS Code crashes without it)
mkdir ${HOME}/.config/Code
mkdir ${HOME}/.config/Code/logs

# Security hardening
nosound          # disable sound
noexec /tmp      # prevent execution of files in /tmp

# Load common Electron settings
include electron-common.profile

Step 4: Launch VS Code inside the sandbox

firejail code

이제 VS Code 인스턴스는 프로필에 정의된 제한 하에 실행되며, 허용된 위치 외의 파일에 대한 우발적 혹은 악의적인 접근을 차단한다.

Deconstructing the Security Profile

프로필은 복잡해 보일 수 있지만 전략은 단순하다:

  • ignore 지시문은 기본적으로 허용될 수 있는 항목들을 비활성화해, 원치 않는 접근 권한이 부여되는 것을 방지한다.
  • whitelist 항목은 필수적인 설정 파일과 코드 저장 디렉터리만 읽기·쓰기 권한을 명시적으로 부여한다.
  • **nosoundnoexec /tmp**는 불필요한 서브시스템을 차단해 추가적인 방어를 제공한다.
  • include은 Electron 기반 앱(VS Code)에 필요한 최소 공통 설정만 가져와, 공격 표면을 최소화한다.

모든 것을 기본 차단하고 IDE가 실제로 필요로 하는 것만 선택적으로 허용함으로써, AI 에이전트(또는 손상된 확장 프로그램)가 rm -rf ~/와 같은 파괴적인 명령을 실행할 위험을 크게 줄일 수 있다.

Back to Blog

관련 글

더 보기 »

신뢰할 수 있는 AI 에이전트 구축

개인 AI 어시스턴트의 약속은 위험한 가정에 기반하고 있습니다: 우리가 아직 신뢰할 수 있게 만들지 않은 시스템을 신뢰할 수 있다는 가정 말이죠. 우리는 할 수 없습니다. 그리고 오늘날의 버전은…