로컬 시스템 계정을 사용하여 Windows 서비스에서 시작하여 네트워크 공유에 액세스 할 수 없습니다.

StackOverflow https://stackoverflow.com/questions/249928

문제

Windows 서비스로 시작된 실행 파일이 있습니다.이 프로그램은 고객 시스템에서 실행되며 특정 작업을 수행하려면 원격 공유에 연결해야합니다. 이 점유율은 UI를 통해 고객이 지정하므로 미리 알 수 없다는 것을 알지 못합니다. "하드 코딩"또는 공유가 미리 매핑 될 수 없다는 것을 의미합니다.

이전에는 고객이 컴퓨터에 로그온하고 로그온에서 실행 파일을 실행해야했지만 항상 프로그램 내에서 실행할 수 있도록하고 로그인이 필요하지 않아 주로 고객이 더 쉽게 할 수 있도록했습니다. 우발적 인 로그 아웃이 소프트웨어를 종료하지 않도록합니다. 따라서 이는 고객 시스템에 어떤 지역 사용자 계정이 존재하는지 알지 못하므로 로컬 시스템 계정을 사용하여 서비스를 시작해야합니다.

위에서 언급했듯이 실행 파일을 시작하고 다양한 작업을 수행하는 래퍼 서비스가 있습니다. 이것은 대부분의 경우 잘 작동하고 기본 네트워크 정장에 액세스하는 것으로 보입니다. 소프트웨어의 목적은 주로 패킷 캡처 등을 포함합니다.

그러나 소프트웨어가 Windows 공유 (UNC 이름)에 연결하려고하면 연결할 수 없습니다. 실행 파일이 수동으로 시작되면 잘 연결됩니다.

이러한 종류의 문제를 해결하는 것이 일반적으로 본 제안은 시스템 계정이 네트워크 공유에 액세스 할 수 없으므로 사용자 계정을 사용한다고 말하지만, 우리의 경우에는 불가능합니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까?

편집 :이 응용 프로그램이 XP가 아닌 Win2K에서 실행될 수 있다는 사실을 언급하는 것을 잊었습니다. XP 전에 로컬 네트워크 계정을 사용할 수 없다고 말하는 것이 옳다고 생각합니다.

도움이 되었습니까?

해결책

Windows 서비스가 네트워크 서비스 계정에서 실행되도록 Windows 서비스를 변경할 수 있으면 실행 파일이 네트워크 공유에 액세스 할 수 있습니다 (이것이 네트워크 서비스 계정이 생성 된 이유 중 하나입니다).

로컬 시스템 및 로컬 서비스 계정에는 네트워크 자격 증명이 없으므로 네트워크에서 인증 할 수 없습니다. 이것은 디자인에 의한 것입니다.

편집하다: IIRC, 네트워크 서비스 계정은 서버 2003에 도입되었으며 XP 서비스 팩 중 하나에 추가되었습니다.

사용 가능한 네트워크 서비스 계정에 의존 할 수없는 경우 전용 도메인 계정을 작성하고 계정의 자격 증명을 어딘가에 저장하고 서비스 내부에서 읽은 다음 네트워크 공유에 액세스하기 전에 해당 사용자를 로그인하고 가장합니다. 또는 Windows 서비스는 전용 계정으로 직접 실행될 수 있으며,이 경우 "서비스로 로그온"권한이 필요합니다.

다른 팁

NT Authority localsystem (서비스 계정의 이름)에 따라 실행되는 서비스가있는 경우, 나머지 네트워크의 DomainName CompuTername $ ($ 부호 참고) 계정으로 나타납니다. 즉, Active Directory의 컴퓨터 계정으로 나타납니다. 파일을 부여하고 DomainName CompuTername $에 대한 권한을 공유하면 좋습니다.

다른 계정을 사용할 수없는 이유는 무엇입니까? Windows에 내장 된 네트워크 서비스 계정, 특히 네트워크 액세스가 필요한 서비스를 위해 내장되어 있습니다.

어쨌든, 서비스를 시작할 때 매우 조심하십시오.

EXE로 폴더에 대한 쓰기 액세스가 비활성화되지 않은 경우 사용자는 해당 EXE를 (예 :)로 바꿀 수 있습니다. cmd.exe. 다음에 서비스가 귀하의 EXE를 시작하려고 할 때, Voilà : 시스템 권한이있는 명령 쉘!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top