2012-09-11 143 views
3

我希望這裏有人能幫助我。 我在這個問題上搜索了大約3個小時,發現沒有什麼幫助。 (並沒有,在stackoverflow.com/questions/1539506下的答案沒有幫助)iis訪問網絡共享啓用Windows身份驗證

我已經安裝了PHP的IIS 7。我將我的測試網站的身份驗證模式設置爲「Windows身份驗證」。這一切都很好(我在PHP中收到「REMOTE_USER」)。

現在我必須使用「scandir()」和「is_file()」以及其他一些函數來訪問網絡共享,但我只會收到類似「拒絕訪問」或「無法打開目錄」的錯誤消息:文件或目錄「。

的權限是正確的:如果我設置認證爲「匿名」,並設置「用戶身份」,以我目前的測試用戶,這一切工作正常,但我必須使用「windows身份驗證」

我還試圖建立網絡共享的虛擬目錄,但是PHP didnt發現這個目錄(phpinfo()函數表示,「虛擬目錄支持」被禁止,但我沒有找到有關如何啓用這個東西)

PS:我嘗試了與apache服務器相同的PHP配置,並且它的一切都很完美。 (使用「auth_sspi」模塊和「reqire valid-user」指令)。但我必須在IIS上完成這項工作。

+0

我現在的解決方案是將物理路徑的登錄用戶設置爲有權訪問網絡共享的域用戶。在我的情況下,這是完美的。 – Robert

回答

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'); 

我發現,即使用單引號我必須加倍逃避領先\。如果您使用變量並將引號加倍,那麼您可能需要進行一些調整才能使其正確。

請讓我知道如何工作了你作爲我有點好奇。

+0

我沒有測試過您的解決方案,但是我認爲如果您必須以與IIS AppPool用戶不同的用戶身份訪問網絡共享,那麼這很有可能。這就是爲什麼我標記你的答案接受;) – Robert

+0

謝謝,我很感激。滯後的反應,一直是堆疊鬆弛。 :) –