Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Theo mặc định, người dùng phổ thông (non-admin) không thể quản lý dịch vụ Windows. Điều này có nghĩa là người dùng không thể dừng, bắt đầu, khởi động lại, hoặc thay đổi cài đặt/quyền của dịch vụ Windows. Trong một số trường hợp, cần thiết cho người dùng có quyền khởi động lại hoặc quản lý các dịch vụ cụ thể. Trong bài viết này, chúng ta sẽ xem xét một vài cách để quản lý quyền cho dịch vụ Windows. Cụ thể, chúng ta sẽ chỉ cho bạn cách cho phép người dùng không phải admin bắt đầu, dừng và khởi động lại một dịch vụ Windows cụ thể bằng cách cấp quyền thích hợp.

Giả sử, bạn cần cấp cho tài khoản miền contoso\tuser quyền để khởi động lại dịch vụ Print Spooler (tên dịch vụ – spooler). Khi non-admin cố gắng khởi động lại dịch vụ, lỗi xuất hiện:

System error 5 has occurred. Access is denied.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Không có công cụ tích hợp đơn giản và thuận tiện để quản lý quyền dịch vụ trong Windows. Chúng ta sẽ xem xét một vài cách để cấp quyền cho người dùng quản lý dịch vụ:

Thiết Lập Quyền Dịch Vụ Windows Sử Dụng Công Cụ SC.exe (Service Controller)

Một phương pháp tích hợp chuẩn của Windows để quản lý quyền dịch vụ hệ thống giả định sử dụng công cụ sc.exe (Service Controller). Vấn đề chính với việc sử dụng tiện ích này là cú pháp phức tạp của định dạng quyền dịch vụ (định dạng SDDL — Security Description Definition Language).

Bạn có thể lấy quyền hiện tại cho một dịch vụ Windows dưới dạng chuỗi SDDL như sau:

sc.exe sdshow Spooler

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)
(A;;CCLCSWRPWPDTLOCRRC;;;SY)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

All these symbols mean what?

S: — System Access Control List (SACL) D: — Discretionary ACL (DACL)

Chữ cái đầu tiên sau ngoặc nghĩa là: allow (A) hoặc deny (D).

Tập ký hiệu tiếp theo là quyền có thể gán.

CC — SERVICE_QUERY_CONFIG (yêu cầu cài đặt dịch vụ) LC — SERVICE_QUERY_STATUS (truy vấn trạng thái dịch vụ) SW — SERVICE_ENUMERATE_DEPENDENTS LO — SERVICE_INTERROGATE CR — SERVICE_USER_DEFINED_CONTROL RC — READ_CONTROL RP — SERVICE_START WP — SERVICE_STOP DT — SERVICE_PAUSE_CONTINUE

Hai ký tự cuối cùng là đối tượng (người dùng, nhóm hoặc SID) được cấp quyền. Có một danh sách các nhóm được định nghĩa trước.

AU Authenticated Users AO Account operators RU Alias to allow previous Windows 2000 AN Anonymous logon AU Authenticated users BA Built-in administrators BG Built-in guests BO Backup operators BU Built-in users CA Certificate server administrators CG Creator group CO Creator owner DA Domain administrators DC Domain controllers DD Domain controllers DG Domain guests DU Domain users EA Enterprise administrators ED Enterprise domain controllers WD Everyone PA Group Policy administrators IU Interactively logged-on user LA Local administrator LG Local guest LS Local service account SY Local system NU Network logon user NO Network configuration operators NS Network service account PO Printer operators PS Personal self PU Power users RS RAS servers group RD Terminal server users RE Replicator RC Restricted code SA Schema administrators SO Server operators SU Service logon user

Thay vì nhóm được định nghĩa trước, bạn có thể chỉ định rõ ràng một người dùng hoặc nhóm bằng SID. Để lấy SID cho người dùng hiện tại, bạn có thể dùng lệnh:

whoami /user

Hoặc bạn có thể tìm SID cho bất kỳ người dùng miền nào bằng cmdlet Get-ADUser:

Get-ADUser -Identity 'sadams' | select SID

Bạn có thể lấy SID của nhóm bảo mật AD bằng cmdlet Get-ADGroup:

