Hãy xem xét các đặc điểm của việc cấp quyền truy cập từ xa để liệt kê danh sách dịch vụ đang chạy trên máy chủ từ xa cho người dùng miền mà không có quyền quản trị viên cục bộ. Thực tế, nhiệm vụ归结为提供对Service Control Manager (SCManager)的远程连接。
Đây là vấn đề trông như thế nào. Giả sử, chúng ta muốn một người dùng từ xa hoặc hệ thống giám sát có thể truy vấn trạng thái dịch vụ trên một số máy chủ. Với lý do rõ ràng, người dùng từ xa này không có bất kỳ quyền quản trị nào và đặc quyền truy cập máy chủ cục bộ.
Khi cố gắng kết nối và lấy danh sách dịch vụ trên máy tính từ xa bằng console services.msc, người dùng thấy lỗi sau:
Windows không thể mở cơ sở dữ liệu điều khiển dịch vụ trên computer_name
Lỗi 5: Truy cập bị từ chối.
Nếu bạn cố gắng lấy danh sách dịch vụ trên máy chủ từ xa bằng sc.exe, lỗi như sau:
C:\Windows\system32>sc \\lonts-01 query
[SC] OpenSCManager FAILED 5:
Truy cập bị từ chối.
Truy cập vào danh sách dịch vụ được kiểm soát bởi bộ mô tả bảo mật của cơ sở dữ liệu Service Control Manager, đối với quyền truy cập từ xa của người dùng từ “Authenticated Users” đã bị hạn chế kể từ Windows 2003 SP1 (điều này khá hợp lý). Chỉ các thành viên của nhóm Local Administrators mới có quyền truy cập dịch vụ này từ xa.
Hãy xem xét cách cấp quyền truy cập từ xa tới Service Control Manager để lấy danh sách dịch vụ trên máy chủ và cách người dùng phổ biến (không có quyền quản trị) có thể lấy trạng thái của các dịch vụ này trong Windows Server 2012 R2.
Quyền Service Control Manager (SCM) hiện tại có thể được lấy bằng sc.exe bằng cách chạy lệnh sau trong command prompt chạy với đặc quyền quản trị viên:
sc sdshow scmanager
Lệnh trả về chuỗi SDDL tương tự:
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
Trong trường hợp này, bạn có thể thấy rằng theo mặc định nhóm Authenticated Users (AU) chỉ được phép kết nối bằng SCM, nhưng không được phép truy vấn (LC) các dịch vụ. Sao chép chuỗi này vào bất kỳ trình soạn thảo văn bản nào.
Bước tiếp theo là lấy SID của người dùng hoặc nhóm mà chúng ta muốn cấp quyền truy cập từ xa tới SCM (Cách lấy SID người dùng bằng tên người dùng). Ví dụ, hãy lấy SID của nhóm AD lon-hd:
Get-ADgroup -Identity lon-hd | select SID
SID
---
S-1-5-21-2470146451-39123456388-2999995117-23338978
Sao chép khối (A;;CCLCRPRC;;;IU) – (IU có nghĩa là Interactive Users) từ chuỗi SDDL trong trình soạn thảo văn bản của bạn, thay thế IU trong khối đã sao chép bằng SID của người dùng/nhóm và dán chuỗi bạn nhận được trước S:
Trong trường hợp của chúng tôi, chúng tôi đã nhận được chuỗi sau:
D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;S-1-5-21-2470146451-39123456388-2999995117-23338978)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
Bây giờ hãy thay đổi tham số bộ mô tả bảo mật của Service Control Manager:
sc sdset scmanager “D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;CCLCRPRC;;;S-1-5-21-2470146451-39123456388-2999995117-23338978)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)”
Chuỗi [SC] SetServiceObjectSecurity SUCCESS cho biết các tham số bảo mật mới đã được áp dụng thành công, và người dùng đã nhận được đặc quyền tương tự như người dùng được xác thực cục bộ: SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS và STANDARD_RIGHTS_READ.
Đảm bảo rằng người dùng từ xa có thể lấy danh sách dịch vụ và trạng thái của chúng từ console services.msc bằng sc \\srv-name1 query
Mẹo. Nếu bạn gán bất kỳ quyền SCManager nào khác ngoài những quyền điển hình, chúng sẽ được lưu trong nhánh registry HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\Security. Và nếu bạn đã mắc lỗi khi chuẩn bị chuỗi SDDL, bạn có thể xóa nhánh này và khởi động lại máy tính để đặt lại quyền hiện tại về mặc định.