![スクリーンショット 2026-03-14 22.03.47.png]()
晚上好,我是 miruky。
各位,有在使用 Claude Code 嗎?
Claude Code 是非常強大的 AI 程式碼代理人,但因為它能夠執行終端機指令與讀寫檔案,若忽略安全性設定可能會帶來意想不到的風險。
本文彙整了為安全使用 Claude Code 需要立即設定的 10 項設定,與大家分享。
本文基於 2026 年 3 月時點的 Claude Code 官方文件。
這是最重要的設定。
啟用沙箱後,Claude Code 執行的 Bash 指令會在作業系統層級被隔離,對檔案系統與網路的存取將會受到限制。
// .claude/settings.json
{
"sandbox": {
"enabled": true
}
}
macOS 使用 Seatbelt,Linux 使用 Bubble Wrap 的沙箱。啟用後可透過 /sandbox 指令檢查狀態。
沙箱是 2025 年後半引入的比較新功能,尚未啟用者請優先設定。
沙箱預設提供「逃脫出口(escape hatch)」,某些指令可能會在沙箱外執行。請完全封堵此機制。
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false
}
}
將 allowUnsandboxedCommands 設為 false,可將透過 dangerouslyDisableSandbox 參數繞過沙箱的行為完全停用。
可使用 permissions.deny 明確阻擋不希望 Claude Code 執行的指令。
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(git push *)",
"Bash(chmod 777 *)"
]
}
}
curl 與 wget 雖然預設就已被阻擋,但明確將它們加入 deny 規則可避免被非預期的允許設定覆寫。
規則的評估順序為 deny → ask → allow,deny 規則具有最高優先權。
阻擋對包含 .env、機密或認證資訊的檔案的存取。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Read(**/*.pem)",
"Read(**/*.key)"
]
}
}
搭配沙箱的 denyRead,可以同時阻擋 Claude Code 的檔案工具以及經由 Bash 指令的讀取:
{
"sandbox": {
"filesystem": {
"denyRead": ["~/.aws/credentials", "~/.ssh"]
}
}
}
利用沙箱的網路控制,以白名單方式指定允許的網域。
{
"sandbox": {
"network": {
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"*.npmjs.org",
"registry.yarnpkg.com",
"pypi.org"
]
}
}
}
如此可大幅降低 Claude Code 向非預期外部伺服器傳送資料的風險。特別有效於防範透過提示注入(prompt injection)進行的資料外洩(exfiltration)攻擊。
--dangerously-skip-permissions 參數會跳過所有權限檢查。在團隊開發情境下,建議完全停用此參數。
{
"permissions": {
"disableBypassPermissionsMode": "disable"
}
}
若將此設定放在 Managed Settings(託管設定),使用者端無法覆寫。
Hooks 是一個強大的功能,能在 Claude Code 的生命週期各階段執行自製腳本。藉由 PreToolUse hook,可以在工具執行前加入自訂檢查。
# .claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/validate-command.sh"
}
]
}
]
}
}
Hook 腳本範例(阻擋危險指令):
#!/bin/bash
# .claude/hooks/validate-command.sh
COMMAND=$(jq -r '.tool_input.command' < /dev/stdin)
# 阻擋 rm -rf
if echo "$COMMAND" | grep -q 'rm -rf'; then
echo "Blocked: rm -rf commands are not allowed" >&2
exit 2 # exit 2 可阻止工具執行
fi
# 阻擋連線到正式環境(production)
if echo "$COMMAND" | grep -q 'prod'; then
echo "Blocked: production access is not allowed" >&2
exit 2
fi
exit 0
Hooks 類型除了 command 外,還有 HTTP webhook、LLM 提示評估、以及 agent 型等 4 種。
Claude Code 提供 /permissions 指令來列出目前的權限設定。建議定期檢查,例如:
此外可使用 /status 指令檢查目前讀取了哪些設定檔;若設定檔有錯誤,也能在此處偵測出來。
最安全的做法是將 Claude Code 放在容器中執行。Anthropic 官方提供了 devcontainer 的參考實作。
主要特點:
# 方法1: 使用 Claude Code 倉庫的 devcontainer 參考實作
git clone https://github.com/anthropics/claude-code.git
# 在 VS Code 中開啟專案後選擇「Reopen in Container」
# 方法2: 使用 devcontainer features 將其加入現有專案
# 參考: https://github.com/anthropics/devcontainer-features
在 devcontainer 環境中,若是受信任的倉庫,自動化流程中使用 --dangerously-skip-permissions 亦相對較安全(但僅限可信來源)。
若在團隊或組織中使用 Claude Code,建議透過 Managed Settings 集中管理政策。Managed Settings 擁有最高優先權,使用者或專案端無法覆寫。
Managed Settings 有兩種方式:
Server-managed settings 可在 Claude for Teams / Enterprise 方案中使用,使用者登入時會自動下發設定。即使組織沒有 MDM 基礎設施,也能集中管理。
Endpoint-managed settings 的部署位置:
組織管理者的主要設定範例:
{
"permissions": {
"disableBypassPermissionsMode": "disable"
},
"allowManagedPermissionRulesOnly": true,
"allowManagedHooksOnly": true,
"allowManagedMcpServersOnly": true,
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"network": {
"allowManagedDomainsOnly": true,
"allowedDomains": ["github.com", "*.npmjs.org"]
}
}
}
設定鍵與效果:
--dangerously-skip-permissions Claude Code 是個非常方便的工具,但「便利性」與「安全性」是權衡取捨。特別在團隊開發時,建議先執行 ①~④ 的基本設定,再逐步導入 ⑤ 之後的項目。
下次再見。