Windows - 對 Windows 服務使用本機服務和/或網路服務帳戶

Windows - 對 Windows 服務使用本機服務和/或網路服務帳戶

我建立了一個視窗服務,用於監視 Windows 作業系統上特定目錄中的檔案。當偵測到檔案時,該服務會執行一些檔案 I/O、讀取檔案、建立子目錄等。我的計劃是讓該服務作為預設的「本機服務」帳戶運作。由於我需要允許寫入/讀取權限,顯然「本機服務」帳戶預設不會執行此操作,因此我將在我所在的資料夾上為「本機服務」帳戶明確設定「完全控制」權限讀/寫。

我相信以上是好的。我的問題是,對於我正在讀取和寫入的資料夾,我是否需要設定具有完全控制存取權限的「網路服務」角色?我想知道,由於我的服務使用與另一台伺服器的資料庫連接,我是否需要「網路服務」帳戶設定。

我可能誤解了「網路服務」帳戶的作用。

答案1

NT AUTHORITY\NetworkService帳戶只有當您與網域中需要您的電腦憑證進行存取控制的其他電腦進行通訊時才需要。簡單的互聯網/網路存取不需要它。僅出於 Active Directory 網域中的特定目的才需要它。

也是整個要點NT AUTHORITY\LocalService帳戶是它在系統上擁有最低權限。賦予它更多特權會降低系統上許多服務的安全性,這些服務設計為在其設計提供的低特權等級上運行。如果您的服務需要以上權限,您應該為其建立一個具有必要權限的新帳戶,並在登入服務屬性的選項卡。 (這也可以透過程式設計來完成。)

您也可以使用以下命令運行它NT AUTORITY\LocalSystem帳戶,它可以無限制地存取您的系統,但我假設您希望使用該LocalService帳戶來提高其提供的安全性。

答案2

其他答案證實了您關於使用本地服務的說法。總而言之,除非您需要網路服務的額外 Active Directory SSPI 功能,否則建議使用本機服務帳戶來使用您的服務。

為了限制對特定資料夾的讀取/寫入訪問,您可以做得比僅僅授予對通用本機服務帳戶的存取權限更好。正如其他人指出的那樣,問題在於,這也會為作為本地服務運行的所有其他服務提供讀取/寫入訪問權限,如果所有服務都這樣做,那麼本地服務將逐漸獲得對越來越重要資源的訪問權限。

解決方案是使用特定的服務 SID 對資料夾進行 ACL。只有您自己的服務進程才有與之關聯的服務 SID,因此這會進一步鎖定您的資源。您可以使用 查看服務 SID sc showsid <service name>。服務SID是根據服務名稱產生的,因此它在所有電腦上都是相同的。

若要啟用您的服務使用服務 SID,請ChangeServiceConfig2使用SERVICE_SID_INFO結構來設定SERVICE_SID_TYPE_UNRESTRICTED。您也可以設定SERVICE_SID_TYPE_RESTRICTED為取得更受限制的 SID,該 SID 只允許對服務 SID 明確允許的資源進行寫入存取。

此連結包含服務 SID 和受限服務 SID 的進階描述: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/hh125927(v=ws.10)

答案3

之前的回答似乎沒有直接解決問題,所以我想我會補充一下。

  1. 我的計劃是讓該服務作為預設的「本機服務」帳戶運作。我將在我正在讀取/寫入的資料夾上為“本機服務”帳戶明確設定“完全控制”權限。我相信以上是一個很好的計劃。

就我個人而言,我不認為這個計劃有什麼大問題。對於 BUILTIN,可以選擇:

  1. 作為 LOCALSYSTEM 運行 - 因此,如果此服務受到損害,攻擊者將擁有一切,然後立即。
  2. 以 LOCALSERVICE 運作 - 因此,如果此服務或此帳戶下執行的任何其他服務受到威脅,攻擊者就可以存取額外的目錄。

可以說,增加一些額外的 ACL 以便能夠使用第二個選項是更好的選擇。是的,對於低權限但高度安全敏感的服務,最安全的選擇是在自訂的低權限服務帳戶下執行。但是,除非您想為部署的每個服務建立新帳戶/管理密碼,否則使用 LocalService 來執行次要的非敏感任務並不是一件可怕的事情。您只需要根據這些考慮因素做出負責任的決定,例如該目錄或資料庫中的內容、它們被破壞的影響等。

儘管同樣,根據最小權限原則,您應該僅在確實不夠Full Control時進行設定。Modify

2.我的問題是,對於我正在讀取和寫入的資料夾,我是否需要設定具有完全控制存取權限的「網路服務」角色?我想知道,由於我的服務使用與另一台伺服器的資料庫連接,我是否需要「網路服務」帳戶設定。

如果您的資料庫需要 Windows Integrated/SSPI 登錄,那麼是的,您需要在任何地方使用 NetworkService(或網域服務帳戶),即 RunAs 和目錄權限。假設您也授予您的 computername$ 或網域帳戶存取此資料庫的權限。我懷疑你正在這樣做,所以如果它使用正常的使用者名稱/密碼身份驗證,你應該能夠使用 LocalService 執行所有操作。您只需授予該目錄的帳戶權限(無論您在 RunAs 中使用哪一個),而不是同時授予兩者。

3.我可能誤解了「網路服務」帳戶的作用。

本地服務/網路服務本機上的帳戶幾乎相同。差別主要在於它們可以在網路上做什麼。 NS 可以存取某些網路資源,因為它在網路上顯示為真實(電腦)帳戶。但 LS 將顯示為匿名,因此網路上的幾乎所有內容都會被拒絕。

順便說一句,您應該為此使用計劃任務,而不是服務。

*從 Vista 開始,由於服務隔離,一個受損的 LocalService 程序無法輕易攻擊另一個程序。每個 LocalService/NetworkService 服務進程/實例都有自己唯一的登入工作階段 SID(唯一擁有者),這與 Windows 2003 不同。受限的 SID 和 寫限制令牌在此背景下被提及。

相關內容