PHP スクリプトは通常、httpd によって実行されるため、root 以外のユーザーとして実行されることがよくあります。ファイルは root ユーザーのみに書き込み権限を持つように設定されているため、うまくいきません。
ファイルの所有権または書き込み権限を永続的に変更できない場合は、非常に短いスクリプトを作成し、PHPsudo
で呼び出す代わりに昇格した権限 (または suid ビットを使用)で実行することを検討できます。unlink()
suid アプローチでは、引数として渡されたファイル名を削除する簡単なスクリプトを Perl で記述します (perl-suidperl パッケージがインストールされている必要がある場合があります)。
削除-file.pl:
#!/usr/bin/perl -wT
# This is VERY insecure, so if you use it, make sure you modify it
# to filter the filenames before putting the script on production
# machines
unlink $ARGV[ 0 ];
chown root delete-file.pl
ファイルがルート ( )によって所有されていることを確認してから、実行chmod 6711 delete-file.pl
してその SUID ビットを設定します。その後、ファイルは常にルートとして実行されます。
次に、PHP スクリプトを実行するだけで(安全をexec( "/path/delete-file.pl $filename" )
考慮して)、ファイルの削除が開始されます。shellescapearg()
(Bash は伝統的に suid ビットを無視するため、ここでは特に Perl を使用していることに注意してください。)
の使用に慣れている場合sudo
は、上記と同様のスクリプトを記述し (Bash も機能します)、それを に追加し/etc/sudoers
ます。次に、次の行に沿って何かを実行できexec( "/usr/bin/sudo /path/to/delete-file-script $filename" );
ます。昇格された権限でスクリプトを実行します。