2011-08-18 5 views
1

시스템의 다른 사용자가 소유 한 파일에 액세스해야하는 Windows에서 로컬 시스템 사용자로 실행되는 java 프로세스가 있습니다. 내가 이해 한 바로는 로컬 시스템 사용자는 해당 사용자를 가장 할 수있는 권한이 있어야합니다. 이렇게하기 위해 우리는 파일에 접근하고있는 프로그램의 tid와 pid를 전달하고 그것으로부터 사용자 정보 (토큰)를 얻는다. 그런 다음 현재 스레드에서 토큰을 설정합니다. 이런 식으로 :java impersonation

DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup); 
SetThreadToken(NULL, hTokenDup); 

여기서 hToken은 스레드를 열고 해당 ID를 통해 처리합니다. 문제는 사용자 만 액세스 할 수있는 파일에 액세스하려고 시도하고 다른 사람이 읽을 수없는 파일을 액세스하려고 할 때입니다. 액세스가 거부되었습니다. 그래서 문제는 내가 가장을 통해이 파일에 액세스 할 수 있어야하는지 여부이고, 그렇다면 threadid와 pid가 주어진 다른 사용자를 가장하는 것이 올바른지 여부입니다. 나는 또한 윈도우 7과 윈도우 XP 사이에 다른 행동을 볼 것 같아요.

+2

제 지식이 제로에 가까워서 말도 안되는 생각이 들지만 제 첫 번째 아이디어는 1) 다른 사용자와 함께 실행 2) 파일 사용 권한 변경 –

+0

우리는 할 수 없습니다 . 우리는 그 정보를 미리 가지고 있지 않습니다. – noahd

답변

1

항상은 Windows API 호출의 반환 값을 테스트해야합니다. 그런 다음에 만 토큰이 실제로 복사되어 프로세스에 지정되었는지 확인하십시오.

명의 도용에는 단순한 사용자 인 경우 가질 수있는 권한이 필요하지 않습니다. DuplicateTokenEx 함수가 실패한 것 같습니다. 관리자 권한으로 다시 시도하고 ("다른 이름으로 실행 ..."도구 사용) 어떻게 진행되는지 알려주십시오.

+0

죄송합니다. 일부 코드를 남겨 두었습니다 ... 반환 값을 확인하고 있으며 모든 것이 다시 정상적으로 돌아옵니다. 또한 우리는 로컬 시스템 사용자로서 올바른 권한을 가졌거나 적어도 가장이 우선합니다. – noahd

+0

SYSTEM 계정으로 실제로 실행중인 경우 읽을 수 없거나 변경할 수없는 파일이 있다고 생각하지 않습니다. – executifs