如何以本機SYSTEM帳號進行測試? (從Python存取遠端檔案)

如何以本機SYSTEM帳號進行測試? (從Python存取遠端檔案)

我正在嘗試從 Web 應用程式伺服器存取一些遠端檔案。我們將它們稱為伺服器 M 和 R。

遠端檔案位於伺服器 R 上的檔案共用上,每個人都可以讀取(共用權限和安全權限允許Everyone讀取)。此共享稱為\\R\EthRelease.

Web 應用程式位於伺服器上M。我正在 Tomcat servlet 容器下運行 Python(實際上是 Jython)腳本(透過BSF)以便嘗試存取 上的遠端檔案R

但無論我做什麼,腳本無法看到遠端共用資料夾。例如,我使用 Python 程式碼,例如:

# Note, R: is a mapped network drive pointing to \\R\EthRelease
for file in ['C:', 'C:\\', 'C:\\Users', 'R:', 'R:\\',
        r"\\R\EthRelease", r"\\172.x.x.x\EthRelease"]:
    output.append("  <accessCheck dir='%s' exists='%s' accessF='%s' accessR='%s'/>\n" %
        (file, os.path.exists(file), os.access(file, os.F_OK),
        os.access(file, os.R_OK)))

腳本表示存在的唯一資料夾是C:\C:\Users

<accessCheck dir="C:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="C:\" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="C:\Users" exists="True" accessF="True" accessR="True"/>
<accessCheck dir="R:" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="R:\" exists="False" accessF="False" accessR="False"/>
<accessCheck dir="\\R\EthRelease" exists="False" accessF="True" accessR="True"/>
<accessCheck dir="\\172.x.x.x\EthRelease" exists="False" accessF="False" accessR="False"/>

相比之下,當我dir在伺服器 M 上的 CMD 提示字元中對上述任何路徑執行 a 操作時,它們都存在並且可讀:

C:\Users\me>dir r:\
 Volume in drive R is GIS
 Volume Serial Number is ...

 Directory of r:\

12/03/2012  09:18 AM    <DIR>          .
12/03/2012  09:18 AM    <DIR>          ..
07/25/2013  08:51 AM    <DIR>          EGI
12/17/2013  05:46 AM    <DIR>          maps
               0 File(s)              0 bytes
               4 Dir(s)  48,192,491,520 bytes free

C:\Users\me>

我已在 Jython stable 2.5.3 和 Jython beta 2.7b1 上嘗試過此操作,並獲得了相同的結果。我知道這不僅僅是 Python 問題,因為我在筆記型電腦上運行類似的命令(使用 Python 3.3)並且能夠成功存取相同的網路共用。

一個可能的區別是 servlet 容器 Tomcat 在伺服器 M 上以本機 SYSTEM 使用者身分執行,而在 CMD shell 中我以另一個使用者登入。但正如前面提到的,Everyone可以存取遠端文件共享,所以這應該沒有什麼區別,對吧?有什麼方法可以以 SYSTEM 使用者身分登入並測試我是否能夠在該狀態下存取遠端檔案共用嗎?

另一個可能的區別是 servlet 容器或 BSF 可能會施加某種沙箱限制,阻止我存取 servlet 容器外部的檔案。但這並沒有發生,因為我可以檢查C:\

有任何想法嗎?這一直讓我陷入困境。我之前嘗試過幾次不同的方式直接從內部存取文件,並撞到同樣類型的牆壁。最近我想著『尤里卡!我可以將問題外包給 Python 腳本! Python 可以處理它!但到目前為止,還沒有骰子。

答案1

正如這些超級用戶問題中所討論的 –提升的命令列提示字元無法存取 Windows 7 中的共用磁碟機如何從 Windows 7 中的提升進程存取網路共用?– 磁碟機對應與登入相關聯,因此 SYSTEM 沒有它們,除非您做出特殊安排。您可能需要透過 UNC 或NET USE透過程式碼執行操作來操作遠端檔案。請注意,您的測試程序報告它具有FR訪問\\R\EthRelease.

答案2

我通常不會考慮使用本機系統帳戶來實現此目的。我會考慮在網頁服務帳戶或託管服務帳戶下運行它以提供此存取權限。

如果您確實想以本機系統帳戶登入來測試這一點,可以透過多種方法以本機系統帳戶開啟 shell。

您可以使用PSEXEC發現於PS工具並在系統帳戶下開啟互動式cmd會話:psexec -i -s cmd.exe

或啟動以系統帳戶執行的排程任務 ( at <time> /interactive cmd.exe)

相關內容