Ubuntu에서 Claude Code가 sudo를 사용하게 설정하기
보안을 유지하면서 Claude Code CLI가 root 권한 명령어를 실행할 수 있도록 sudoers를 설정하는 방법
Claude Code CLI를 사용하다 보면 apt install, systemctl 같은 root 권한이 필요한 작업이 있다. 이 글에서는 보안을 유지하면서 Claude Code가 sudo를 사용할 수 있게 설정하는 방법을 정리한다.
문제 상황
Claude Code에서 sudo 명령어 실행 시:
sudo: a terminal is required to read the passwordClaude Code의 bash 세션은 interactive terminal이 아니라서 비밀번호를 입력할 수 없다.
해결하면 안 되는 방법
# 절대 하지 마세요
yohan ALL=(ALL) NOPASSWD: ALL편하지만 보안상 치명적이다. 계정이 탈취되면 공격자가 즉시 root 권한을 얻는다. 실제로 이 설정 때문에 서버가 털린 사례도 있다.
올바른 해결 방법
비밀번호 인증은 유지하면서, credential 캐싱으로 편의성을 확보한다.
1. sudoers 설정
sudo visudoDefaults 섹션에 추가:
Defaults timestamp_timeout=60
Defaults !tty_tickets| 설정 | 역할 |
|---|---|
timestamp_timeout=60 | 비밀번호 입력 후 60분간 캐시 |
!tty_tickets | 모든 tty에서 credential 공유 |
두 번째 설정이 핵심이다. 기본값은 tty별로 credential이 분리되어 있어서, 터미널에서 sudo -v를 해도 Claude Code의 bash 세션에는 적용되지 않는다.
2. Claude Code 실행
sudo -v && claude --dangerously-skip-permissionssudo -v로 credential을 캐시한 뒤 Claude Code를 실행하면, 내부에서 sudo 명령어가 비밀번호 없이 실행된다.
3. 동작 확인
Claude Code에서:
sudo whoami 실행해봐
root가 출력되면 성공.
보안 비교
| 방식 | 공격자 침입 시 | 시간 제한 |
|---|---|---|
NOPASSWD: ALL | 즉시 root 탈취 | 없음 (영구) |
timestamp_timeout + !tty_tickets | 비밀번호 필요 | 60분 후 만료 |
credential이 캐시된 60분 동안 침입당하면 위험하긴 하다. 하지만 "문을 항상 열어두는 것"과 "잠깐 열었다 닫는 것"의 차이다.
더 보수적으로 가려면 timestamp_timeout=15 정도로 줄이면 된다.
정리
# /etc/sudoers 설정
Defaults timestamp_timeout=60
Defaults !tty_tickets
# 실행
sudo -v && claude --dangerously-skip-permissions이 설정으로 Claude Code가 시스템 관리 작업을 수행할 수 있으면서도, NOPASSWD의 보안 위험은 피할 수 있다.
참고: 60분이 지나면 다시
sudo -v로 credential을 갱신해야 한다.