一般企业会在AD里创建服务账号,比如备份使用的专用账号,监控使用的专用账号。如果不对这些服务账号进行良好地监控,这些账号可能会“年久失修”,最终成为安全隐患。

   解决这个问题,我的做法是:

1)所有服务账号放在一个专用的OU下,比如Service Accounts。

2)账号描述一定要写详细,清晰。比如“This account is for backup system, create dy Jackie Chen”。

3)配置定期自动运行以下Powershell脚本,会生成一个.csv报告,包含账号名,描述,何时创建,最后一次设定密码的时间,所属组信息。

4)把这个.csv报告导入Excel,运用Excel的filter功能来做分析。

 
  
  1. cls 
  2.  
  3. $searcher = new-object DirectoryServices.DirectorySearcher([ADSI]"")   
  4. $searcher.filter = "(&(objectcategory=user))" 
  5. $Searcher.SearchRoot ="LDAP://OU=Service Accounts,DC=Test,DC=Com" 
  6. $Searcher.CacheResults = $true   
  7. $Searcher.SearchScope = "Subtree" 
  8. $userlist=$searcher.findall()   
  9.  
  10. $date = $(Get-Date -UFormat "%y-%m-%d-%H:%M").tostring() 
  11. echo "SERVICE_ACCOUNTS_LIST Updated on $date" > service_accounts.csv 
  12. echo "Name,Descriptions,Account_Created_Date,Password_Lastset_Date,Member_of" >> service_accounts.csv 
  13.  
  14. foreach ($user in $userlist) 
  15.     $name = $($user.properties.cn).tostring() 
  16.      
  17.     if($user.Properties.description -ne $null) 
  18.     {$notes = $($user.properties.description).tostring()} 
  19.     else  
  20.     {$notes = "N/A"
  21.      
  22.     $whencreated = $($user.properties.whencreated).tostring() 
  23.      
  24.     $pwdlastset = [datetime]::fromfiletime(($user.properties.pwdlastset)[0]) 
  25.      
  26.     if($user.Properties.memberof -ne $null) 
  27.     {$memberof = $($user.properties.memberof).tostring()} 
  28.     else 
  29.     {$memberof = "N/A"
  30.          
  31.     if($user.Properties.lastlogontimestamp -ne $null) 
  32.     {$lastlogon = [datetime]::fromfiletime(($user.properties.lastlogontimestamp)[0])} 
  33.  
  34.     out-file -InputObject $($name+","+$notes+","+$whencreated+","+$pwdlastset+","+$memberof) service_accounts.csv -Append