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共有 |
2番目の設定が重要です。デフォルトでは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を更新する必要があります。