Skip to content

原文(日本語に翻訳)

新規起動後にサンドボックス化されたBashコマンドが mktemp: No such file or directory で失敗する問題を修正しました。

原文(英語)

Fixed sandboxed Bash commands failing with mktemp: No such file or directory after a fresh boot

概要

システムの新規起動後(fresh boot)、サンドボックスモードで実行されるBashコマンドが mktemp コマンドを実行しようとした際に「No such file or directory」エラーが発生していました。サンドボックス環境でのテンポラリディレクトリへのアクセスが正しく設定されていないことが原因でした。このアップデートにより、起動直後でも正しく動作するようになりました。

基本的な使い方

bash
# 修正前: 新規起動後のサンドボックスでmktempが失敗
claude --sandbox "mktemp"
# Error: mktemp: No such file or directory

# 修正後: 正常に動作
claude --sandbox "mktemp"
# /tmp/tmp.XXXXXXXX

実践例

サンドボックスモードでの安全なスクリプト実行

bash
# サンドボックスモードで一時ファイルを使用するスクリプト
claude --sandbox "
# 一時ファイルを作成して処理
tmpfile=\$(mktemp)
echo 'データを処理中...' > \$tmpfile
cat \$tmpfile
rm \$tmpfile
"

# 修正後: 新規起動後でも正常に動作する

CI/CDパイプラインでのサンドボックス使用

yaml
# .github/workflows/secure-analysis.yml
name: Secure Code Analysis

on: [push]

jobs:
  analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: サンドボックスでコード分析
        run: |
          # 修正後: CI環境の新規コンテナでもmktempが動作する
          claude --sandbox "
            tmpdir=\$(mktemp -d)
            cp -r src/ \$tmpdir/
            cd \$tmpdir
            # 分析処理
            find . -name '*.ts' | xargs grep 'TODO' > /tmp/todos.txt
            cat /tmp/todos.txt
            rm -rf \$tmpdir
          "

サンドボックス設定の確認

bash
# サンドボックスの動作確認スクリプト
#!/bin/bash

echo "サンドボックス環境のテスト..."

# 基本的なmktempテスト
echo "1. mktemp テスト"
claude --sandbox "mktemp && echo 'mktemp: OK'"

# 一時ディレクトリの作成テスト
echo "2. mktemp -d テスト"
claude --sandbox "tmpdir=\$(mktemp -d) && ls -la \$tmpdir && rmdir \$tmpdir && echo 'tmpdir: OK'"

# 一時ファイルを使った処理テスト
echo "3. 一時ファイル処理テスト"
claude --sandbox "
tmpfile=\$(mktemp)
echo 'test data' > \$tmpfile
result=\$(cat \$tmpfile)
rm \$tmpfile
echo \"Result: \$result\"
"

システム起動スクリプトでの利用

bash
# /etc/rc.d/claude-warmup (システム起動時の準備スクリプト)
# 注: 修正後はこのような回避策は不要になりました

# 修正前の回避策(不要になりました)
# mkdir -p /tmp/claude-sandbox
# chmod 1777 /tmp/claude-sandbox

# 修正後: Claude Code が自動的に必要な準備を行う
# 直接サンドボックスコマンドを実行できる
claude --sandbox "echo 'Ready to use'"

注意点

  • このバグは特に新規起動直後(コンピュータを再起動した後すぐに使用する場合)に発生していました
  • 通常の稼働中のシステムでは、このエラーは発生しない場合がありました
  • サンドボックスモードは引き続きファイルシステムへのアクセスを制限します
  • /tmp ディレクトリへのアクセスはサンドボックスモードでも必要な場合があるため、適切に許可されます
  • macOSでの sandbox-exec を使用する場合、この修正が特に重要です

関連情報