2. Nguyên tắc hoạt động của WMI
3.5. Tìm hiểu kịch bản điều khiển xa
Hai loại kịch bảnđiềukhiển xa
Có hai loại kịch bản điều khiển xa. Loại thứ nhất là khi chúng ta chạy một kịch bản trên máy tính A và máy tính mục tiêu là B để thực hiện một số hành động trên nó. Trong thử nghiệm bằng sử dụng kịch bản ChangeIPAddress.vbs, chúng tôi đã thay đổi dòng:
strComputer = "." thành:
strComputer = "xp2"
Nếu chúng tôi sử dụng dòng đầu trên ở trên và chạy kịch bản trên máy tính A thì sẽ thay đổi đƣợc địa chỉ IP của máy tính này. Còn nếu chúng ta sử dụng dòng thứ hai ở trên và chạy kịch bản trên máy tính A thì sẽ thay đổi đƣợc địa chỉ IP của máy tính B. Kiểu thứ hai của kịch bản điều khiển xa và nó làm việc giống nhƣ vậy. Tôi là một quản trị viên, đã đăng nhập vào máy tính A và có một kịch bản muốn sử dụng để thực hiện một số công việc trên máy tính B. Tuy nhiên thay vì cố gắng chạy kịch bản trên máy tính A và mục tiêu là máy tính B, tôi muốn chạy kịch bản trực tiếp trên máy tính B. Chính vì vậy tôi đã đƣa kịch bản từ máy tính A sang máy tính mục tiêu B và sau đó chạy nó ở đây. Tôi có thể thực hiện điều đó nhƣ thế nào? Nếu có một môi trƣờng Active Directory sau đó tôi có thể thử và chạy kịch bản nhƣ kịch bản đăng nhập trên máy tính điều khiển xa. Chúng ta hãy xem thực hiện nhƣ thế nào trong bài tiếp theo, nhƣng bây giờ hãy chú ý rằng có hai loại kịch bản điều khiển xa.
Chạy kịch bản trên máy tính nội bộ và nhắm đến máy tính điều khiển xa. Chạy kịch bản trực tiếp trên máy tính điều khiển xa.
Hãy diễn tả sự khác nhau giữa hai cách mô tả kịch bản điều khiển xa:
Kiểu thứ nhất liên quan đến việc kết nối đến máy tính điều khiển xa và sau đó chạy kịch bản.
Kiểu thứ hay liên quan đến việc triển khai kịch bản cho máy tính điều khiển xa, sau đó chạy kịch bản.
58
Tìm hiểuvề kết nốikịch bảnđiềukhiển xa
Bây giờ chúng ta hãy tập trung vào kiểu đầu tiên của kịch bản điều khiển xa. Nó có nghĩa gì khi chạy một kịch bản trên máy tính cục bộ của bạn để kết nối đến một máy tính điều khiển xa và chạy ngƣợc lại nó? Nó có 3 ý nghĩa:
Kết nối mạng
Nhận dạng ngƣời dùng Cho phép thích hợp
1. Kết nốimạng
Với kịch bản để thực hiện điều gì đó trên máy tính điều khiển xa, trƣớc tiên nó phải thành lập đƣợc kết nối mạng với máy tính điều khiển xa. Những vấn đề gì có thể ngăn cản kết nối mạng của bạn?
Đầu tiên, nó có thể là vấn đề tên, nếu kịch bản của bạn không thể giải quyết đƣợc hostname của máy tính hoặc FQDN vào địa chỉ IP của nó thì kịch bản có thể bị lỗi. Thứ hai, nó có thể là vấn đề tƣờng lửa. Chúng ta đã nhìn thấy trong bài viết trƣớc, để có đƣợc kịch bản WMI của chúng ta có thể chạy cho một máy tính điều khiển xa thì chúng ta phải mở ngoại lệ quản trị từ xa Remote Administration trong tƣờng lửa Windows trên máy tính điều khiển xa. Bây giờ nếu bạn mở Windows Firewall applet từ Control Panel và chọn tab Exceptions thì sẽ không thấy hộp kiểm Remote Administration đƣợc gán nhãn mà bạn có thể chọn để mở ngoại lệ này. Lý do của điều này là Control Panel applet này có ý nghĩa chính dành cho ngƣời dùng gia đình sử dụng để cấu hình tƣờng lửa của họ. Trong môi trƣờng doanh nghiệp, nơi Active Directory đƣợc sử dụng, cách quản lý Windows Firewall đƣợc ƣa thích là sử dụng Group Policy. Chúng ta đã thấy trong bài viết trƣớc rằng thiết lập Group Policy mà
chúng ta cần cấu hình nhƣ dƣới đây:
Computer Configuration\Administrative
emplates\Network\NetworkConnections\Windows Firewall\Domain Profile\Windows Firewall: Dho phép ngoại lệ quản trị từ xa trở về.
Khi bạn nhắm đến chính sách này đối với một máy tính điều khiển xa thì nó sẽ mở hai cổng TCP trên máy tính đó: cổng 445 và 135.
• Cổng TCP 445 là cổng dành cho lƣu lƣợng đi vào Server Message Block (SMB), nếu cổng này bị khóa trên tƣờng lửa của máy tính điều khiển xa thì bạn không chỉ không thể kết nối tới nó bằng WMI mà cũng không thể kết nối đến nó bằng các công cụ quản
59
trị MMC chuẩn nhƣ Computer Management. Khi cổng bị khóa và bạn đang thử chạy các kịch bản đối với máy tính từ xa thì có thể gặp một số lỗi khó hiểu nhƣ “System error 53 has occurred. The network path was not found” – Lỗi hệ thống 53 xuất hiện. Đƣờng dẫn mạng không đƣợc tìm thấy…
• Cổng TCP 135 là cổng dành cho lƣu lƣợng vào Distributed COM (DCOM). Đặc biệt hơn, cổng 135 là cổng lắng nghe cho DCOM Service Control Manager (SCM), cung cấp các dịch vụ RPC cho việc thuyết minh các đối tƣợng COM.
Độ dài hay ngắn của nó là cả hai cổng TCP 135 và 445 cần phải mở trên tƣờng lửa của máy tính từ xa nếu các truy vấn WMI chạy từ máy tính cục bộ đến sử dụng thành công RCP để kết nối dịch vụ WMI trên máy tính điều khiển xa và đến thuyết minh thành công các đối tƣợng DCOM trên máy tính từ xa.
2. Nhậndạng người dùng
Khi bạn chạy kịch bản cho một máy tính điều khiển xa và có thể thiết lập kết nối mạng với máy tính từ xa, sau đó kịch bản có thể thực hiện các hành động trên máy tính từ xa đó. Nhƣng các hành động mà nó có thể thực hiện lại phụ thuộc vào sự nhận dạng với kịch bản nào đang chạy trên máy tính điều khiển. Ví dụ tôi đăng nhập vào máy tính A bằng sử dụng một tài khoản ngƣời dùng tên miền thông thƣờng. Sau đó tôi chạy kịch bản ChangeIPAddress.vbs và nhắm nó vào máy tính điều khiển xa B. Kịch bản sử dụng RPC để kết nối đến dịch vụ WMI trên máy tính B và nó thay đổi địa chỉ IP của máy tính B. Nhƣng bất thành. Lý do tại sao? Ai đang cố gắng thực hiện hành động này trên máy tính điều khiển xa? Trên máy tính cục bộ (máy tính A) bạn là ngƣời dùng và khi chạy kịch bản bằng mặc định nó là hiện thân cho nhận dạng của bạn, nghĩa là kịch bản sẽ thực hiện các hành động của nó bằng sự nhận dạng của bạn (tài khoản ngƣời dùng của bạn). Vì vậy kịch bản sẽ thay đổi địa chỉ IP của máy tính điều khiển xa, nó có hiệu quả đối với bạn, một ngƣời dùng trong miền, ngƣời đang thực hiện điều này. Mặt khác nó sẽ hỏng khi việc thay đổi yêu cầu đến sự ủy nhiệm quản trị viên cục bộ. Vì vậy, khi bạn đang ngồi tại máy tính A, đã đăng nhập vào ngƣời dùng của miền và bạn vẫn muốn sử dụng kịch bản của mình để thay đổi địa chỉ IP của máy tính B. Bạn có thể thực hiện chúng nhƣ sau:
60
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") với
strUser = "Administrator" strPassword = “Pa$$w0rd”
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2", strUser, strPassword)
Vấn đề ở đây là không an toàn – mật khẩu của tài khoản quản trị viên cho máy tính từ xa có trong văn bản của kịch bản và có thể bị quan sát.
Vậy làm thế nào để có thể loại bỏ đƣợc hai dòng đầu tiên này và giấu các giá trị strUser và strPassword cho kịch bản nhƣ các đối số khi kịch bản đƣợc chạy? Tốt hơn vẫn là việc mã hóa cứng các giá trị này trong kịch bản, nhƣng nếu ai đó có chƣơng trình đang chạy (nhƣ Network Monitor 3.0) thì họ có thể lấy đƣợc các thông tin quan trọng và khi đó bạn đã thỏa hiệp máy tính từ xa của mình.
Sẽ nhƣ thế nào nếu bạn sử dụng một lệnh nâng cao nhƣ runas /user:Administrator cmd.exe và sau đó chạy kịch bản từ cửa sổ lệnh nâng cao mà không cần chỉ định các thông tin quan trọng khác? Đó có thể là giải pháp tốt nhất cho kịch bản từ xa, nơi bạn muốn bảo đảm kịch bản có sự nhận dạng thích hợp (thƣờng quản trị nội bộ trên máy tính mục tiêu) dù cho nó khá phức tạp. Rõ ràng, bạn có thể đơn giản việc đăng nhập vào máy trạm làm việc nhƣ tài khoản quản trị miền và đơn giản mở một lệnh và chạy kịch bản.
3. Cho phép thích hợp
Bạn đang chạy kịch bản trên máy tính A và kịch bản đƣợc giả định để thực hiện một số hành động trên máy tính B. Kịch bản đã thành lập kết nối mạng với dịch vụ WMI trên máy tính B và đang cố gắng thực hiện các hành động của nó bằng sử dụng đúng nhận dạng (thƣờng là các thông tin quản trị viên cục bộ) trên máy tính B. Những gì có thể làm cho kịch bản này bị hỏng tại đây? Không đủ sự cho phép! Nếu kịch bản đang cố gắng thực hiện một số hành động đƣợc điều khiển bởi ACL (nhƣ việc thay đổi một đối tƣợng file hoặc tạo một đối tƣợng trong Active Directory hoặc kích hoạt một đối tƣợng DCOM) và bạn không có sự cho phép thích hợp để thực hiện hành động đó thì kịch bản sẽ bị lỗi. Không may thay đó thƣờng là phần khó nhất của kịch bản điều khiển xa khicó các cho phép NTFS, DCOM và nhiều kiểu cho phép khác trên nền
61
Windows. Bạn có thể có các cho phép đúng nhƣng không có quyền đúng, nghĩa là các quyền ngƣời dùng để thực hiện một số hành động. Ví dụ, nói rằng bạn muốn sử dụng kịch bản để xóa sự kiện đăng nhập trên máy tính điều khiển xa nhƣng sự nhận dạng của bạn thiếu quyền bảo mật SeSecurityPrivilege trên máy tính từ xa đó thì khi đó kịch bản của bạn sẽ bị lỗi.
3.6.Các thủ thuật của kịch bản điều khiển xa
Thủ thuật 1: Tạo Cscript.exe, cấu hình kịchbảnmặcđịnh trên các máy tính từ xa
Đây là thủ thuật đầu tiên và nó thực sự đơn giản nhƣng cũng khá thông minh do đó chúng ta cần phải có một số kiến thức cơ bản để dễ dàng tiếp cận. Bảo đảm rằng bạn biết một số cách để khởi chạy kịch bản trên các máy tính Windows. Ví dụ, nếu bạn có kịch bản ChangeIPAddress.vbs trên một máy tính thì có thể khởi chạy nó bằng cách: - Kích đúp vào file .vbs hoặc shortcut trỏ đến file.
- Kích Start, sau đó kích Run, nhập vào ChangeIPAddress.vbs và kích OK. - Mở một cửa sổ lệnh và điều hƣớng đến thƣ mục có kịch bản, nhập vào ChangeIPAddress.vbs sau đó nhấn ENTER.
Điều gì sẽ xảy ra nếu bạn thực hiện những thứ này, câu trả lời đó phụ thuộc vào những thiết lập mặc định nào đƣợc đặt cho Windows Script Host (WSH) trên máy tính của bạn. Windows Script Host (WSH) là một ngôn ngữ kịch bản độc lập dùng cho các scripting engine, có nghĩa là WSH sử dụng scripting engine là VBScript để chạy các kịch bản VBScript, vì vậy WSH hành động nhƣ “môi trƣờng” bên trong mà kịch bản của bạn chạy. Tuy nhiên WSH thực sự có hai cấu hình kịch bản mặc định:
- Wscript.exe, cung cấp một hộp thoại trên Windows cho việc thiết lập các thuộc tính kịch bản và hiển thị đầu ra kịchbản.
- Cscript.exe, cho phép cấu hình các thuộc tính kịch bản và hiển thị đầu ra kịch bản từ cửa sổ lệnh.
Hãy xem sự khác nhau giữa chúng trong trƣờng hợp bạn không biết hoặc quên. Chúng tôi sẽ sử dụng kịch bản ChangeIPAddress.vbs từ phần 2 của loạt bài này để minh chứng. Hãy mở cửa sổ lệnh trên máy tính Windows Vista và sử dụng kịch bản này để thay đổi địa chỉ IP của máy tính thành 172.16.11.173. Bây giờ việc đầu tiên cần chú ý đó là thay đổi các thiết lập cấu hình mạng cần thiết những tiêu chuẩn quản trị cục bộ trên máy, để thực hiện điều này chúng ta cần kích chuột phải vào shortcut của cửa sổ lệnh dƣới Accessories và chọn Run As Administrator. Khi thực hiện điều đó thì cửa sổ User Account Control (UAC) xuất hiện, kích Continue để tiếp tục (nếu tài khoản
62
vào các thông tin quan trọng của tài khoản quản trị cục bộ (nếu tài khoản chỉ là một thành viên của nhóm ngƣời dùng cục bộ trên máy).
Mở cửa sổ lệnh mức quản trị và đánh lệnh để thay đổi địa chỉ của máy tính (Hình 1).
Hình 1: Thay đổi địa chỉ IP dùng kịch bản
Điều gì sẽ xảy ra khi chúng ta nhấn ENTER, khi nhấn xong một vài giây sau, hộp thoại dƣới đây sẽ xuất hiện (Hình 1)
Hình 2: Đầu ra của kịch bản xuất hiện nhƣ một hộp thoại
Thông báo này đến từ đâu? Bạn hãy nhớ lại rằng kịch bản của chúng ta Change IPAddress.vbs gồm có các dòng dƣới đây ở cuối của kịch bản:
'Display result or error code If errEnableStatic=0 Then
Wscript.Echo "Adapter's IP address has been successfully changed to " & strAddress Else
Wscript.Echo "Changing the adapter's address was not successful. Error code " & errEnableStatic
63
Vậy những gì đang xảy ra là lệnh Wscript.Echo đang hiển thị đầu ra (nghĩa là hiển thị một hộp thoại) thay vì hiển thị đầu ra bên trong cửa sổ lệnh. Lý do là vì mặc định Wscript.exe có cấu hình kịch bản mặc định và cấu hình này đƣợc thiết lập cho những gì nó hiển thị đầu ra bằng cửa sổ giống nhƣ vậy.
Chúng ta có thể dừng các hành vi này và lấyđầu ra kịch bản để hiển thị bên trong cửa sổ lệnh đƣợc không? Có một cách có thể giải quyết đƣợc nhiệm vụ này đó là triệu gọi Cscript.exe đƣợc cấu hình kịch bản dòng lệnh khi chạy kịch bản. Bạn có thể thực hiện đƣợc điều này nhƣ hình 3 dƣới đây:
Hình 3: Sử dụng cscript.exe xuất đầu ra kịch bản bên trong cửa sổ lệnh
Tuy nhiên cách này có thể làm phiền bạn vì phải đánh cscript trƣớc khi đánh tên kịch bản giống nhƣ vậy, vì vậy bạn có thể thiết lập Cscript.exe nhƣ một cấu hình kịch bản mặc định cho tất cả triệu gọi WSH bằng thực hiện này (Hình 4):
64
Hình 4: Tạo cscript.exe cho cấu hình mặc định
Bây giờ chúng ta có thể chạy kịch bản và hiển thị đầu ra của nó từ bên trong cửa sổ lệnh mà không cần phải đánh cscript trƣớc (Hình 5):
Hình 5: Khi Cscript.exe là cấu hình kịch bản mặc định thì đầu ra của kịch bản đƣợc hiển thị bên trong cửa sổ lệnh
Chúng ta có một nhóm kịch bản giống ChangeIPAddress.vbs mà muốn chạy từ xa bằng cách triển khai chúng đến các máy đích nhƣ kịch bản đăng nhập hoặc khởi động kịch bản bằng Group Policy. Bên cạnh đó một số kịch bản có các câu lệnh
Wscript.Echo trong chúng tạo đầu ra kịch bản. Điều gì sẽ xảy ra khi một trong các kịch bản đó đƣợc triển khai cho máy tính điều khiển xa và chạy trên máy? Một loạt các cửa sổ sẽ xuất hiện trên màn hình desktop của ngƣời dùng nhƣ kịch bản chạy trên máy, và ngƣời dùng sẽ phải kích OK, OK và OK,… cho tới khi các cửa sổ bật ra này
65
biến mất hết và kịch bản kết thúc công việc của nó. Vậy có cách nào để khắc phục hiện tƣợng này?
Chúng ta có thể khắc phục hiện tƣợng này bằng hai cách. Đầu tiên, bạn có thể soạn thảo tất cả các kịch bản xóa hoặc chú thích câu lệnh Wscript.Echo để kịch bản không tạo ra bất cứ đầu ra nào. Đó là một chút trở ngại, đặc biệt nếu bạn có một số lƣợng lớn kịch bản. Vì vậy phƣơng pháp thứ hai là gì? Đây là một mẹo nhỏ mà chúng tôi muốn chia sẻ với bạn:
Trong môi trường Active Directory trong Group Policy đangđược sửdụngđểquản lý các máy tính desktop, bạn có thể thay đổicấu hình kịch bản từ Wscript.exe thành Cscript.exe trên các máy tính trong một OU bằng các bước dướiđây:
1. Sử dụng Notepad đểtạomột file văn bản có tên là ChangeToCscript.bat với hai dòng dưới đây trong nó:
@echo off
cscript //h:cscript //s
2. Mở GPO được liên kếtđến OU và điềuhướng đến Computer