IP:18.190.176.176

Máy tính
Kiến thức cơ bản
Mạng & Internet
Tin học văn phòng
Bảo mật & AntiVirus
Tiện ích - Hệ thống
Lập trình - Cơ sở dữ liệu
Đồ họa & Multimedia
Thử nghiệm - Đánh giá
Kỹ thuật phần cứng




Tự động quản lý Group Policy Management với Windows PowerShell
27/08/2009 09:39 AM

Group Policy là một công nghệ mạnh mẽ nhưng vẫn chưa hoàn thiện. Nó hữu ích, trong một số khu vực, và hầu như trong mọi môi trường. Và với những người lệ thuộc nhiều vào nó để bảo mật và khoá môi trường Windows của mình thì Group Policy là chìa khóa cho cơ sở hạ tầng của họ.

Thế nhưng tôi cũng rất ngạc nhiên khi thấy việc quản lý Group Policy lại ít được tự động hoá trong nhiều tổ chức IT. Khi Group Policy Management Console (GPMC) được đưa vào, Microsoft đã thực hiện một nhóm API và một số script mẫu có sẵn cho các công việc tự động thực hiện với console này. Có nhiều việc để làm với những API này, cũng như những cơ hội để tự động những mặt khác của quản lý Group Policy, như các công việc giải quyết và chuẩn đoán. Cùng với sự ra đời của Windows PowerShell, một số công việc này đã trở nên dễ dàng hơn.

GPMC đem lại điều gì?

GPMC được tập trung vào việc điều hành dựa vào toàn bộ Group Policy Object (GPO), và những cho phép tương ứng, các liên kết và nhiều thứ nữa. Nó không cung cấp tự động hay quản lý của những cài đặt hiện tại trong GPO. Tuy nhiên, nó có thể có ích khi thực hiện tự động hoá cho toàn bộ GPO như là một cách để quản lý quá trình thay đổi trong môi trường Group Policy của bạn.

Ví dụ, bạn có thể dùng GPMC APIs để thay đổi những đường dẫn đến GPO. Nếu bạn có một GPO mới mà bạn muốn triển khai, bạn có thể script tạo ra GPO và sau đó có thể script quá trình liên kết sau khi các cài đặt đã cư trú. Bạn cũng có thể script thay đổi của một cho phép của GPO, trong trường hợp bạn muốn thay đổi các nhóm bảo mật được GPO nhắm đến hay ai có thể edit GPO.

Tất nhiên bạn luôn có thể dùng API để truy vấn các thông tin về GPO, trái với việc chỉ có thể thực hiện các thay đổi. Nó cũng bao gồm việc tạo ra các báo cáo HTML- và các báo cáo dựa trên XML- cho các cài đặt GPO cũng như các báo cáo Resultant Set of Policy (RSoP) về các workstation và các server từ xa để xác định xem Group Policy có được áp dụng thành công không.

Cũng cần chú ý rằng khi Microsoft cho ra mắt GPMC update đưa vào Windows Vista SP1 và Windows Server 2008, có một vài update cho API để hỗ trợ một số chức năng mới mà cả GPMC và Group Policy đều hỗ trợ chung. Chúng cũng gồm khả năng tạo mới các GPO từ "Starter GPOs" và add các comment cho một GPO. Starter GPOs cũng giống các template - chúng cho bạn tạo một nhóm các nguyên tắc cài đặt

Administrative Template và bạn có thể áp dụng chúng cho một GPO mới, di trú lại một số cài đặt của nó. Tôi sẽ bắt đầu hướng dẫn các bạn cách tự động quá trình tạo ra, cho phép và nối một GPO và sau đó hướng dẫn các bạn cách tăng cường một số những chức năng mới của GPMC trong quá trình tự động hoá này.

Tự động chu kì vòng đời của GPO.

