
有沒有辦法阻止對 Windows 中特定資料夾的讀取和/或寫入訪問,並僅授予特定服務/進程對其的存取權限?
權限似乎是基於使用者的,而不是基於服務的,但我想知道是否有辦法實現這樣的功能。
答案1
是的,在 Windows 7 中有一種方法可以做到這一點,儘管可能需要重新配置服務,這會帶來(可能相當小的)引入相容性問題的風險。
與服務關聯的安全性 ID 可以引用為
NT SERVICE\SERVICENAME
其中servicename
會替換為服務的實際名稱(在服務管理工具中顯示為“服務名稱”,與服務主清單中顯示的顯示名稱不同)。如果您使用 GUI 變更安全性設置,且電腦已加入網域,則需要將搜尋範圍變更為本機。另請注意,這僅適用於目前安裝的服務。
您可以使用以下命令確定與特定服務名稱關聯的 SID,無論是否安裝了此類服務sc showsid
:
C:\working>sc showsid wjkjk
NAME: wjkjk
SERVICE SID: S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649
如果您使用命令設定檔案或資料夾的安全性,icacls
則可以透過在其前面添加前綴來指定 SID *
,例如*S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649
。
為了使服務能夠使用此安全 ID 存取文件,必須將其配置為「不受限」或「受限」的服務 SID 類型。如果將服務 SID 類型配置為“無”,則服務 SID 將無法運作。您可以使用以下命令檢查已安裝服務的服務 SID 類型sc qsidtype
:
C:\working>sc qsidtype wuauserv
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: wuauserv
SERVICE_SID_TYPE: UNRESTRICTED
如果服務類型為“無”,您可以使用以下sc sidtype
命令將其變更為“無限制”:
C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: psexesvc
SERVICE_SID_TYPE: NONE
C:\working>sc sidtype psexesvc unrestricted
[SC] ChangeServiceConfig2 SUCCESS
C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS
SERVICE_NAME: psexesvc
SERVICE_SID_TYPE: UNRESTRICTED
直到服務重新啟動後才會生效。
筆記:你應該不是將服務的 SID 類型從「無」變更為「受限」。這樣做幾乎肯定會導致服務故障。將類型從“無”更改為“無限制”不太可能導致任何問題。如果服務 SID 類型已經是“受限”或“不受限制”,則不應變更它。
答案2
有一個稱為SERVICE
所有服務都使用的偽“用戶”,因此您可以透過僅允許該“用戶”存取來簡單地限制存取。
但是,這並不完全是您所要求的,因為這不是單一特定服務,而是所有服務。儘管沒有預設機制限制單一服務可能嘗試強制服務在啟動時使用不同的 ID 可能會發生一些相當大的麻煩 - 我不會推薦它。