■ 北京 劉長明
在Windows服務(wù)器的日常運維工作中,經(jīng)常需要為一個特定的服務(wù)申請一個專用的賬號,并由系統(tǒng)管理員對該賬號進行人工維護,但人工維護賬號會存在人為錯誤的潛在風(fēng)險,可能導(dǎo)致服務(wù)停止或者中斷。由于對運行的服務(wù)域用戶賬號密碼管理起來較麻煩,因此托管服務(wù)帳號(Managed Service Account)應(yīng)運而生。本文將會全面介紹微軟的托管服務(wù)賬號的基本概念和實用配置,期待在運維工作方面跟大家相互學(xué)習(xí)。
Windows服務(wù)只有登錄到某一帳戶的情況下才能訪問操作系統(tǒng)中的資源和對象。服務(wù)一般不要更改默認的登錄帳戶,否則可能導(dǎo)致服務(wù)失敗。如果選定帳戶沒有足夠的權(quán)限,Microsoft管理控制臺(MMC)的服務(wù)管理單元將自動為該帳戶授予登錄所管理計算機中服務(wù)的用戶權(quán)限。
Windows Server的服務(wù)可以用域帳戶或者三個內(nèi)置的本地帳戶作為各系統(tǒng)服務(wù)的登錄帳戶,三個內(nèi)置帳戶沒有密碼:
1.本地系統(tǒng)帳戶(Local System):本地系統(tǒng)帳戶功能強大,它可對系統(tǒng)進行完全訪問。
2.本地服務(wù)帳戶(NT AUTHORITYLocal Service)。
3.網(wǎng)絡(luò)服務(wù)帳戶(NT AU THORITYNetwork Service)。
系統(tǒng)中絕大多數(shù)的服務(wù)都是使用上述三個內(nèi)置本地帳戶作為登錄帳戶。
在一些情況下使用域帳戶和內(nèi)置帳戶存在一些問題,假設(shè)SQL Server的服務(wù)使用的是Local System帳號,那么其他使用Local System帳號的服務(wù)都可以連接到SQL Server數(shù)據(jù)庫;如果使用的是域帳戶,那么域帳戶的密碼在更改后,還需要在services.msc中手動相應(yīng)更改這些服務(wù)的登陸帳戶密碼;如果服務(wù)所使用的域帳戶的密碼設(shè)置為永不過期,又會留下系統(tǒng)安全隱患,所以從Windows Server 2008 R2開始,一個新功能Managed Service Account(托管服務(wù)帳戶)應(yīng)運而生。
所謂托管服務(wù)帳號,也即委托給操作系統(tǒng)進行管理的帳號。托管服務(wù)帳號(MSA)的密碼由操作系統(tǒng)自動設(shè)定、維護,定期自動更新,并不需要管理員手工干預(yù),對管理員來說,好像此帳號沒有密碼一樣。既減少了人為工作,又能進一步確保服務(wù)運行的穩(wěn)定性,不會因賬號問題出現(xiàn)服務(wù)故障。
從Windows Server 2018 R2域架構(gòu)主機開始,引進了一個新的對象類msDSManagedServiceAccount,創(chuàng)建一個MSA,查看它的objectClass屬性值,你會發(fā)現(xiàn)它有一個有意思的對象類繼承架構(gòu):
Computer
msDS-ManagedServiceAc count
organizationalPerson
Top
User
這個對象既是用戶對象,同時又是計算機對象,類似于一個計算機賬戶。
密碼管理上,托管服務(wù)賬號是一個準計算機對象,它使用與計算機對象相同的密碼更新機制,當計算機更新其密碼時,將同時更新MSA帳戶密碼(默認每30天更新一次)。當然,我們也可以通過修改注冊表鍵值來修改更新時間。
HKEY_LOCAL_MACHINESYS TEMCurrentControlSetServ icesNetLogonParameters
DisablePasswordChange=[0 or 1,default if value name does not exist is 0]
MaximumPasswordAge=[1-1,000,000 in days,default if value name does not exist is 30]
托管服務(wù)賬號不遵守域或細粒度的密碼策略,它使用自動生成的復(fù)雜密碼(240字節(jié),也就是120個字符,隨機生成)。托管服務(wù)賬號不能被鎖定,無法進行交互式登錄。當然,必要情況下,管理員也可以通過命令將MSA密碼設(shè)置為已知值。
所有的托管服務(wù)賬號都存儲在Managed Service Accounts容器里(如圖1),通過設(shè)置域用戶和計算機視圖中的顯示高級設(shè)置來查看這些賬號信息,但針對該賬號的所有操作都只能通過Powershell進行,不能在這里進行操作。
(1)必須是AD域環(huán)境。
(2)需要域管理員權(quán)限。
(3)AD域功能級別和域架構(gòu)主機必須是Windows server 2008 R2及以上。
圖1 托管服務(wù)賬號存儲在Managed Service Accounts中
(4)服務(wù)運行的宿主機系統(tǒng)必須是Windows server 2008 R2及以上。
(5)使用服務(wù)賬號的宿主機需要啟用PowerShell,AD PowerShell(遠程管理工具中的AD管理工具),以及.Net 3.5x framework。
(6)使用Managed Servi ce Account時需要以domai n nameManaged Service Account$的格式引用。
(7)托管服務(wù)帳戶要只能綁定在一臺計算機上使用,一個托管服務(wù)帳戶應(yīng)該只給一個服務(wù)來使用。
在域控上,以域管理員身份打開powershell并運行如下命令
Import-Module ActiveDirectory
New-ADServiceAccount-Name <托管服務(wù)賬號名>-Enabled $true
Add-ADComputerServi ceAccount -Identity<目標計算機主機名>-ServiceAccount <托管服務(wù)賬號名 >
Import-Module ActiveD irectory
Install-ADServiceAcco unt -Identity <托管服務(wù)賬號名 >
打開服務(wù)控制管理器,展開“配置→服務(wù)”,在右側(cè)雙擊所需配置的服務(wù),在登錄標簽頁下,選擇“此賬戶”→“瀏覽”,導(dǎo)航到之前創(chuàng)建的MSA帳號,點擊確定,使用該服務(wù)以選定MSA帳號運行。
也可通過如下powershell命令完成該操作# Edit this section:$MSA=”contosoMSAaccountname$”
$ServiceName=”‘s
ervice-name‘”
# Don’t edit this section:
$Password=$null
$Service=Get-Wmiobjec t win32_service -filter“name=$ServiceName”
$InParams=$Service.psbase.getMethodParamete rs(“Change”)
$InParams[“StartName”]=$MSA
$InParams[“StartPass word”]=$Password
$Service.invokeMeth od(“Change”,$InParams,$nu ll)
(1)使用如下命令將MSA賬號從本地計算機上移除。Remove-ADServiceAccount–identity
(2)在域控上使用如下命令將MSA賬號從域里刪除。(如果僅僅是將MSA賬號從當前的計算機關(guān)聯(lián)到另外一臺計算機,不需要運行這一步。)Remove-ADComputerServiceAccount–Identity <當前關(guān)聯(lián)的計算機主機名 >-ServiceAccount
至此,我們就了解了托管服務(wù)賬號的創(chuàng)建和配置,以及賬號移除操作。