chroot

関数の概要

PHPの chroot 関数は、現在のプロセスのルートディレクトリ(ルートパス)を指定した新しいディレクトリに変更します。これにより、スクリプトの動作範囲を制限でき、セキュリティ向上や環境の分離に役立ちます。たとえば、安全なサンドボックス環境を構築したい場合に利用されます。

パラメータの説明

  • directory(string): 新しくルートディレクトリに設定するディレクトリのパスを指定します。このパスは絶対パスで指定する必要があります。

戻り値

chroot 関数は、成功すると true を返し、失敗すると false を返します。失敗する理由としては、指定したディレクトリが存在しない、アクセス権がない、あるいは実行環境の制限などが考えられます。

使用例

基本的な使い方

<?php
if (chroot('/var/www/sandbox')) {
    echo 'chrootに成功しました。';
} else {
    echo 'chrootに失敗しました。';
}
?>

この例では、ルートディレクトリを /var/www/sandbox に変更し、成功した場合はメッセージを表示します。

ディレクトリ制限後にファイルを読み込む例

<?php
if (!chroot('/home/user/safe_dir')) {
    die('chrootに失敗しました。');
}

$filename = 'data.txt'; // safe_dir以下のファイル
$content = file_get_contents($filename);
echo $content;
?>

ルートディレクトリを変更後、そのディレクトリ以下のファイルを読み取っています。これによりスクリプトは外部のファイルにアクセスできなくなります。

chroot後にカレントディレクトリも変更する例

<?php
if (chroot('/opt/app/chrooted')) {
    chdir('/'); // chroot先のルートにカレントディレクトリを変更
    echo '現在のカレントディレクトリ: ' . getcwd();
} else {
    echo 'chrootに失敗しました。';
}
?>

chrootでルートディレクトリを変えた後に chdir でカレントディレクトリもルート直下に変更することで作業ディレクトリを整理しています。

関連する関数

  • chdir – カレントディレクトリ(現在の作業ディレクトリ)を変更します
  • getcwd – 現在のカレントディレクトリのパスを取得します
  • realpath – パスの正規化を行い、絶対パスを取得します

まとめ

chroot 関数はPHPで動作環境のルートディレクトリを変更するために使われる重要な関数です。特にサーバーのセキュリティ対策として有効で、プロセスのファイルアクセスを指定ディレクトリ以下に限定できます。ただし、使用には管理者権限が必要なことが多く、環境によっては制約があるため注意が必要です。併せて chdir などのディレクトリ操作関数も活用し、実務でも安全に扱いましょう。