Làm cách nào để tôi cấp quyền bắt đầu / dừng / khởi động lại trên một dịch vụ cho người dùng hoặc nhóm tùy ý trên máy chủ không phải là thành viên tên miền?


61

Chúng tôi có một bộ Dịch vụ Windows chạy trên các máy chủ của chúng tôi, thực hiện một loạt các tác vụ tự động độc lập với nhau, ngoại trừ một dịch vụ chăm sóc các dịch vụ khác.

Trong trường hợp một trong các dịch vụ không phản hồi hoặc treo, dịch vụ này sẽ cố gắng khởi động lại dịch vụ và, nếu một ngoại lệ được đưa ra trong nỗ lực, thay vào đó hãy gửi email cho nhóm hỗ trợ để họ có thể tự khởi động lại dịch vụ.

Sau khi thực hiện một nghiên cứu nhỏ, tôi đã tìm thấy một vài "giải pháp", bao gồm từ cách giải quyết được đề cập trong KB907460 để cung cấp cho tài khoản mà dịch vụ đang chạy quyền quản trị viên.

Tôi không thoải mái với một trong hai phương pháp này - Tôi không hiểu hậu quả của phương pháp đầu tiên như được nêu trong bài viết cơ sở kiến ​​thức của Microsoft, nhưng tôi chắc chắn không muốn cấp cho quản trị viên quyền truy cập vào tài khoản mà dịch vụ đang chạy .

Tôi đã xem qua Chính sách bảo mật cục bộ và ngoài chính sách xác định liệu tài khoản có thể đăng nhập như một dịch vụ hay không, tôi không thể thấy bất cứ điều gì khác có vẻ như liên quan đến dịch vụ.

Chúng tôi đang chạy ứng dụng này trên Server 2003 và Server 2008, vì vậy mọi ý tưởng hoặc gợi ý sẽ được đón nhận!


Làm rõ: Tôi không muốn cấp khả năng bắt đầu / dừng / khởi động lại TẤT CẢ các dịch vụ cho một người dùng hoặc nhóm cụ thể - Tôi muốn chỉ có thể cấp quyền để làm như vậy đối với các dịch vụ cụ thể , cho một người dùng hoặc nhóm cụ thể.


Làm rõ thêm: Các máy chủ tôi cần cấp các quyền này không thuộc về một miền - chúng là hai máy chủ truy cập internet nhận tệp, xử lý chúng và gửi chúng cho bên thứ ba, cũng như phục vụ một vài trang web, vì vậy Chính sách nhóm Active Directory không thể thực hiện được. Xin lỗi vì tôi đã không làm cho điều này rõ ràng hơn.


bạn cũng có thể xem bài viết này từ ms, cũng chỉ ra các sửa đổi GP: support.microsoft.com/kb/256345

3
Xin lỗi tôi nhớ bạn ... Tôi đã bận rộn. Bạn đang tìm kiếm một cái gì đó như thế này: serverfault.com/questions/15147/ Khăn
Evan Anderson

Tôi biết đây là một câu hỏi rất cũ, nhưng bạn đã cân nhắc sử dụng các tùy chọn 'recovery' trong trình quản lý dịch vụ Windows chưa?
Tim Long

Câu trả lời:


51

Dường như không có cách nào dựa trên GUI để thực hiện việc này trừ khi bạn tham gia vào một tên miền - ít nhất không phải là nơi tôi có thể tìm thấy ở bất cứ đâu - vì vậy tôi đã đào sâu hơn một chút và tôi đã tìm thấy câu trả lời phù hợp với cảnh báo của chúng tôi.

Tôi không hiểu cách biểu diễn chuỗi có ý nghĩa gì trong bài viết cơ sở kiến ​​thức, nhưng việc đào sâu một chút đã khiến tôi phát hiện ra rằng đó là cú pháp SDDL. Việc đào sâu hơn đã dẫn tôi đến bài viết này của Alun Jones , giải thích cách lấy mô tả bảo mật cho một dịch vụ và ý nghĩa của từng bit. MS KB914392 có nhiều chi tiết hơn.

Để nối với bộ mô tả bảo mật hiện có của dịch vụ, hãy sử dụng sc sdshow "Service Name"để lấy bộ mô tả hiện có. Nếu đây là một Dịch vụ Windows .NET cũ đơn giản - như trường hợp của chúng tôi - bộ mô tả bảo mật sẽ trông giống như thế này:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Chúng tôi cần cấp quyền RP(để bắt đầu dịch vụ), WP(dừng dịch vụ), DT(tạm dừng / tiếp tục dịch vụ) và LO(để truy vấn trạng thái hiện tại của dịch vụ). Điều này có thể được thực hiện bằng cách thêm tài khoản dịch vụ của chúng tôi vào nhóm Người dùng quyền lực, nhưng tôi chỉ muốn cấp quyền truy cập cá nhân vào tài khoản mà dịch vụ bảo trì chạy.

Sử dụng runasđể mở một dấu nhắc lệnh trong tài khoản dịch vụ, tôi đã chạy whoami /allcho tôi SID của tài khoản dịch vụ và sau đó xây dựng SDDL bổ sung bên dưới:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Điều này sau đó được thêm vào phần D: của chuỗi SDDL ở trên:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Điều này sau đó được áp dụng cho dịch vụ bằng sc sdsetlệnh:

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Nếu tất cả diễn ra theo đúng kế hoạch, thì dịch vụ có thể được khởi động, dừng, tạm dừng và trạng thái được truy vấn bởi người dùng được xác định bởi SID ở trên.


