在PHP中實現對Windows網域共用磁碟機上檔案的存取
P粉323224129
2023-08-30 23:11:13
<p>我有一堆文件儲存在一個獨立的機器上,我需要從一個PHP/IIS伺服器上提供。問題是文件磁碟機連接到一個Active Directory網域的機器上,而網路伺服器沒有連接,所以我不確定在哪裡提供PHP需要驗證的AD用戶來存取磁碟機。 </p>
<p>我有一個呼叫PHP的IIS應用程式池,以我創建的一個新的Windows用戶運行(設定為應用程式集的“Identity”,以及網站的匿名驗證使用者)。我以這個新用戶的身份登入伺服器,並設定了一個映射網路驅動器,但經過一些研究後,我認為這是一個死胡同;我讀到服務不會以加載映射驅動器的方式登入Windows。 </p>
<p>僅透過IP位址引用更接近工作,但我遇到了身份驗證錯誤。我在網路上找到的主要解決方案是將應用程式集區運行為具有存取磁碟機權限的用戶,但我不知道是否可能,因為伺服器不在那個Windows網域中。 (但我也不是AD專家)</p>
<pre class="brush:php;toolbar:false;">echo shell_exec('whoami'); //輸出我建立的Windows使用者的名稱
echo scandir('\\\\192.168.1.120\\data$'); //找不到使用者名稱/密碼
echo trim(shell_exec('dir \\\\192.168.1.120\\data$ 2>&1')); //使用者名稱或密碼不正確
echo scandir('Z:\\'); //找不到路徑的PHP警告
echo trim(shell_exec('dir Z: 2>&1')); //找不到路徑</pre>
<p>如果沒有簡單的、非hack的解決方案,我可以看看客戶是否可以將Web伺服器放在AD網域中,但我不知道這是否會對伺服器運行的其他服務產生意想不到的副作用。 </p>
如果這些是公開的,並且不需要使用者對目錄進行身份驗證,則不要將它們放在網域中。然而,如果您需要某種身份驗證或從AD中查找訊息,您可以考慮在DMZ中運行Active Directory應用程式模式(ADAM)。您可能需要將相關資訊從AD複製到應用程式分區,因為ADAM不會同步標準AD分區。
當然,如果Web伺服器與網域控制器位於同一網路上,可以將其新增至網域以增加可管理性。