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에 저장됨
참고 :