반응형
C 코드에서 현재 실행 중인 프로세스가 root 권한인지를 확인하는 방법으로는 프로세스 사용자 ID를 가져와 이 값이 0인지 검사하면 된다.
※ UID(User ID)란?
리눅스에서 사용자는 숫자 값인 UID로 식별된다.
- 0 : root 유저
- 1 ~ 65535 : 일반 사용자
- 1 ~ 999 : daemon, bin, sys 같은 시스템 계정들
- 1000 ~ : 일반 사용자는 UID 1000부터 배정
리눅스 C 라이브러리에서 사용자 ID를 가져오는 함수는 크게 두 가지가 있다.
#include <unistd.h>
uid_t getuid(void);
uid_t geteuid(void);
- getuid() : 실제 로그인한 사용자의 UID
- geteuid() : 실행 시점에 적용되는 유저의 UID
일반 사용자가 sudo로 실행한 경우 프로세스 자체가 root 권한으로 시작되므로 getuid(), geteuid() 모두 0을 반환한다.
단, 일부 setuid(0)으로 권한을 상승한 프로그램의 경우 getuid()는 여전히 일반 사용자를 리턴하고, geteuid()는 0을 반환할 수 있다. 따라서 권한 확인이 목적인 경우 geteuid()만 쓰면 된다.
#include <stdio.h>
#include <unistd.h>
int main(void) {
if (geteuid() != 0) {
printf("You are NOT root.\n");
}
return 0;
}반응형
'프로그래밍 > 리눅스 시스템 프로그래밍' 카테고리의 다른 글
| Linux ] fork()를 통한 프로세스 생성 (0) | 2025.11.01 |
|---|---|
| Linux에서 현재 프로세스가 모니터가 연결된 GUI 세션인지 확인하는 법 (0) | 2025.10.24 |
| errno == EINTR (0) | 2025.10.15 |
| Linux ] Unix Domain Socket(UDS) - IPC (0) | 2025.09.24 |
| Ubuntu ] Custom MOTD(Message of the Day) 설정하기 (0) | 2025.09.18 |