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