나는 setreuid와 약간 혼동합니다.setreuid 호출이 프로세스 권한을 다시 설정하지 못함
시나리오 : 프로세스는 일반 사용자 (id : cateof)로 실행되지만 매우 짧은 시간 동안 루트로 실행해야합니다. 나는 cateof에서 루트 권한을 높이고 일반 사용자에게 다시 권한을 부여해야합니다. 나의 첫 번째 생각은 setreuid (0, 0) 사이에 내 "루트 콜"을 중첩하는 것이었다. 및 setreuid (ruid, euid); 충분 하긴했지만 틀렸어. 일반 사용자로 돌아가는 유일한 방법은 "루트 호출"이후 원시에서 setreuid (ruid, euid)를 두 번 호출하는 것입니다. 내가 마지막 줄에 setreuid는 (geteuid(), getuid())를 호출하지 않는 경우
int main(...) {
//check the permission, that the program is setuid
//become normal user
ruid = getuid();
euid = geteuid();
setreuid(ruid, euid);
...
setreuid(0, 0);
root_action();
setreuid(ruid, euid); //undo root #1
setreuid(geteuid(), getuid()); //undo root#2
프로세스가 루트로 실행 유지 : 여기
는 코드입니다. 왜 두 번 전화해야합니까?
'setreuid'의 리턴 코드는 무엇입니까? 와'errno' 값은 무엇입니까? – Aif
@ 모든 setreuid 호출은 0 (성공) – cateof
을 반환합니다. 일반 사용자가 어떻게 할 수 있는지 명확히 할 수 있습니까? ** setreuid (0, 0); **? – tuxuday