无法将远程Openfiles.exe数据拉入PHP
作者:互联网
我正在尝试使用openfiles.exe来获取当前在远程服务器上打开的文件的信息.我可以从网络服务器打开的命令提示符处运行命令,因此我知道它可以在网络服务器和我要定位的服务器之间工作.但是,当我尝试在PHP中调用相同的命令时,出现了Apache错误日志条目:“错误:目标系统必须运行Windows XP或更高版本.” Web服务器在Xp Pro上运行,目标服务器在Windows Server 2003上.从命令提示符处,命令可以完美运行,甚至对于网络上较旧的Windows 2000服务器,也只是从PHP运行时,它似乎具有一个问题.是否有人对为什么和/或如何解决这个问题有任何想法?
我正在使用的代码是:
$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服务器名”部分,它会输出以下内容:
Files Opened Remotely via local share points:
---------------------------------------------
INFO: No shared open files found.
…因此,就好像/ s标志正在抛出它.就像我说的那样,它可以在命令提示符下正常工作,因此我知道可执行文件能够从目标服务器中提取信息.我只需要找出为什么PHP似乎在执行相同操作时就有问题…
解决方法:
您的Apache服务器使用错误的帐户运行,并且没有对远程IPC $共享的权限;)
编辑-全文:
可能是权限? Apache以什么用户身份运行?当您从命令提示符处执行此操作时,大概是作为域管理员帐户或具有正确权限以连接到远程计算机上的IPC $共享(IIRC的方式)的其他帐户执行此操作).而Apache可能没有,而当实际发生的事情是它无法联系IPC $共享并假设远程计算机没有Windows XP或更高版本时,这可能只是一个误导性的错误消息…
看起来在XP版本的openfiles中,有/ u和/ p选项可以传递用户名和密码.将域管理员凭据粘贴到那里进行测试,看看是否可行.如果是这样,请创建一个没有文件存储权限的受限AD帐户并使用这些凭据或其他凭据,以确保没有人可以窃取您的主域管理员帐户.
标签:shell-exec,apache,windows,php 来源: https://codeday.me/bug/20191127/2075511.html