Để chỉ các bạn cách tự động tạo và quản lý GPO, tôi sẽ dùng Windows PowerShell và GPMC APIs. Trong ví dụ của tôi, tôi đang tạo một GPO gọi là"TechNet Marketing Policy." Khi tạo một GP, tôi sẽ dùng một Starter GPO gọi là "User Lockdown Template" làm điểm bắt đầu và thêm một comment cho biết là tôi đã tạo GPO đó. Tôi cũng có thể tạo Starter GPO dùng GPMC APIs, nhưng trong ví dụ này, tôi sẽ giả sử là nó đã có.

Bước tiếp theo là tôi muốn thực hiện tự động là cho phép GPO. Tôi sẽ cho phép GPO để chỉ những người dùng trong nhóm "Marketing Users" mới xử lý được nguyên tắc, và tôi sẽ add một nhóm gọi là "GPO Admins" với cho phép được edit GPO. Cuối cùng, tôi sẽ nối GPO đến Marketing OU trong domain Active Directory.

Toàn bộ script Windows PowerShell, mà tôi gọi là gpoCreate.ps1 như hình 1. Tôi đã những dòng số để đơn giản theo dõi.

 
Hình 1 The Windows PowerShell gpoCreate.ps1 scriptt

Dòng 1 yêu cầu để bắt đầu sử dụng GPMC APIs. Bạn sẽ dùng nó trong bất kì script GPMC nào mà bạn viết. Dòng này tạo một instance của đối tượng GPMC và gán nó vào biến $gpmc. Dòng 2 là một lệnh hay dùng khác. GPMC cung cấp một nhóm các hằng số tiện dụng dùng ở một chuỗi các nhiệm vụ mô tả một trạng thái xác định. Tôi sẽ nói về điều này sau, còn bây giờ tôi sẽ gán các hằng số vào biến số $constants.
Trong dòng 3, tôi cần một chứng nhận đến domain Active Directory mà tôi sẽ điều hành trên nó. Theo kinh nghiệm của tôi thì domain này gọi là cpandl.com. Để làm được điều này, tôi sẽ yêu cầu phương pháp GetDomain trên biến$gpmc. Hai thông số $null là tuỳ ý và cho phép bạn xác định một domain controller cụ thể sẽ kết nối khi bạn kết nối với domain. Để nguyên những cái này, tôi sẽ chọn mặc định là PDC emulator DC.

Trong dòng 4, tôi cần một chứng nhận đến Starter GPO (User Lockdown Template) của mình. Phương pháp GetStarterGPO chỉ hỗ trợ yêu cầu Starter GPO bằng GUID của nó, nên tôi sẽ vào console GPMC để tìm nó. (Nhưng cũng có script nó) Đó là GUID tôi đã bỏ qua đến phương pháp GetStarterGPO.

Trong dòng 5, một khi đã có chứng nhận Starter GPO của mình, tôi dùng nó để tạo mới GPO, sử dụng phương pháp CreateGPOfromStarterGPO có sẵn trên biến số $domain. Tôi gán GPO mới tạo đến $gpo nên tôi có thể tiếp tục sử dụng nó. Chú ý rằng, GPO không có tên (tên mặc định của nó là "New Group Policy Object"). Nên trong dòng 6, tôi thay đổi thuộc tính hiển thị Name trên $gpo để cho nó một tên mới. Ở dòng 7 tôi có thể add một comment vào GPO, bằng cách cài đặt thuộc tính miêu tả trên $gpo.

Bây giờ tôi đã tạo xong GPO, tiếp theo là thay đổi cho phép trên GPO. Trong dòng 8, tôi khởi động bằng cách đến danh sách hiện hành của các cho phép trên một GPO, sử dụng phương pháp GetSecurityInfo trên GPO. Các tiếp cận để thay đổi cho phép trên một GPO là đến danh sách hiện hành các cho phép trên GPO, add và xoá các cổng vào khỏi danh sách này nếu cần, sau đó đưa chúng vào lại danh sách GPO. Cuối cùng, trong dòng 9, tôi đã remove cho phép mặc định Authenticated Users khỏi GPO mới tạo.

