Web Programming Language/C Language

C언어) setresuid( ) 함수, setresgid( ) 함수

manchesterandthecity 2021. 6. 16. 05:38

setresuid( )함수 setresgid( )함수

 

setresuid( )함수 : 각각의 인자가 real UID, effective UID, saved set-user-ID를 변경함

setresgid( )함수 : 각각의 인자가 real GID, effective GID, saved set-group-ID를 변경함

 

setresuid/setresgid : SET R(eal), E(ffective), S(aved) UID/GID
: 현재 동작 중인 프로세스의 권한을 변경한다.

 

예제

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
	gid_t gid;
	uid_t uid;
	gid = getegid();
	uid = geteuid();
	
	setresgid(gid, gid, gid);
	setresuid(uid, uid, uid);
	
	system("/usr/bin/env echo and now what?");
}

 


□ RUID(Real User ID)

  ○ 프로세스의 실제 소유자 

  ○ 시그널 전송 시 사용됨. unprivileged 프로세스는 본인의 RUID, EUID가 상대방의 RUID, SUID와 동일할 때 시그널

      전송 가능



□ EUID(Effective User ID)

  ○ 일반적으로 RUID와 EUID는 동일

  ○ EUID는 SetUID 권한이 설정된 실행 파일에 의해 변경됨

  ○ EUID는 일시적으로 다른 계정의 UID를 저장

  ○ EUID에 저장된 UID에 따라 프로세스의 권한이 결정됨



□ SUID(Saved set-user-ID)

  ○ SUID는 프로세스의 권한을 낮게 변경했다가 원래대로 복구할 때 사용됨

  ○ 프로세스의 권한이 낮게 변경될 때, 변경 전의 EUID는 SUID에 저장됨

  ○ 이후, 낮은 권한이 원래 권한으로 복구될 때, SUID는 EUID에 저장됨

참고 :

https://blog.naver.com/starjhjh/222286475230