UNIX 應用程式子系統 (SUA) 提供了一個可攜式作業系統介面相容 (POSIX 相容) 的子系統,它能夠執行原生的 UNIX 殼層、公用程式與應用程式及 Microsoft(R) Windows(R) 應用程式。本主題將為需要 POSIX 相容作業系統的使用者描述一些作業考量。

POSIX 殼層相容性

SUA Korn 殼層遵循傳統式 Korn 殼層行為,它和 POSIX 行為幾乎相同。如果您因為某些工作環境要求而需要嚴格的 POSIX 相容性,請參閱位於下載套件「UNIX 應用程式子系統的公用程式及軟體開發套件 (SDK)」說明檔內,ksh(1) 文件中關於 Korn 殼層與 POSIX 之間的差異。

若要從 Korn 殼層取得完整的 POSIX.2 相容性,您必須在 POSIX 模式執行 Korn 殼層。若要在 POSIX 模式執行 Korn 殼層,請執行下列其中一項動作:

  • 使用 -o posix 選項開啟 Korn 殼層。

  • 在殼層內執行命令設定 -o posix

  • 設定 POSIXLY_CORRECT 殼層參數。

C 殼層不支援 POSIX 相容性。不同於 Korn 殼層,C 殼層並沒有 POSIX 模式命令選項。

周遊檢查目錄權限

依預設,Windows 使用者具有在樹狀目錄中移動的權限,儘管他們可能沒有存取路徑中每一個目錄的權限。在 POSIX 系統上,除非您具有存取目錄路徑中每一個目錄的存取權限,否則無法存取任何目錄。此 POSIX 行為又稱為周遊檢查。例如,如果您沒有目錄的存取權限,則無法將目前目錄變更至其任何子目錄,即使您擁有子目錄的存取權限也是如此。依預設,在 Windows 中,您可以將目前目錄變更到您擁有其權限的任何子目錄。

在 Windows 中,有一個稱為 [周遊資料夾/執行檔案] 權限的特殊權限,您可以對使用者或群組設定該權限。您可以設定此權限來允許或拒絕在樹狀目錄中移動。[周遊資料夾] 權限要在群組或使用者在 [群組原則] 嵌入式管理單元中未授與 [略過周遊檢查] 使用者權限時才會生效。依預設,在 Microsoft Windows 2000,Everyone 群組會授與 [略過周遊檢查] 使用者權限。在 Windows Server® 2008 R2、Windows® 7、Windows Server® 2008、Windows Vista®、Windows Server 2003 和 Windows XP 作業系統中,Administrators、Backup Operators、Everyone、Power Users 和 Users 群組都具有這個權利。若要取得 POSIX 標準的嚴格相容性,請移除所有使用者和群組 (Backup Operators 群組除外) 的 [略過周遊檢查] 使用者權限。若要符合許多其他 UNIX 實作上授與根使用者的特殊權限,請移除所有使用者 (Administrators 及 Backup Operators 群組除外) 的 [略過周遊檢查] 使用者權限。

su 與 setuid 之周遊檢查行為的差距

使用 su 命令以其他使用者身分執行的根使用者,以及使用 setuid 處理程序 (以及那些包含 setuid 相關的呼叫) 的使用者,可透過維持部分目錄周遊權利,與上述的預設行為產生差距。

從使用者帳戶移除 [略過周遊檢查] 權利,會產生 POSIX 相容的行為。不過,當根使用者嘗試在任何其他使用者上執行 su 而未提供密碼時,所產生的工作階段便不會有上述行為。在根使用者未提供密碼而執行 su 之後啟動的處理程序可以存取目錄樹狀結構及在目錄樹狀結構中移動,雖然它們可能不具備存取路徑中每個目錄的權限。

Setuid 處理程序以及會呼叫 setuidseteuidsetreuid 的處理程序也會出現相同行為。從執行這些處理程序的使用者帳戶移除 [略過周遊檢查] 權利之後,這些處理程序便能夠在目錄樹狀結構中繼續進行,雖然它們可能缺少存取路徑中每個目錄的權限。

請參閱