Trong dòng 10 và 11, tôi đã tạo hai cho phép mới mà tôi muốn thêm vào GPO. Tôi đã dùng phương pháp $gpmc CreatePermission, cung cấp tên (nhóm người dùng) và cho phép mà tôi muốn nhóm này có. Chú ý rằng tôi đang dùng biến$constants để xác định quyền cho phép. $constants.permGPOApply cung cấp cho phép "Read and Apply Group Policy" chỉ cho phép thành viên của một nhóm được xử lý GPO, trong khi permGPOEdit cho phép nhóm này có khả năng Edit a GPO. Thông số $false cuối phương pháp CreatePermission chỉ đơn giản nói là cho phép không được kế thừa, đó là mặc định của cho phép GPO.

Một khi hai cho phép đã được tạo ra, dòng 12 và 13 add chúng vào lại danh sách$permissions và dòng 14 yêu cầu phương pháp SetSecurityInfo trên GPO để apply danh sách mới quay lại GPO. Hai dòng cuối nối SetSecurityInfo vào Marketing OU. Trong dòng 15, tôi yêu cầu phương pháp GetSOM (SOM nghĩa là "scope of management") trên biến $domain để kết nối đến OU. Trong dòng 16, tôi yêu cầu CreateGPOLink trên đối tượng $som vừa tạo và cho nó qua 2 thông số. Thông số đầu tiên thể hiện thứ tự trên OU mà tôi muốn GPO được nối vào (một OU có thể có nhiều GPO nối với nó). Tình trạng thứ nhất cho thống số đầu tiên thể hiện là tôi muốn GPO phải được nối đầu tiên trong danh sách. Thông số thứ hai (trong trường hợp này, là biến $gpo) là một chứng nhận đến GPO mà tôi muốn kết nối. Và bây giờ tôi đã tạo xong, đã cho phép, và nối GPO một cách tự động. Kết quả sẽ giống hình 2.

 
Hình 2 GPO mới tạo

Báo cáo Group Policy tự động

Another aspect of Group Policy management you can automate is the reporting. In this respect, there are at least two types of reports that GPMC delivers. The first is the ability to report on the settings within a GPO. This allows you to generate either an HTML- or XML-based report of the settings that are currently enabled in the GPO, as shown in Figure 3.

Một mặt khác của quản lý Group Policy mà bạn có thể tự động hoá là báo cáo. Về mặt này, có ít nhất hai dạng báo cáo mà GPO tạo ra. Đầu tiên là khả năng báo cáo trên các cài đặt trong GPO. Nó cho phép bạn hoặc là tạo các báo cáo HTML- hoặc là các báo cáo dựa trên XML- của cài đặt hiện hành đang được kích hoạt trên GPO, như hình 3

 
Hình 3 báo cáo trên các cài đặt GPO.

Khả năng báo cáo thứ hai cho phép bạn tạo Resultant Set of Policy (RSoP) hay các báo cáo Policy Results. Có hai dạng báo cáo RSoP - logging và planning. Một báo cáo logging chạy dựa trên một desktop hay server từ xa, thể hiện các chính sách nào đang được đưa đến hệ điều hành từ xa và liệu chúng có thành công không. Báo cáo planning RSoP cho bạn thực hiện những việc nếu phân tích một OU xác định, máy tính hay người dùng để xác định xem đang áp dụng chính sách nào. Trong cả hai trường hợp, logging và planning bạn đều có thể tạo các output HTML hoặc XML dùng GPMC APIs và Windows PowerShell.

 Tạo một báo cáo dựa trên HTML-

Để tạo một báo cáo cài đặt GPO trong Windows PowerShell, tôi khởi động với 2 lệnh khởi tạo quen thuộc, tôi cũng đã dùng chúng trong script trước:

1. $gpmc = New-Object -ComObject GPMgmt.GPM

2. $constants = $gpmc.GetConstants()

Tiếp theo, tôi cần chứng nhận GPO mà tôi muốn báo cáo, như sau:

3. $domain = $gpmc.GetDomain("cpandl.com",$null,$null)

4. $gpo = domain.GetGPO("{31B2F340-016D-11D2-945F-00C04FB984F9}")