10
Để có cách dễ dàng hơn để làm điều tương tự, bạn nên xem xét bằng cách sử dụng SetACL.exe . Dưới đây là một ví dụ về cách sử dụng nó để đặt quyền trên một dịch vụ:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti

2
Bạn có thể sử dụng Process Hacker ( processhacker.sourceforge.net ) cho GUI để định cấu hình tất cả các dịch vụ. Nó bao gồm các dịch vụ ẩn và cho phép bạn định cấu hình thêm các cài đặt của dịch vụ như đường dẫn nhị phân - và các quyền.
ygoe

1
Gui CoreTech làm việc cho tôi. Khó có thể tin rằng GUI không tồn tại trong windows. Đọc câu trả lời ở đây làm thế nào nó có thể khó khăn như vậy? Thất bại lớn thay mặt cho Microsoft.
MikeKulls

Tôi muốn thêm CCLCSWvào các quyền SDDL (ngoài RPWPDTLO) để tôi cũng có thể thấy dịch vụ được liệt kê khi tôi chạy Get-Service (trước tiên yêu cầu sửa đổi SDDL cho dịch vụ quản lý điều khiển dịch vụ scmanager để có thể liệt kê các dịch vụ có thể truy cập) . Tôi cũng cần SWđể có thể khởi động lại một số dịch vụ.
Baodad

34

tôi chỉ có cùng một vấn đề.
Bạn có thể sử dụng SubInACL.exe từ Bộ tài nguyên. Tải xuống tiện ích độc lập tại đây: http://www.microsoft.com/doad/en/details.aspx?displaylang=en&id=23510

Sử dụng msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTođể giải nén các tệp nếu bạn không muốn cài đặt .msi

  1. Mở một dấu nhắc lệnh với tư cách Quản trị viên
  2. Chuyển đến thư mục mà bạn đã đặt .exe
  3. Chạy subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Dịch vụ bắt đầu
O = Dừng dịch vụ
P = Tạm dừng / tiếp tục dịch vụ

Tham khảo đầy đủ: Cách cấp quyền cho người dùng để quản lý dịch vụ trong Windows 2000
hoặc loạisubinacl /help

Lưu ý: đừng cố gắng subinacl /service SERVICE_NAME /permvì nó có thể khiến bạn gặp rắc rối (bài học rút ra: P). Tên có thể gây hiểu nhầm (perm! = Permit), vì nó xóa tất cả các quyền cho tất cả người dùng (ngay cả Quản trị viên!).


Không thể hợp nhất tài khoản SO và SF xin lỗi Pat.
Chopper3

@ Chopper3 Cảm ơn phản hồi của bạn. Thực tế tôi có 2 tài khoản SO: một tài khoản được đăng ký và liên kết với tài khoản SF này; một tài khoản khác là tài khoản SO chưa đăng ký mà tôi có trước khi đăng ký (sử dụng cùng một địa chỉ email). Tôi đã hy vọng cả hai có thể được hợp nhất để tôi có thể theo dõi bài viết tôi đã làm trước đây. Như đã đề cập ở đây, tôi đã cố gắn cờ một bài đăng nhưng không thể thực hiện trên SO (1 danh tiếng). Đây là lý do tại sao tôi gắn cờ bài này. Tôi cũng đã cố gắng gửi email cho team@stackoverflow.com hơn hai tuần trước nhưng không nhận được bất kỳ phản hồi nào. Bạn có thể hướng dẫn tôi đến đúng nơi / người xin vui lòng?
patrx

1
Kiểm tra các chi tiết của quy trình này tại MSDN: support.microsoft.com/?kbid=288129
Marc Climent

4

Bạn đang tìm Cấu hình máy tính - Chính sách - Cài đặt Windows - Cài đặt bảo mật - Dịch vụ hệ thống

Ở đó, bạn không chỉ có thể xác định loại bắt đầu dịch vụ mà còn có thể định cấu hình ACL bảo mật cho từng dịch vụ. Theo mặc định, giao diện sẽ chỉ liệt kê các dịch vụ được cài đặt trên máy bạn đang chạy GP Editor.

Để thêm các dịch vụ chỉ tồn tại trên máy khác:

  • xuất khóa reg của dịch vụ từ máy khác
  • nhập khẩu trên máy gpedit
  • áp dụng chính sách
  • xóa khóa đã nhập

Tôi tin rằng bạn có nghĩa là làm điều này thông qua gpedit.msc, vì cửa sổ "Manage Server" không liệt kê một nút chính sách. Nếu vậy, tôi không thể thấy một mục bên dưới nút Cài đặt bảo mật tham chiếu "Dịch vụ hệ thống" như bạn đề xuất ở trên, trên Server 2008 hoặc Server 2003.
abitgone

À đúng rồi. Tôi giả sử bạn đang lên kế hoạch thực hiện những thay đổi này thông qua chính sách nhóm.
Ryan Bolger

1
Thật vậy - đây không phải là máy chủ thành viên. Có cách nào để nhắm mục tiêu này bằng chính sách địa phương hoặc một số phương pháp khác không?
abitgone

2

Tôi đã sử dụng SubinAcl (theo đề xuất của patrx) để có thể khởi động MySQL như một người dùng tên miền thông thường (không phải quản trị viên) và nó hoạt động hoàn hảo! (tuy nhiên lệnh cần được thực thi dưới dạng tối thiểu -local- Admin)

Lệnh là:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Chỉ cần lưu ý rằng tôi đã nhập người dùng mà không cần tiền tố với tên miền ... nếu không lệnh sẽ thất bại trong lệnh phân tích cú pháp!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.