관리 메뉴

개발자비행일지

UID, EUID, RUID 본문

▶ Computer Science

UID, EUID, RUID

Cyber0946 2020. 7. 1. 10:10

RUID와 EUID의 차이는 무엇일까? 그리고 운영체제에서 각각은 어떻게 쓰일까?

1. RUID(Real User ID)

1.1 이는 리눅스에서 사용자를 식별하는 데 사용하는 양의 정수로서 0부터 32767 까지 사용한다(16비트). UID에 따른 읽기, 쓰기, 실행 권한 설정함으로써, 프로세스에 대해 소유자 별로 권한을 줄 수 있으며, 이 값은 변하지 않는다. 하지만 Root 권한 일 때는 수정 가능하다.

2. EUID(Effective User ID)

2.1 EUIDSetUID 권한이 설정된 실행 파일에 의해 변경되며, 일시적으로 다른 계정의 UID를 저장해서 사용할 수 있도록 해준다. 즉 일시적으로 파일 소유자의 권한을 얻게 되는 것이다. 예를 들어 ping이나, passwd 같은 경우, 실행을 위해 Root 권한이 필요하지만, 일반 사용자 모두에게 Root권한을 줄 수 없기 때문에 해당 프로그램이 실행될 때, Root 권한이 되도록 EUIDRoot 권한을 실행되는 순간에만 준다.

  • 운영체제 에서는 id 명령어를 통해서 현재 자신의 그룹과 id를 알 수 있다.

  • 그리고 chmod 명령어를 통해서 파일이나 디렉토리의 사용자를 변경 혹은 삭제 가능하게 만들 수 있다. 또한 SetUID나 를 통해서 EUID를 설정해 줄 수 있다. Sticky bit를 통해서 해당 파일의 소유자에게만 쓰기 권한을 제공하도록 설정해 줄 수 도 있다.

그렇다면 이러한 RUID와 EUID 방식이 시스템 보안에 영향을 주는 경우가 발생하진 않을까?  이 부분과 관려해서 우리는 다음의 문제를 고민해 볼 수 있다. 

Setuid 취약점이 있는 사용 예시, 1. system함수를 통해서 system(“/bin/bash”)를 수행하는 vuln.c를 작성하여,  system 함수를 사용하면 루트사용자의 권한을 획득 할 수 있음을 활용한다. 2. more 명령어에 SetUID 비트를 부여하여,  root권한이 필요한 /etc/shadow 파일에 접근 가능하다. 3. system함수를 활용해서 system(“/bin/vi”)를 수행하는 vuln2.c를 작성하여 실행하면 루트권한으로 상승되고 여러 일을 할 수 있다.

이를 방지하기 위해선 find 명령어로 SetUID가 설정된 파일이나 디렉토리를 찾고, 이 중에서 정말 필요한 곳에만 사용해야 한다.

find / -user root -perm -4000    -> SetUID

find / -user root -perm -2000    -> SetGID