Trong dòng 3 này, tôi đang kết nối với domain và sau đó trong dòng 4, tôi dùng phương pháp GetGPO trên domain để được chứng nhận đến GPO mà tôi muốn có báo cáo. Trong trường hợp này, tôi phải bỏ qua GUID của GPO, đó là"Default Domain Policy."

Tiếp theo, tôi cần tạo một cài đặt báo cáo:

5. $gpo.GenerateReportToFile($constants.ReportHTML,"c:\GPReports\DDPSettings.html")

Ở đây, tôi đang yêu cầu phương pháp GenerateReportToFile vào GPO để tạo các cài đặt báo cáo. Thông số đầu tiên dùng biến $constants để xác định dạng báo cáo HTML. Thông số thứ hai point đến đường dẫn mà tôi muốn lưu lại báo cáo.

Tạo một báo cáo dựa trên XML

Một cách khác để truy cập dữ liệu cài đặt dùng Windows PowerShell là tận dụng khả năng phân tích trong Windows PowerShell và khả năng của nó để tạo ra một báo cáo cài đặt trong XML. Nên, thay vào dòng 5 trên, tôi đã thay đổi như sau:

[xml]$report = ($gpo.GenerateReport($constants.ReportXML)).Result

Trong ví dụ này, tôi đang dùng một phương pháp khác trong GPO, gọi là GenerateReport. Phương pháp này cần một vài thông số, để làm dạng báo cáo. Nhưng trong trường hợp này, tôi đang gán output của phương pháp yêu cầu đến một biến số gọi là$report và tôi cũng thay tên của biến với dạng bộ tăng tốc[xml] Windows PowerShell, nó yêu cầu PowerShell lấy output của lệnh tôi đang giữ trên$report và convert nó thành một tài liệu XML thay vì một nhóm các text.

Tuy nhiên, để có được XML thật sự từ GenerateReport, tôi phải dùng thuộc tính Result của output đó, như bạn thấy ở hình dưới đây. Vì thuộc tính Result chứa các XML thật sự mà tôi đang dùng để tạo document XML.

Một khi đã có XML trong biến $report, tôi có thể làm rất nhiều việc thú vị với nó. Ví dụ, hãy xem dòng lệnh sau:

$report.GPO

Nó quay lại yếu tố "GPO" trong document đã cung cấp thông tin tổng quan về GPO mà tôi đã báo cáo. Hay lệnh này:

$report.GPO.LinksTo

Nó quay lại danh sách của tất cả các nơi mà GPO đã được kết nối.

Nhưng thú vị hơn, tôi có thể dùng cấu trúc tự nhiên của XML để điều tra những cài đặt thật sự trong GPO từ dòng lệnh. Ví dụ, bởi vì nó là Default Domain Policy GPO, tôi biết là nó có thể chứa một số cài đặt bảo mật liên quan đến nguyên tắc bảo mật. Bằng cách điều tra namspace GPO được hiện ra trong file XML, tôi có thể nhanh chóng thực hiện được các cài đặt này, như sau:

$report.GPO.Computer

Nó quay lại thông tin về phía Computer của GPO. Nếu tôi xem qua các thuộc tính của Comuter này, tôi nhận thấy một loạt các khu vực nguyên tắc bên dưới thuộc tính ExtensionData, như hình 4.

 
Hình 4 xem các cài đặt GPO thông qua XML

Trong ví dụ này, có hai khu vực mở rộng có trong phía máy tính của GPO: registry và bảo mật. nên tôi đã dùng lệnh sau:

$report.GPO.Computer.ExtensionData[0].Extension

Nó cho tôi một danh sách các khu vực nguyên tắc thực hiện dưới khu vực nguyên tắc Security. Tôi thấy hai thuộc tính gọi là Account và Security Options. Bây giờ hãy điền lệnh sau:

$report.GPO.Computer.ExtensionData[0].Extension.Account

Nó cho tôi một danh sách của mỗi cài đặt Account Policy cho GPO này, như hình 5.

