Windows - Windows 서비스에 로컬 서비스 및/또는 네트워크 서비스 계정 사용

Windows - Windows 서비스에 로컬 서비스 및/또는 네트워크 서비스 계정 사용

저는 Windows OS의 특정 디렉터리에 있는 파일을 모니터링하는 창 서비스를 만들었습니다. 파일이 감지되면 서비스는 일부 파일 I/O를 수행하고, 파일을 읽고, 하위 디렉터리를 만드는 등의 작업을 수행합니다. 또한 이 서비스는 데이터베이스 연결을 사용하여 다른 서버에 연결합니다. 내 계획은 서비스를 기본 "로컬 서비스" 계정으로 실행하는 것입니다. "로컬 서비스" 계정에서는 기본적으로 수행되지 않는 쓰기/읽기 권한을 허용해야 하므로 현재 폴더에서 "로컬 서비스" 계정에 대한 "모든 권한"을 명시적으로 설정하겠습니다. 읽기/쓰기.

나는 위의 내용이 좋다고 생각합니다. 내 질문은 내가 읽고 쓰는 폴더에 대해 모든 권한 액세스 권한이 있는 "네트워크 서비스" 역할을 설정해야 합니까?입니다. 내 서비스가 다른 서버에 대한 데이터베이스 연결을 사용하므로 "네트워크 서비스" 계정 설정이 필요한지 궁금합니다.

"네트워크 서비스" 계정이 수행하는 작업을 오해하고 있을 수 있습니다.

답변1

그만큼NT AUTHORITY\NetworkService계정액세스 제어를 위해 컴퓨터의 자격 증명이 필요한 도메인의 다른 컴퓨터와 통신할 때만 필요합니다. 단순한 인터넷/네트워크 액세스에는 필요하지 않습니다. 이는 Active Directory 도메인의 특정 목적을 위해서만 필요합니다.

또한 전체 요점은NT AUTHORITY\LocalService계정시스템에 대한 최소 권한이 있다는 것입니다. 더 많은 권한을 부여하면 시스템이 제공하도록 설계된 낮은 권한 수준에서 실행되도록 설계된 시스템의 많은 서비스에 대한 보안이 감소합니다. 서비스에 그 이상의 권한이 필요한 경우 필요한 권한이 포함된 새 계정을 생성하고 해당 계정을로그온서비스 속성 탭. (이는 프로그래밍 방식으로도 수행할 수 있습니다.)

다음을 사용하여 실행할 수도 있습니다.NT AUTORITY\LocalSystem계정LocalService, 시스템에 무제한으로 액세스할 수 있지만 보안 강화를 위해 해당 계정을 사용하고 싶다고 가정합니다 .

답변2

다른 답변은 로컬 서비스 사용에 대해 귀하가 말한 내용을 확인합니다. 요약하자면, 네트워크 서비스의 추가 Active Directory SSPI 기능이 필요하지 않은 한 로컬 서비스는 서비스에 사용하도록 권장되는 계정입니다.

특정 폴더에 대한 읽기/쓰기 액세스를 제한하려면 일반 로컬 서비스 계정에 대한 액세스 권한을 부여하는 것보다 더 나은 방법을 사용할 수 있습니다. 문제는 다른 사람들이 지적한 것처럼 이것이 로컬 서비스로 실행되는 다른 모든 서비스에 대한 읽기/쓰기 액세스도 제공한다는 것입니다. 모든 서비스가 이 작업을 수행하면 점차적으로 로컬 서비스가 점점 더 중요한 리소스에 액세스하게 됩니다.

해결책은 대신 특정 서비스 SID를 사용하여 폴더를 ACL하는 것입니다. 자신의 서비스 프로세스에만 서비스 SID가 연결되어 있으므로 리소스가 더욱 잠기게 됩니다. 를 사용하여 서비스 SID를 볼 수 있습니다 sc showsid <service name>. 서비스 SID는 서비스 이름에서 생성되므로 모든 시스템에서 동일합니다.

서비스에서 서비스 SID 사용을 활성화 ChangeServiceConfig2하려면SERVICE_SID_INFO설정할 구조입니다 SERVICE_SID_TYPE_UNRESTRICTED. SERVICE_SID_TYPE_RESTRICTED서비스 SID로 명시적으로 허용된 리소스에 대한 쓰기 액세스만 허용하는 훨씬 더 제한된 SID를 얻도록 설정할 수도 있습니다 .

