Windows - Sử dụng dịch vụ cục bộ và / hoặc tài khoản dịch vụ mạng cho dịch vụ windows


18

Tôi đã tạo dịch vụ của một cửa sổ theo dõi các tệp trên một thư mục cụ thể trên HĐH Windows của chúng tôi. Khi một tệp được phát hiện, dịch vụ sẽ thực hiện một số I / O tệp, đọc các tệp, tạo các thư mục con, v.v. Dịch vụ này cũng sử dụng kết nối cơ sở dữ liệu để kết nối với máy chủ khác. Kế hoạch của tôi là để dịch vụ chạy như tài khoản "Dịch vụ địa phương" mặc định. Vì tôi cần cho phép các đặc quyền ghi / đọc, mà rõ ràng tài khoản "Dịch vụ cục bộ" không làm theo mặc định, tôi sẽ đặt rõ ràng các đặc quyền "Kiểm soát hoàn toàn" cho tài khoản "Dịch vụ cục bộ" trên thư mục mà tôi đọc / viết đến và đi.

Tôi tin rằng ở trên là tốt. Câu hỏi của tôi là, đối với thư mục mà tôi đang đọc và viết, tôi có cần thiết lập vai trò "Dịch vụ mạng" với quyền truy cập toàn quyền không? Tôi tự hỏi vì dịch vụ của tôi sử dụng kết nối cơ sở dữ liệu với máy chủ khác, nếu tôi cần thiết lập tài khoản "Dịch vụ mạng".

Tôi có thể hiểu nhầm tài khoản "Dịch vụ mạng" làm gì.

Câu trả lời:


18

Các NT AUTHORITY\NetworkServicetài khoản chỉ là cần thiết khi bạn đang giao tiếp với các máy tính khác trong một tên miền mà cần thông tin của máy tính của bạn để kiểm soát truy cập. Nó không cần thiết cho truy cập Internet / mạng đơn giản. Nó chỉ cần thiết cho các mục đích cụ thể trong miền Active Directory.

Ngoài ra, toàn bộ điểm của NT AUTHORITY\LocalServicetài khoản là nó có các đặc quyền tối thiểu trên hệ thống. Cung cấp cho nó nhiều đặc quyền hơn làm giảm tính bảo mật của nhiều dịch vụ trên hệ thống của bạn được thiết kế để chạy ở cấp đặc quyền thấp, nó được thiết kế để có lợi hơn. Nếu dịch vụ của bạn yêu cầu các đặc quyền ở trên và ngoài các đặc quyền đó, bạn nên tạo một tài khoản mới cho nó với các đặc quyền cần thiết và đặt tài khoản đó trong tab Đăng nhập của các thuộc tính của dịch vụ. (Điều này cũng có thể được thực hiện theo chương trình.)

Bạn cũng có thể chạy nó bằng NT AUTORITY\LocalSystemtài khoản có quyền truy cập không giới hạn vào hệ thống của bạn, nhưng tôi cho rằng bạn muốn sử dụng LocalServicetài khoản để tăng tính bảo mật mà nó cung cấp.


1
Làm thế nào việc cung cấp cho toàn bộ tài khoản LocalService toàn quyền kiểm soát trên một thư mục (và thư mục con) làm giảm tính bảo mật của các dịch vụ khác?
contactmatt

1
@ user19185 Nó không làm giảm an ninh của họ cho mỗi gia nhập , nhưng nó nâng cao hình ảnh tấn công. Nếu một dịch vụ đang hoạt động như LocalServicebị xâm phạm, nó sẽ có quyền truy cập vào bất cứ thứ gì bạn mở ra LocalService, trong khi thông thường nó sẽ không có quyền truy cập. Đây là quy trình vận hành bảo mật máy tính tiêu chuẩn từ những năm 70 .
Bản vá lỗi

1
Chỉ muốn chỉ ra rằng LocalSystemnhiều quyền và đặc quyền hơn các tài khoản quản trị viên thông thường.
Stein Åsmul

@Stein Åsmul: cảm ơn đã sửa! Tôi cập nhật câu trả lời của tôi để phản ánh điều này.
Bản vá lỗi

2

Câu trả lời trước không xuất hiện để giải quyết các câu hỏi trực tiếp, vì vậy tôi nghĩ rằng tôi sẽ thêm vào nó.

  1. Kế hoạch của tôi là để dịch vụ chạy như tài khoản "Dịch vụ địa phương" mặc định. Tôi sẽ đặt rõ ràng các đặc quyền "Kiểm soát hoàn toàn" cho tài khoản "Dịch vụ cục bộ" trên thư mục mà tôi đang đọc / ghi và gửi. Tôi tin rằng ở trên là một kế hoạch tốt.

Cá nhân, tôi không thấy một vấn đề lớn với kế hoạch này. Với BUILTIN, sự lựa chọn nằm giữa:

  1. Chạy dưới dạng ĐỊA PHƯƠNG - vì vậy nếu dịch vụ này bị xâm phạm, kẻ tấn công sở hữu mọi thứ và ngay lập tức.
  2. Chạy dưới dạng LOCALSERVICE - vì vậy nếu dịch vụ này hoặc bất kỳ dịch vụ nào khác trong tài khoản này bị xâm phạm, kẻ tấn công có quyền truy cập vào một thư mục bổ sung. *

