AD帳戶用於跨伺服器監控服務

AD帳戶用於跨伺服器監控服務

我們有一些運行各種服務的 Windows 伺服器,有時這些服務會停止。為了監視這些服務,我編寫了一個 Windows 服務,它使用 ServiceController 來查看可疑服務並檢查它們的目前狀態。當我將新服務配置為在對相關伺服器具有本地管理員權限的帳戶下運行時,效果很好,但從安全角度來看,這並不理想,因為它授予除查看這些電腦上的服務之外的權限。理想情況下,我希望創建一個AD 帳戶,該帳戶可以“查看”並詢問所有伺服器上的服務(範圍內的伺服器是一個將來必然會擴大的列表),但在這些伺服器上沒有其他權限- 這是嗎?

如果這個描述有點模糊,我很抱歉,所以假設我寫的服務將安裝在 ServerA 上,並且需要能夠使用 ServiceController 來詢問 ServerB 上的服務「MSSQLSERVER」、ServerC 上的服務「MSSQL$OTHERINSTANCE」 ServerD 上的服務“SOMEOTHERSERVICE”和“RUNNINGOUTOFIDEAS”。除此之外,要查詢的服務清單保存在 ServerZ 上的 MS SQL Server 資料庫中,因此該帳戶需要能夠連接到該伺服器上的該資料庫,因此就我的目的而言,它需要標準AD 帳戶,在SQL Server 安全性中作為使用者可見。

有人有什麼想法嗎?預先感謝您的任何建議,並感謝您花時間閱讀本文。請注意:一個框架挑戰,例如「你為什麼要這樣做?你應該這樣做「與直接回答一樣受歡迎,因為我不相信沒有更好的方法,而且我總是很樂意學習。

答案1

該帳戶需要在 scmanager 上具有以下存取權限才能遠端監控所有電腦服務:

需要將此字串注入到目前 scmanager ACL 中: (A;;CCLCRPRC;;;<AccountSID>)

A: Allow
CC - SC_MANAGER_CONNECT - remotely connect
LC - SC_MANAGER_ENUMERATE_SERVICE - list all services
RP - SC_MANAGER_QUERY_LOCK_STATUS - interogate the status of each
RC - STANDARD_RIGHTS_READ - read the permissions of scmanager and services

ACL 儲存在HKLM:\SYSTEM\CurrentControlset\Control\ServiceGroupOrder\Security

您需要確定 scmanager 上目前的 ACL,並將上述字串包含在適當的位置 - 位於中間的某個位置,在自由 ACL 的末尾和系統 ACL 之前,如下所示:

D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

根據您的部署方式以及自動部署的系統是什麼,您可能會發現利用該sc.exe命令更容易。您使用 sc.exe 管理的「服務」並不是真正的服務,它是服務控制管理員(scmanager):

sc.exe sdset scmanager "D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CC;;;S-1-15-3-1024-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)(A;;CCLCRPRC;;;<SID goes Here>)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"


從技術上講,這是過度訪問,因為它授予帳戶查詢任何服務(而不僅僅是少數服務)的狀態和權限的權限。

相關內容