콘텐츠로 이동

check-bash.sh

예시 — check-bash.sh 사전 차단 hook

섹션 제목: “예시 — check-bash.sh 사전 차단 hook”

.claude/hooks/check-bash.sh:

#!/usr/bin/env bash
set -euo pipefail
# stdin으로 PreToolUse 컨텍스트(JSON) 수신
ctx=$(cat)
cmd=$(echo "$ctx" | jq -r '.tool_input.command // ""')
deny_patterns=(
'rm -rf'
'rm -fr'
'\bsudo\b'
'mkfs'
'dd +of=/dev/'
':\(\)\{ *:\|:& *\};:'
'> +/dev/sda'
'curl .* \| *(sh|bash)'
)
for p in "${deny_patterns[@]}"; do
if echo "$cmd" | grep -Eq "$p"; then
echo "blocked: pattern '$p' matched in command: $cmd" >&2
exit 1
fi
done
exit 0

.claude/settings.json:

{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash",
"hooks": [{"type":"command","command":".claude/hooks/check-bash.sh"}] }
]
}
}

이 hook이 있어도 권한 게이트의 deny 리스트를 동시에 두는 것을 권한다 — 두 보호선 원칙(4챕터).