Claude Code 専用ユーザーの制限設定
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
前回の記事で SSH の強化とファイアウォールの設定を行いました。この記事では、Claude Code 専用ユーザーに対してディスク・リソース・コマンドの制限を設定していきます。
ネットワークの制限は UFW で済んでいるので、ここでは「ユーザーが OS 上でできること」を絞り込みます。万が一 Claude Code が暴走しても、被害がそのユーザーの範囲内に収まるようにするのが目的です。
【広告】 XServer VPS には Claude Code のアプリイメージが用意されています。
VPS上に独立した Claude Code 環境を簡単に構築することができます。
VPSでいろいろ試すなら『XServer VPS』
順番が前後しますが、この記事で行った設定変更が正しく反映されているか確認するコマンドをまとめておきます。詳細については本文をご覧ください。
# ディスククォータ
sudo quota -u cc-sample-order
# プロセス数制限(ulimit)
sudo su - cc-sample-order -c "ulimit -u"
# メモリ制限(cgroups)
systemctl show user-1001.slice | grep -E "MemoryMax|MemoryHigh"
# 設定ファイルのロック(chattr)
sudo lsattr /home/cc-sample-order/.bashrc /home/cc-sample-order/.profile /home/cc-sample-order/.bash_logout
# コマンド制限
sudo su - cc-sample-order -c "ssh localhost" 2>&1 | head -1
ディスククォータの設定
Claude Code がディスクを使い切ってしまうと、OS 全体に影響が出ます。専用ユーザーごとにディスク使用量の上限を設定しておきます。
クォータの有効化
まず、ファイルシステムでクォータを有効にする必要があります。/etc/fstab のルートパーティションに usrquota オプションを追加します。
sudo cp /etc/fstab /etc/fstab.bak
sudo vi /etc/fstab
ルートパーティションの行で defaults を defaults,usrquota に変更します。
# 変更前
/dev/disk/by-id/... / ext4 defaults 0 1
# 変更後
/dev/disk/by-id/... / ext4 defaults,usrquota 0 1
再起動なしで反映し、クォータを有効化します。quota パッケージがインストールされていない場合は先にインストールしてください。
# quota パッケージのインストール(未インストールの場合)
sudo apt install quota -y
# 再マウント
sudo mount -o remount /
# クォータファイルの作成と有効化
sudo quotacheck -cum /
sudo quotaon /
クォータの設定
専用ユーザーにディスク使用量の上限を設定します。
sudo setquota -u cc-sample-order 20G 22G 0 0 /
ソフトリミット 20GB、ハードリミット 22GB です。ソフトリミットを超えると警告が出て、ハードリミットを超えると書き込みが拒否されます。2GB の余裕は、ソフトリミット到達後に状況を確認する猶予です。
設定を確認します。
sudo quota -u cc-sample-order
Disk quotas for user cc-sample-order (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/ubuntu--vg-ubuntu--lv
20 20971520 23068672 5 0 0
quota(ソフトリミット)と limit(ハードリミット)に値が入っていれば設定完了です。
リソース制限(ulimit / cgroups)
ディスクの次は、プロセス数とメモリに上限を設けます。Claude Code が無限ループに入ったり、大量のプロセスを生成したりした場合のセーフティネットです。
ulimit によるプロセス数制限
専用ユーザー向けの制限ファイルを作成します。
sudo vi /etc/security/limits.d/cc-sample-order.conf
cc-sample-order soft nproc 100
cc-sample-order hard nproc 150
ソフトリミット 100、ハードリミット 150 です。通常の Claude Code の作業でプロセスが 100 を超えることはまずありません。万が一フォーク爆弾のような状態になっても 150 で止まります。
確認します。
sudo su - cc-sample-order -c "ulimit -u"
100
cgroups によるメモリ制限
systemd のユーザースライスを使って、メモリ使用量に上限をかけます。専用ユーザーの UID を確認してからスライスの設定を作成します。
# UID の確認
id cc-sample-order
# → uid=1001
# スライスの設定ディレクトリを作成
sudo mkdir -p /etc/systemd/system/user-1001.slice.d
sudo vi /etc/systemd/system/user-1001.slice.d/memory.conf
[Slice]
MemoryMax=4G
MemoryHigh=3G
MemoryHigh(3GB)を超えるとメモリ回収が強化され、MemoryMax(4GB)を超えるとプロセスが強制終了されます。
sudo systemctl daemon-reload
確認します。
systemctl show user-1001.slice | grep -E "MemoryMax|MemoryHigh"
MemoryHigh=3221225472
MemoryMax=4294967296
StartupMemoryHigh=infinity
StartupMemoryMax=infinity
MemoryHigh=3221225472(3GB)、MemoryMax=4294967296(4GB)になっていれば OK です。Startup の値が infinity なのは起動時の制限で、通常時には影響しません。
設定ファイルの変更禁止(chattr)
Claude Code は bash で動作するため、.bashrc や .profile を書き換えることで制限を回避できる可能性があります。これらのファイルを chattr +i(immutable)で変更不可にしておきます。
sudo chattr +i /home/cc-sample-order/.bashrc
sudo chattr +i /home/cc-sample-order/.profile
sudo chattr +i /home/cc-sample-order/.bash_logout
+i フラグが設定されたファイルは、root であっても chattr -i で解除しない限り変更・削除できません。
sudo lsattr /home/cc-sample-order/.bashrc /home/cc-sample-order/.profile /home/cc-sample-order/.bash_logout
----i---------e------ /home/cc-sample-order/.bashrc
----i---------e------ /home/cc-sample-order/.profile
----i---------e------ /home/cc-sample-order/.bash_logout
i フラグが表示されていれば設定完了です。
lsattr は sudo を付けて実行してください。ホームディレクトリのパーミッションが 700 のため、管理ユーザーからでも sudo なしではアクセスできません。
コマンド実行の制限
ネットワーク系のコマンドのうち、Claude Code に使わせたくないものの実行権限を外します。この Ubuntu は Claude Code 専用機なので、管理ユーザー以外がこれらのコマンドを使うことはありません。
sudo chmod o-x /usr/bin/wget
sudo chmod o-x /usr/bin/nc
sudo chmod o-x /usr/bin/ssh
sudo chmod o-x /usr/bin/scp
sudo chmod o-x /usr/bin/sftp
chmod o-x は「その他のユーザー」から実行権限を外す設定です。管理ユーザー(所有者またはグループ)には影響しません。
curl は制限しません。Claude Code のインストールや自動アップデートに使用するため、常に許可としています。外部通信の制御は UFW に任せる方針です。
専用ユーザーから実行できないことを確認します。
sudo su - cc-sample-order -c "ssh localhost" 2>&1 | head -1
-bash: line 1: /usr/bin/ssh: Permission denied
ブラウザについても確認しておきます。Server 版では通常インストールされていませんが、念のため。
snap list 2>/dev/null | grep -i firefox
dpkg -l | grep -i firefox
dpkg -l | grep -i chromium
何も表示されなければ、ブラウザはインストールされていません。
現在の状態まとめ
ここまでで、専用ユーザーに対する制限設定が完了しました。
| 制限項目 | 設定内容 |
|---|---|
| ディスククォータ | ソフト 20GB / ハード 22GB |
| プロセス数 | ソフト 100 / ハード 150 |
| メモリ | MemoryHigh 3GB / MemoryMax 4GB |
| 設定ファイル | .bashrc / .profile / .bash_logout を変更不可(chattr +i) |
| コマンド制限 | wget / nc / ssh / scp / sftp の実行を禁止 |
| curl | 制限しない(UFW で通信先を制御) |
| ブラウザ | 未インストール(Server 版) |
ここまでの作業で、隔離環境の土台が整いました。次の工程では、いよいよ Claude Code のインストールと初期設定に進みます。
【広告】 XServer VPS には Claude Code のアプリイメージが用意されています。
VPS上に独立した Claude Code 環境を簡単に構築することができます。
VPSでいろいろ試すなら『XServer VPS』