Có thể cho rằng, thêm một vài ACL bổ sung để có thể sử dụng tùy chọn thứ hai là tốt hơn. Có, tùy chọn an toàn nhất cho dịch vụ đặc quyền thấp nhưng có độ nhạy bảo mật cao sẽ là chạy trong tài khoản dịch vụ đặc quyền thấp, được tùy chỉnh tùy chỉnh. Nhưng trừ khi bạn muốn tạo một tài khoản mới / quản lý mật khẩu cho mọi dịch vụ bạn triển khai, sử dụng LocalService cho các tác vụ không nhạy cảm nhỏ không phải là một điều tồi tệ. Bạn chỉ cần đưa ra quyết định có trách nhiệm dựa trên những cân nhắc này, như những gì trong thư mục đó hoặc cơ sở dữ liệu đó, tác động nếu chúng bị vi phạm, v.v.

Mặc dù một lần nữa, theo nguyên tắc đặc quyền tối thiểu, bạn chỉ nên đặt Full Controlnếu Modifythực sự không đủ.

2. Câu hỏi của tôi là, đối với thư mục mà tôi đang đọc và viết, tôi có cần thiết lập vai trò "Dịch vụ mạng" với quyền truy cập toàn quyền không? Tôi tự hỏi vì dịch vụ của tôi sử dụng kết nối cơ sở dữ liệu với máy chủ khác, nếu tôi cần thiết lập tài khoản "Dịch vụ mạng".

Nếu cơ sở dữ liệu của bạn yêu cầu đăng nhập Windows Tích hợp / SSPI, thì có, bạn sẽ cần sử dụng NetworkService (hoặc tài khoản dịch vụ miền) ở mọi nơi, ví dụ: RunAs và quyền thư mục. Giả sử bạn cũng đã cấp quyền truy cập tài khoản tên miền hoặc tài khoản miền cho cơ sở dữ liệu này. Tôi nghi ngờ bạn đang làm điều đó, vì vậy nếu nó sử dụng xác thực tên người dùng / pwd bình thường, bạn sẽ có thể làm mọi thứ với LocalService. Bạn chỉ cần cấp một quyền tài khoản trên thư mục đó, bất cứ điều gì bạn sử dụng trong RunAs, không phải cả hai.

3.Tôi có thể hiểu nhầm tài khoản "Dịch vụ mạng" làm gì.

LocalService / NetworkService là các tài khoản gần như giống hệt nhau trên máy tính cục bộ. Sự khác biệt chủ yếu là những gì họ có thể làm trên mạng. NS có thể truy cập một số tài nguyên mạng vì nó xuất hiện trên mạng dưới dạng tài khoản (máy tính) thực. Nhưng LS sẽ xuất hiện dưới dạng ANONYMOUS, vì vậy nó sẽ bị từ chối hầu hết mọi thứ trên mạng.

Nhân tiện, bạn nên sử dụng Tác vụ theo lịch cho việc này, không phải dịch vụ.

* Từ Vista trở đi, do cách ly dịch vụ , một quy trình LocalService bị xâm phạm có thể dễ dàng tấn công người khác. Mỗi quy trình / phiên bản dịch vụ LocalService / NetworkService đều có phiên đăng nhập duy nhất SID (chủ sở hữu duy nhất), không giống như Windows 2003. Nhưng tôi không chắc điều này là hoàn hảo và giảm thiểu hoàn toàn lỗ hổng DACL trên các tệp và tài nguyên. SID bị hạn chế và mã thông báo hạn chế ghi được đề cập trong ngữ cảnh này.


2

Các câu trả lời khác xác nhận những gì bạn nói về việc sử dụng Dịch vụ địa phương. Tóm lại, Dịch vụ cục bộ là tài khoản được đề xuất sử dụng với dịch vụ của bạn, trừ khi bạn cần các tính năng SSPI Active Directory bổ sung của Dịch vụ mạng.

Để hạn chế quyền truy cập đọc / ghi vào một thư mục cụ thể, bạn có thể làm tốt hơn là chỉ cấp quyền truy cập vào tài khoản Dịch vụ cục bộ chung. Vấn đề, như những người khác đã chỉ ra, là điều này cũng sẽ cung cấp quyền truy cập đọc / ghi cho tất cả các dịch vụ khác đang hoạt động như Dịch vụ địa phương và nếu tất cả các dịch vụ đã làm điều này thì dần dần Dịch vụ địa phương sẽ nhận được quyền truy cập vào nhiều tài nguyên quan trọng hơn.

Giải pháp là thay vào đó ACL thư mục của bạn bằng SID dịch vụ cụ thể của bạn. Chỉ quy trình dịch vụ của riêng bạn mới có SID dịch vụ của bạn được liên kết với nó, vì vậy điều này sẽ khóa tài nguyên của bạn hơn nữa. Bạn có thể xem SID dịch vụ bằng cách sử dụng sc showsid <service name>. SID dịch vụ được tạo từ tên dịch vụ, do đó, nó sẽ giống nhau trên tất cả các máy.

Để cho phép sử dụng dịch vụ SID bởi dịch vụ của bạn, hãy sử dụng ChangeServiceConfig2với SERVICE_SID_INFOcấu trúc cần đặt SERVICE_SID_TYPE_UNRESTRICTED. Bạn cũng có thể đặt SERVICE_SID_TYPE_RESTRICTEDđể có được một SID thậm chí còn hạn chế hơn, chỉ cho phép truy cập ghi vào các tài nguyên được cho phép rõ ràng với SID dịch vụ của bạn.

Liên kết này có các mô tả cấp cao về SID dịch vụ và SID dịch vụ bị hạn chế: https://docs.microsoft.com/en-us/preingly-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = w.10)

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.