현재 프로세스의 유효 ID를 다른 사용자의 uid (또는 임의의 값)로 설정하고 싶습니다.다른 사용자 ID를 현재 프로세스로 설정하십시오.
는struct passwd* pwHost = getpwnam(hostName);//hostName is another user's name
struct passwd* pwGuest = getpwnam(guestName);//guestName is the current log-in user's name
if(pwHost==NULL||pwGuest==NULL)
{
printf("User cannot be found\n");
exit(0);
}
//setresuid(pwGuest->pw_uid, pwHost->pw_uid, pwGuest->pw_uid);//change the effective uid of current process to the host uid
setresuid(1000, 1000, 1000);//change current process's uid to a arbitrary value
printf("Host uid: %u\n", pwHost->pw_uid);
printf("Guest uid: %u\n", pwGuest->pw_uid);
static uid_t euid, ruid, suid;
getresuid(&euid, &ruid, &suid);
printf("euid: %u\n", euid);
printf("ruid: %u\n", ruid);
printf("suid: %u\n", suid);
printf("Set permission complete\n");
결과 : 그들 중 누구도 아직 변경되지 않은 것처럼
Host uid: 35917
Guest uid: 35917
euid: 35917
ruid: 35917
suid: 35917
그러나, 그것은 보인다. 매뉴얼을 훑어 보았는데, 사용자가 특권이나 내가 이해하기 힘든 것을 필요로한다고 설명한다. 아무도 내 목표를 달성하는 방법에 대한 힌트를 줄 수 없습니까? 고마워.
나는 OP가'setresuid'와 같은 시스템 호출의 반환 값에 대한 검사를 추가해야한다는 의견을 덧붙이고 싶습니다. 이것은 아마도 문제에 대한 단서를 제공했을 것입니다. – DoxyLover
감사합니다. 당신은 대답이 나에게 의미가 있습니다. 내가 아는 한 sudo 명령은 한 사용자가 다른 사용자가하는 일을하게 할 수 있으므로 어떻게 내 자신만으로 구현할 수 있습니까? – TonyLic
제가 말했듯이, userid 분리는 Linux/Unix 보안 설계의 기본적인 부분입니다. 비 루트 프로세스는 그 자체로 사용자 ID를 전환 할 수 없습니다. 기간. 예외 없음. 이런 종류의 기능이 필요하다면 하나 이상의 프로세스가 루트로 실행되고 다른 사용자 ID로 전환 할 수있는 여러 프로세스로 구성된보다 복잡한 응용 프로그램을 설계해야합니다. 그런 다음 다른 프로세스가이를 사용하여 다른 사용자 ID로 프로세스를 시작하고 특정 작업을 수행 할 수있는 보안 메커니즘을 확보하십시오. –