【问题标题】:iis access network share with windows authentication enabled启用 Windows 身份验证的 iis 访问网络共享
【发布时间】:2012-09-11 08:32:44
【问题描述】:

我希望这里有人可以帮助我。 我在这个问题上搜索了大约 3 个小时,但没有发现任何帮助。 (不,stackoverflow.com/questions/1539506 下的答案没有帮助)

我有一个安装了 PHP 的 IIS 7。我将测试网站的身份验证模式设置为“Windows 身份验证”。一切正常(我在 PHP 中收到“REMOTE_USER”)。

现在我必须使用“scandir()”和“is_file()”以及其他一些函数访问网络共享,但我只会收到错误消息,例如“访问被拒绝”或“无法打开目录:没有这样的文件或目录”。

权限设置正确:如果我将身份验证设置为“匿名”并将“用户身份”设置为我当前的测试用户,一切正常,但我必须使用“Windows 身份验证”

我也尝试将网络共享设置为虚拟目录,但 PHP 没有找到该目录(phpinfo() 表示“虚拟目录支持”已禁用但我没有找到有关如何启用此功能的任何信息)

PS:我在 apache 服务器上尝试了相同的 PHP 配置,并且一切正常。 (使用“auth_sspi”模块和“reqire valid-user”指令)。但我必须在 IIS 上完成这项工作。

【问题讨论】:

  • 我现在的解决方案是将物理路径的登录用户设置为有权访问网络共享的域用户。就我而言,这非常有效。

标签: php iis iis-7


【解决方案1】:

今天早上我在一个我一直在开发的简单文件组织应用程序上遇到了这个挑战。

我没有从安全专家的角度来看待这个问题,尽管我有预感这并不理想。我的应用程序是私有的,所以我不太担心。据我所知,问题是网络共享必须由 IIS AppPool 用户安装/授权。

我在PHP System Call 的手册页上找到了执行系统调用的示例:

<?php

function my_exec($cmd, $input = '') 
{
    $desc = array(
        0 => array('pipe', 'r'),
        1 => array('pipe', 'w'),
        2 => array('pipe', 'w')
    );

    $proc = proc_open($cmd, $desc, $pipes); 
    fwrite($pipes[0], $input);

    $stdout = stream_get_contents($pipes[1]);
    $stderr = stream_get_contents($pipes[2]);

    fclose($pipes[0]); 
    fclose($pipes[1]); 
    fclose($pipes[2]); 

    $rtn = proc_close($proc); 

    return array('stdout' => $stdout, 'stderr' => $stderr, 'return' => $rtn);
}

?>

然后我可以调用它并访问共享:

my_exec('net use \\\\$MachineName\$ShareName /user:$User $Pass');

我发现即使使用单引号,我也必须对前导 \ 进行双重转义。如果您使用变量并将引号更改为双引号,则可能需要进行一些调整才能使其正确。

由于我有点好奇,请告诉我这对你有什么影响。

【讨论】:

  • 我没有测试您的解决方案,但我认为如果您必须以与 IIS AppPool 用户不同的用户身份访问网络共享,这是一个很好的可能性。这就是为什么我将您的答案标记为已接受;)
  • 谢谢,非常感谢。反应迟缓,堆栈松弛。 :)
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 2015-07-17
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多