3

openfiles.exe を使用して、リモート サーバーで現在開いているファイルの情報を取得しようとしています。Web サーバーがオンになっているコマンド プロンプトからコマンドを実行できるので、Web サーバーとターゲットにしようとしているサーバーの間で機能することがわかります。しかし、PHP で同じコマンドを呼び出そうとすると、「エラー: ターゲット システムは Windows XP 以降を実行している必要があります」という Apache エラー ログ エントリが表示されます。Web サーバーは Xp Pro で実行されており、ターゲット サーバーは Windows Server 2003 で実行されています。コマンド プロンプトからコマンドは問題なく実行され、ネットワーク上の古い Windows 2000 サーバーに対しても問題なく実行されます。問題。これを回避する理由および/または方法について誰か考えがありますか?

私が使用しているコードは次のとおりです。

$output = shell_exec("openfiles /query /s servername");
echo $output;
  $i = 0;
  $c = count($output);

  while ($i < $c) {
    $dump = $output[$i];
    echo $dump ."<br>";
    $i++;
  }

shell_exec()、system()、および exec() はすべて、バッチ ファイルからコマンドを実行する場合とまったく同じように動作します。少し興味深いのは、「/s servername」の部分を削除すると、次のように出力されることです。

Files Opened Remotely via local share points:
---------------------------------------------
INFO: No shared open files found.

... /s フラグがスローされているかのようです。私が言うように、コマンド プロンプトからは正常に動作するので、実行可能ファイルがターゲット サーバーから情報を取得できることがわかっています。なぜPHPが同じことをするのに問題があるように見えるのかを知る必要があります...

4

1 に答える 1

3

Apache サーバーが間違ったアカウントで実行されており、リモート IPC$ 共有へのアクセス許可がありません;)

編集 - 完全な投稿:

許可でしょうか?Apache はどのユーザーとして実行されますか? コマンド プロンプトから実行する場合、おそらくドメイン管理者アカウント、またはリモート コンピューター上の IPC$ 共有に接続するための適切なアクセス許可を持つその他のアカウントとして実行しています (IIRC では、このようなことが行われます)。 )。Apacheはそうではないかもしれませんが、実際に起こっているのはIPC $共有に接続できず、リモートコンピューターにWindows XP以降がないと想定している場合、誤解を招くエラーメッセージである可能性があります...

XP バージョンの openfiles には、ユーザー名とパスワードを渡すための /u および /p オプションがあるようです。そこにドメイン管理者の資格情報を貼り付けてテストし、それが機能するかどうかを確認します。その場合は、ファイルストアのアクセス許可のない制限付きの AD アカウントを作成し、それらの資格情報または何かを使用して、メイン ドメインの管理者アカウントをだれも盗むことができないようにします。

于 2012-09-21T09:56:54.063 に答える