Hình 5 xem các nguyên tắc cài đặt tài khoản trong GPO.

Chú ý rằng một số cài đặt không thật sự hiện ra trong giá trị như hình 5. Mỗi cài đặt được đưa trở lại như là một thành viên của một nhóm dưới thuộc tính Account. Để thấy nó, ví dụ như cài đặt Minimum Password Length, tôi cần chỉ rõ vào tập hợp này, như sau:

$report.GPO.Computer.ExtensionData[0].Extension.Account[4]

Một khi bạn đã điều hướng namspace XML cho các cài đặt GPO, bạn có thể dễ dàng nhận được các cài đặt xác định và dùng khả năng này kết hợp với Windows PowerShell để định vị giá trị của cài đặt trong GPO một cách nhanh chóng.
Báo cáo trên logging RSoP

Với các cài đặt GPO, bạn có thể tạo một báo cáo XML- hoặc dựa trên HTML- trong Windows PowerShell thể hiện các cài đặt Group Policy đã được áp dụng cho một máy cho trước. Cách tiếp cận hơi khác một chút. Mặc dù với hai lệnh khởi tạo này, tôi sẽ sử dụng script theo một cách hơi khác một chút:

1. $gpmc = New-Object -ComObject GPMgmt.GPM

2. $constants = $gpmc.GetConstants()

3. $rsop = $gpmc.GetRSOP($constants.RSOPModeLogging,$null,0)

4. $rsop.LoggingComputer = "xp2"

5. $rsop.LoggingUser = "cpandl\dpmtest"

6. $rsop.CreateQueryResults()

7. $rsop.GenerateReportToFile($constants.ReportHTML,"c:\gpreports\XP2Rsop.html")


Sau dòng 1 và 2 của qúa trình cài đặt, dòng 3 tạo biến$rsop bằng cách yêu cầu phương pháp GetRSOP trên $gpmc. Trong phương pháp yêu cầu này, tôi thể hiện là tôi muốn tạo một logging RSOP mà không phải là báo cáo planning. Dòng 4 và 5 cài đặt thuộc tính trên đối tượng$rsop để nói xem máy tính và người dùng nào mà tôi muốn các nhóm dữ liệu RSOP với. Sau đó, mục đích duy nhất của dòng 6 là kết nối đến máy tính xác định trong dòng 5 và tạo ra namespace RSoP cho truy vấn này. cuối cùng, trong dòng 7, tôi xuất kết quả của truy vấn đến một file HTML.

Chú ý rằng đối tượng RSoP cũng có một phương pháp tương tự cho các cài đặt GPO mẫu. và bạn có thể xuất báo cáo RSOP thành một tài liệu XML và điều hướng thông qua nó trong Windows PowerShell để xem điều gì đang diễn ra từ Group Policy trên client từ xa. Ví dụ, tôi muốn nhanh chóng tìm ra liệu quá trình Group Policy có thành công cho máy tính phía Computer cho quá trình GPO không. Tôi có thể dùng script trước, nhưng thay dòng 7 bằng:

[xml]$rsopReport = ($rsop.GenerateReport($constants.ReportXML)).Result

Nó sẽ đặt báo cáo RSoP của tôi vào một tài liệu XML.

Tiếp theo, tôi có thể điều hướng vào namespace XML để tìm ra tình trạng Client-Side

Extension (CSE) cho máy tính như sau:

$rsopReport.Rsop.ComputerResults.ExtensionStatus

Khi làm như vậy, tôi đã có một danh sách cho mình biết trạng thái trên mooic CSE đang được máy tính xử lý.
Dễ dàng hơn

Như tôi đã hướng dẫn, có rất nhiều đòn bẩy mạnh mẽ GPMC APIs để tự động chu kì đời sống của Group Policy, báo cáo, các công việc chuẩn đoán. Nhưng cần đến một vài bước để có được kết quả mong muốn. Tuy nhiên, có một cách giúp vấn đề này đơn giản hơn và sẽ sắp có mặt.