Get-ADGroup -Filter {Name -eq "ny-ithelpdesk"} | Select SID

Để gán chuỗi quyền SDDL cho một dịch vụ cụ thể, bạn có thể dùng lệnh sc sdset. Ví dụ: quyền có thể được cấp cho người dùng bằng lệnh sau:

sc sdset Spooler "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2133228432-2794320136-1823075350-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

Sử Dụng SubInACL để Cho Phép User Bắt Đầu/Dừng/Khởi Động Lại Dịch Vụ

Dễ dàng hơn là dùng công cụ dòng lệnh SubInACL từ Sysinternals (bởi Mark Russinovich) để quản lý quyền dịch vụ. Cú pháp của công cụ này dễ dàng và thuận tiện hơn nhiều. Đây là cách bạn có thể cấp quyền khởi động lại cho một dịch vụ bằng SubInACL:

  1. Tải xuống subinacl.msi từ trang web này (https://www.microsoft.com/en-us/download/details.aspx?id=23510) và cài đặt nó trên hệ thống đích;Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?
  2. Trong command prompt nâng cao, đi đến thư mục chứa công cụ: cd “C:\Program Files (x86)\Windows Resource Kits\Tools\”
  3. Chạy lệnh: subinacl.exe /service Spooler /grant=contoso\tuser=PTO
    Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?Lưu ý. Trong trường hợp này, chúng ta đã cấp cho người dùng quyền tạm dừng (pause/continue), bắt đầu và dừng (khởi động lại) một dịch vụ. Danh sách đầy đủ các quyền dịch vụ có sẵn:

    F : Full Control R : Generic Read W : Generic Write X : Generic eXecute L : Read controL Q : Query Service Configuration S : Query Service Status E : Enumerate Dependent Services C : Service Change Configuration T : Start Service O : Stop Service P : Pause/Continue Service I : Interrogate Service U : Service User-Defined Control Commands

    Nếu bạn cần cấp quyền cho dịch vụ chạy trên máy tính từ xa, sử dụng cú pháp sau của lệnh subinacl:
    subinacl /SERVICE \\lon-prnt1\spooler /grant=contoso\tuser=F

  4. Bây giờ bạn chỉ phải đăng nhập máy tính dưới tài khoản người dùng và thử khởi động lại dịch vụ với các lệnh:
    net stop spooler
    net start spooler
    hoặc
    sc stop spooler && sc start spooler
    Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Nếu bạn làm đúng mọi thứ, dịch vụ nên khởi động lại.

Để thu hồi quyền dịch vụ đã gán, sử dụng tùy chọn /revoke của công cụ subinacl.exe. Ví dụ:

subinacl.exe /service Spooler /revoke=contoso\tuser

Cách Thay Đổi Quyền Dịch Vụ Windows Sử Dụng Process Explorer?

Bạn có thể thay đổi quyền dịch vụ Windows bằng một tiện ích Sysinternals khác – Process Explorer. Chạy Process Explorer với quyền administrator và tìm tiến trình của dịch vụ bạn cần. Trong ví dụ của chúng ta, đây là spoolsv.exe (file thực thi spooler – C:\Windows\System32\spoolsv.exe). Mở thuộc tính tiến trình và nhấp tab Services.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Nhấp nút Permissions và thêm người dùng hoặc nhóm trong cửa sổ mở ra. Sau đó chọn quyền bạn muốn gán (Full Control/Write/Read).

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Thiết Lập Quyền Dịch Vụ Windows Sử Dụng PowerShell

Trong TechNet gallery có một mô-đun PowerShell không chính thức riêng để quản lý quyền cho các đối tượng Windows khác nhau – PowerShellAccessControl Module (bạn có thể tải nó ở đây). Mô-đun này cũng cho phép bạn quản lý quyền dịch vụ. Cài đặt mô-đun này và nhập nó vào phiên PS của bạn:

Import-Module PowerShellAccessControl

Bạn có thể lấy quyền hiệu lực cho một dịch vụ Windows cụ thể từ PowerShell như sau:

Get-Service spooler | Get-EffectiveAccess -Principal corp\tuser

Để cho phép non-admin user bắt đầu và dừng dịch vụ spooler, chạy lệnh:

Get-Service spooler | Add-AccessControlEntry -ServiceAccessRights Start,Stop -Principal corp\tuser

Sử Dụng Security Templates để Quản Lý Quyền Dịch Vụ

Một cách trực quan (nhưng đòi hỏi nhiều hành động hơn) để quản lý quyền dịch vụ là sử dụng Security Templates. Mở console mmc.exe và thêm snap-in Security Templates .

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Tạo một security template mới (New Template).

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Chỉ định tên cho template mới và đi đến phần System Services . Trong danh sách dịch vụ chọn dịch vụ Print Spooler và mở thuộc tính của nó.

Chọn chế độ khởi động (Automatic) và nhấp Edit Security.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Sử dụng nút Add, thêm tài khoản người dùng hoặc nhóm để cấp quyền. Trong trường hợp của chúng ta, quyền Start, stop and pause là đủ.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Lưu template này.

Lưu ý. Nội dung của Security Template được lưu dưới dạng file INF trong thư mục C:\Users\%username%\Documents\Security\Templates.

Nếu bạn mở file này, bạn có thể thấy thông tin về quyền được lưu ở định dạng SDDL, được đề cập trước đó. Chuỗi thu được theo cách này có thể được dùng làm đối số của lệnh sc.exe.

[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Service General Setting]
"Spooler",2,"D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;RPWPDTRC;;;S-1-5-21-3243688314-1354026805-3292651841-1127)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?
Bây giờ bạn chỉ phải tạo cơ sở dữ liệu mới (Open Database) bằng snap-in Security Configuration and Analysis và nhập Security Template của bạn từ file Spooler User Rights.inf.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Áp dụng template này bằng cách chọn tùy chọn Configure Computer Now từ menu ngữ cảnh.

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Bây giờ bạn kiểm tra rằng người dùng có thể quản lý dịch vụ Print Spooler dưới tài khoản non-admin.

Cách Cấp Quyền Quản Lý Dịch Vụ Cho User Sử Dụng GPO?

Nếu bạn phải cấp quyền cho người dùng để bắt đầu/dừng một dịch vụ trên nhiều máy chủ hoặc máy tính miền, dễ dàng hơn là sử dụng tính năng Group Policy (GPO):

  1. Tạo GPO mới hoặc chỉnh sửa GPO hiện có, liên kết nó đến container Active Directory cần thiết (OU) với đối tượng máy tính. Đi đến phần chính sách Computer configuration → Windows Settings → Security Settings → System Services;Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?
  2. Tìm dịch vụ Spooler và cấp quyền cho người dùng như trong phương pháp được mô tả ở trên. Lưu thay đổi;Lưu ý. Trước đó chúng ta đã chỉ rằng dùng cùng GPO bạn có thể ẩn bất kỳ dịch vụ Windows nào khỏi tất cả người dùng.
  3. Đợi cho đến khi GPO được áp dụng trên máy tính client và đảm bảo rằng quyền dịch vụ mới đã được gán.

Ở đâu các quyền bảo mật dịch vụ Windows được lưu trữ?

Cài đặt bảo mật cho tất cả dịch vụ mà bạn đã thay đổi quyền mặc định được lưu trong khóa đăng ký riêng của chúng HKLM\System\CurrentControlSet\Services\<servicename>\Security trong tham số Security kiểu REG_BINARY.

Điều này có nghĩa là một trong các cách để thiết lập quyền dịch vụ trên các máy tính khác là xuất/nhập tham số đăng ký này (kể cả qua GPO).

Cách Cho Phép Người Dùng Không Phải Admin Bắt Đầu/Dừng Dịch Vụ Windows?

Vì vậy, chúng ta đã xem xét một vài cách để quản lý quyền dịch vụ Windows, cho phép bạn cấp bất kỳ quyền nào cho dịch vụ hệ thống cho người dùng non-admin. Nếu người dùng yêu cầu truy cập từ xa đến dịch vụ, mà không cấp cho nó quyền đăng nhập cục bộ hoặc RDP, bạn phải cho phép người dùng kết nối từ xa và liệt kê dịch vụ qua Service Control Manager.