0

Webディレクトリ外のファイルを削除するための解決策は何ですか?ファイルは削除されません。

スクリプトには、Webブラウザ(管理者のみ)を介してアクセスします。

例えば:

PHPは次の場所にあります:/var/www/html/delete_xx_phones.php

-rwxr-xr-x 1 root root  592 Mar 13 17:18 delete_xx_phones.php

delete_xx_phones.phpコードは次のようになります。

 foreach(glob("/path/004*-phone.cf") as $file) { 
    unlink($file); 
  }

のファイル/path

-rw-r--r--  1 root root      346 Mar 13 17:15 004aaaa-phone.cf
-rw-r--r--  1 root root      346 Mar 13 17:15 004bbaa-phone.cf
4

2 に答える 2

1

ファイルはユーザーに属しているため、PHP からアクセスできませんroot。PHP は通常、Web サーバーのユーザー ID と同じように実行されます。または、コマンド ラインで実行されている場合は、 を呼び出したユーザーのコンテキストで実行されphpます。

理論的にはsudo、PHP スクリプトでこれらのファイルを強制的に削除することもできますが、これは非常に悪い習慣です。そのためには、root パスワードを PHP スクリプトに保存する必要があります。

より良い方法は、ファイルの所有者を PHP を実行するユーザーに変更するかchmod、PHP がそれらを削除できるようにすることです (ただし、マシン上のすべてのユーザーがファイルにアクセスできるようにするため、これもあまりエレガントではありません)。

状況によってはcron、アカウントの下で数分ごとに実行され、それらのファイルの所有者を変更するスクリプトがroot実行可能な解決策になる場合があります。

chown apache:apache /path/004*-phone.cf 

apache:apache( PHP ユーザーおよび/またはグループに置き換えます)

もちろん、これらのファイルの作成方法に影響を与えることができれば、すぐに適切なユーザーの所有物にすることが理想的です。

于 2013-03-13T17:51:14.727 に答える
1

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" );ます。昇格された権限でスクリプトを実行します。

于 2013-03-13T18:19:57.730 に答える