Khởi động lại theo lịch trình một dịch vụ với quyền lực là tài khoản dịch vụ không phải quản trị viên


11

Trước khi tôi bị bắn hạ, tôi biết cách lên lịch tác vụ, khởi động lại dịch vụ bằng powershell hoặc cung cấp cho tài khoản không phải quản trị viên các đặc quyền để khởi động lại dịch vụ. Đó không phải là vấn đề. Tuy nhiên, vấn đề là sự kết hợp của cả ba nhiệm vụ này.

Tôi có một dịch vụ windows cần xử lý tệp trên thư mục mạng. Do đó, nó đăng nhập bằng "tài khoản dịch vụ" thực sự chỉ là một tài khoản miền thông thường. Tài khoản miền này không phải là quản trị viên nhưng có quyền truy cập vào thư mục nói trên. Dịch vụ này hoạt động tốt và hoạt động tốt.

Tuy nhiên, đôi khi có một lỗi trong một trong các tệp ngăn các tệp khác bị xử lý. Thông thường phải mất một thời gian để ai đó chú ý và có một số tồn đọng.

Vì vậy, tôi đã tạo một tập lệnh giám sát trong powershell để thăm dò thư mục mạng cho các tệp sai này. Nếu chúng được tìm thấy, các tệp sẽ được chuyển đến một thư mục tạm thời để xem xét và dịch vụ cần phải được khởi động lại.

Tôi đã cho các đặc quyền tài khoản dịch vụ thông qua chính sách nhóm để bắt đầu và dừng dịch vụ.

nhập mô tả hình ảnh ở đây

Khi tôi đăng nhập vào máy chủ bằng tài khoản dịch vụ, tôi có thể khởi động lại dịch vụ theo cách thủ công bằng cách sử dụng Dịch vụ MMC. Tôi cũng có thể thực thi tập lệnh powershell và nó thực hiện chính xác những gì nó phải làm: thăm dò thư mục, di chuyển các tập tin và khởi động lại dịch vụ. Tuyệt quá!

Trong giai đoạn tiếp theo, tôi đã tạo một tác vụ theo lịch trình chạy cứ sau 10 phút. Tác vụ sử dụng cùng một tài khoản dịch vụ như dịch vụ để thực thi tập lệnh powershell. Hộp "thực thi với các đặc quyền cao nhất" được chọn. Giống như tôi đã nói, tập lệnh powershell cần truy cập vào ổ đĩa mạng, vì vậy tôi không thể chạy nó với tư cách là quản trị viên máy chủ cục bộ và tôi không muốn sử dụng thông tin quản trị viên tên miền cho một nhiệm vụ như thế này. (Tôi cố gắng thực hiện nguyên tắc đặc quyền tối thiểu nhất có thể.)

Tôi đã cấp cho tài khoản dịch vụ quyền "đăng nhập theo đợt" trên máy chủ cục bộ bằng MMC Chính sách bảo mật cục bộ.

Bây giờ là phần mà tôi không thể tìm ra: Tại thời điểm đã lên lịch, các tác vụ theo lịch trình sẽ hoàn thành thành công và tập lệnh powershell đang được thực thi. Kịch bản thăm dò thư mục và các tệp lỗi được di chuyển. Điều duy nhất không hoạt động là khởi động lại dịch vụ ...?! Một lần nữa, chạy tập lệnh theo cách thủ công khi cùng một người dùng hoạt động hoàn hảo.

Tôi không thấy nhiều trong trình xem sự kiện, nhưng việc đăng nhập vào tập lệnh của tôi cho biết lỗi này:

TerminatingError (Dừng dịch vụ): "Không thể mở Trình quản lý kiểm soát dịch vụ trên máy tính '.'. Hoạt động này có thể yêu cầu các đặc quyền khác."

Các lệnh tôi sử dụng để khởi động lại dịch vụ là:

Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])

(Tôi đang sử dụng máy chủ windows 2012 R2 và powershell phiên bản 4 trên Miền 2008 R2.)

Cập nhật: Cả hai tôi đã thử thiết lập quyền dịch vụ cho người dùng bằng subinacl (như được mô tả ở đây ) và đặt chuỗi SDDL theo cách thủ công (như được mô tả ở đây ), vì vậy các cờ điều khiển của tôi trông như thế này (A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX). Tôi cũng đã thử đặt các đặc quyền trên dịch vụ thành Kiểm soát hoàn toàn trong GPO. Không ai trong số này giải quyết vấn đề cả. Nó phải là một vấn đề với các đặc quyền ở đâu đó mà tôi vẫn đang xem xét, bởi vì khi tôi lên lịch tác vụ với tài khoản miền là quản trị viên cục bộ trên máy chủ, nó hoạt động rất tốt.


Đây có thể là một số trợ giúp serverfault.com/questions/357424/ , có vẻ như powershell rất kén chọn các quyền và không phải là điều hiển nhiên
Drifter104


@ Drifter104: Mặc dù tôi sử dụng GPO để đặt quyền trên dịch vụ, không phải subinacl, dù sao tôi cũng đã thử với các thông số của STOE, nhưng vẫn thấy kết quả tương tự. Kiểm tra hai lần cài đặt GPO của tôi và chúng cũng được bật tùy chọn Dịch vụ phụ thuộc.
VolrathTheFallen

@ MyronSemack-msemack Tôi đã thử thiết lập chuỗi SDDL cho dịch vụ theo cách thủ công như được mô tả trong bài viết, nhưng vẫn không may mắn tôi nghĩ cuối cùng GPO và subinacl cũng làm điều tương tự, vì chúng dường như ghi đè lên cái này và cái khác.
VolrathTheFallen

1
Làm thế nào về việc thử Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....thay vì Stop-ServiceCmdLet? Câu trả lời này và Dịch vụ bắt đầu dường như không thể truy cập từ xa theo câu trả lời này: Không thể sử dụng Get-Service mật vụ trên máy tính từ xa và thông báo lỗi của bạn có thể liên quan đến việc cố gắng kết nối với "localhost" từ xa. ' (<== đó là một dấu chấm ở đó.)
John aka hot2use

Câu trả lời:


3

Các anwser cho một câu hỏi khác cũng giải quyết vấn đề của tôi.

Các bước tôi đã làm là:

  1. enable-psremoting trên máy chủ trong lời nhắc quyền hạn của quản trị viên
  2. Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI trên máy chủ trong lời nhắc quyền hạn của quản trị viên
  3. Đã thêm tài khoản dịch vụ (hoặc nhóm bảo mật) với đầy đủ đặc quyền
  4. sc sdshow scmanager trên máy chủ trong dấu nhắc lệnh của quản trị viên
  5. Sao chép đầu ra SDDL
  6. Thêm (A;;KA;;;SID_OF_USER_OR_SECURITY_GROUP)vào SDDL trước phần S:
  7. sc sdset scmanager THE_MODIFIED_SDDL Của tôi trông như thế này: sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;KA;;;S-1-X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
  8. Thay đổi tập lệnh powershell của tôi để nó sử dụng Start-ServiceCmdLet thay vì Set-Service(Set-Service không hoạt động).

Có vẻ như một cái gì đó đơn giản hóa ra, CÁCH phức tạp hơn nó nên ...

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.