Tôi đã tạo một nhóm 25 cmdlets GPMC Windows PowerShell free chứa phần lớn các chức năng GPMC vào một cmdlets dễ sử dụng. Để làm mẫu cho bạn về quá trình đơn giản hoá, từ ví dụ đầu tiên khi tạo và sau đó là cho phép và nối một GPO, script sau dùng cmdlets GPMC của tôi sẽ thực hiện các nhiệm vụ như script mà tôi đã nói ở trước, như ít lệnh hơn:

$gpo = New-SDMgpo "Technet Marketing Policy" -FromStarterGPO "User Lockdown Template" -native

$gpo.Description = "Darren's Technet Demo GPO" Remove-SDMgpoSecurity

$gpo.DisplayName -Trustee "Authenticated Users" -PermApply

Add-SDMgpoSecurity $gpo.DisplayName -Trustee "Marketing Users" -PermApply

Add-SDMgpoSecurity $gpo.DisplayName -Trustee "GPO Admins" -PermEdit

Add-SDMgplink "Technet Marketing Policy" -Scope "OU=Marketing,DC=cpandl,DC=com" -Location 1

Hay hơn là Windows 7 và Windows Server 2008 R2 sẽ tích hợp cmdlets PowerShell cho GPMC. Ví dụ, để tạo GPO mẫu của tôi từ Starter GPO với một comment, tôi có thể tạo một lệnh Windows PowerShell, như sau:

new-gpo "Darren's Technet Policy" -starterGPOName
"User Lockdown Template" -Comment "Darren's Demo"


Microsoft cũng thêm vào hỗ trợ để đọc và viết một tập hợp các cài đặt Group Policy. Cụ thể, là hỗ trợ cho việc cài đặt registry đọc và viết vào nguyên tắc Administrative Template nguyên gốc hoặc phần mở rộng registry Group Policy Preferences. Ví dụ, để viết một giá trị registry mới vào Group Policy Preferences, tôi sẽ tạo lệnh sau:

Set-GPPrefRegistryValue "Darren's Technet Policy"
-key 'HKEY_LOCAL_MACHINE\Software\SDM Software'
-ValueName "Path" -Value "2" -Type String
-Context Computer -Action Update


Ở đây, cmdlet cài GPPrefRegistryValue cần một vài thông số để tạo một nguyên tắc cài đặt registry trong "Darren's Technet Policy" GPO cho giá trị registry.

HKEY_LOCAL_MACHINE\Software\SDM Software\Path= REG_SZ 2.

Thông số Context cho biết nguyên tắc nên được đặt dưới phía Computer hay phía User của GPO, và thông số Action xác định làm sao để áp dụng giá trị registry và tương ứng với các mục có trong GPP UI (những mục khác (Replace, Create và Delete).

Thời điểm tôi viết bài này thì Windows 7 và Windows Server 2008 R2 đang lên kế hoạch để đưa 25 cmdlets cho quản lý Group Policy. Một khi hoàn thành, quản lý Group Policy thông qua Windows PowerShell sẽ càng dễ dàng hơn.

Theo ITNews




CÁC TIN KHÁC

• Công cụ bảo mật tốt nhất cho năm 2010 (25/08/2009)
• Viết Egress Filters cho IDS của bạn (24/08/2009)
• Có nên dùng phần mềm diệt virus miễn phí (22/08/2009)
• Chặn IM bằng ISA server 2006 (21/08/2009)
• Khôi phục password bị mất trên Cisco Switch (20/08/2009)
• Thiết lập một mạng không dây Open-Mesh cho Linux (18/08/2009)
• Quản lý tài khoản người dùng với Disk Quotas (18/08/2009)
• Cập nhật phần mềm để máy tính luôn an toàn (13/08/2009)
• Bảo mật hệ thống firewall từ xa bằng SSH (08/08/2009)
• “Viết mật thư” với Microsoft Word (06/08/2009)




BLUE IDEA Trading and Computer Technology Company Limited
Copyright © 2009 BLUE IDEA Co., Ltd