이 링크에는 서비스 SID 및 제한된 서비스 SID에 대한 상위 수준 설명이 있습니다. https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/hh125927(v=ws.10)

답변3

이전 답변은 질문을 직접적으로 해결하는 것으로 보이지 않으므로 추가해야겠다고 생각했습니다.

  1. 내 계획은 서비스를 기본 "로컬 서비스" 계정으로 실행하는 것입니다. 읽고 쓰는 폴더의 "로컬 서비스" 계정에 대한 "모든 권한"을 명시적으로 설정하겠습니다. 나는 위의 계획이 좋은 계획이라고 믿습니다.

개인적으로 저는 이 계획에 큰 문제가 없다고 봅니다. BUILTIN을 사용하면 다음 중에서 선택할 수 있습니다.

  1. LOCALSYSTEM으로 실행 - 따라서 이 서비스가 손상되면 공격자가 소유하게 됩니다.모든 것, 그리고 즉시.
  2. LOCALSERVICE로 실행 - 따라서 이 서비스 또는 이 계정으로 실행되는 다른 많은 서비스 중 하나가 손상되면 공격자는 하나의 추가 디렉터리에 액세스할 수 있습니다.*

아마도 두 번째 옵션을 사용할 수 있도록 몇 가지 추가 ACL을 추가하는 것이 좋습니다. 예, 권한은 낮지만 보안에 매우 민감한 서비스를 위한 가장 안전한 옵션은 맞춤형의 낮은 권한 서비스 계정으로 실행하는 것입니다. 그러나 배포하는 모든 서비스에 대해 새 계정을 생성하거나 비밀번호를 관리하려는 경우가 아니라면 중요하지 않은 사소한 작업에 LocalService를 사용하는 것은 그다지 끔찍한 일이 아닙니다. 해당 디렉터리나 데이터베이스의 내용, 위반 시 영향 등을 고려하여 책임 있는 결정을 내리면 됩니다.

다시 말하지만, 최소 권한 원칙에 따라 실제로 충분하지 않은 Full Control경우 에만 설정해야 합니다.Modify

2.내 질문은 내가 읽고 쓰는 폴더에 대해 전체 제어 액세스 권한이 있는 "네트워크 서비스" 역할을 설정해야 합니까?입니다. 내 서비스가 다른 서버에 대한 데이터베이스 연결을 사용하므로 "네트워크 서비스" 계정 설정이 필요한지 궁금합니다.

데이터베이스에 Windows 통합/SSPI 로그인이 필요한 경우 예, RunAs 및 디렉터리 권한과 같은 모든 곳에서 NetworkService(또는 도메인 서비스 계정)를 사용해야 합니다. 이 데이터베이스에 대한 컴퓨터 이름$ 또는 도메인 계정 액세스도 부여했다고 가정합니다. 그렇게 하고 있는지 의심스럽습니다. 따라서 일반적인 사용자 이름/비밀번호 인증을 사용하는 경우 LocalService로 모든 작업을 수행할 수 있어야 합니다. RunAs에서 사용하는 디렉터리에 대해 하나의 계정 권한만 부여해야 하며 둘 다 부여할 필요는 없습니다.

3."네트워크 서비스" 계정이 하는 일을 오해하고 있을 수도 있습니다.

로컬서비스/네트워크서비스로컬 컴퓨터에서 거의 동일한 계정입니다. 차이점은 주로 네트워크에서 수행할 수 있는 작업입니다. NS는 네트워크에 실제(컴퓨터) 계정으로 나타나기 때문에 일부 네트워크 리소스에 액세스할 수 있습니다. 그러나 LS는 ANONYMOUS로 표시되므로 네트워크의 대부분의 모든 것이 거부됩니다.

그런데 이를 위해서는 서비스가 아닌 예약된 작업을 사용해야 합니다.

*Vista 이후부터는서비스 격리, 손상된 LocalService 프로세스 중 하나가 다른 프로세스를 쉽게 공격할 수 없습니다. 각 LocalService/NetworkService 서비스 프로세스/인스턴스는 Windows 2003과 달리 고유한 로그온 세션 SID(고유 소유자)를 갖습니다. 그러나 이것이 완벽하고 파일 및 리소스에 대한 DACL 취약점을 완전히 완화하는지 확신할 수 없습니다. 제한된 SID 및 쓰기 제한 토큰이런 맥락에서 언급됩니다.

관련 정보