setuid

Linux

0 views

1. 개요 및 정의

1.1 한 줄 요약

  • 일반 사원이 다른 사원의 사원증을 빌려서 그 사람의 권한으로 출입하고 업무를 처리하는 것과 같음

1.2 공식 정의

  • Setuid는 유닉스 및 리눅스 계열 운영체제에서 사용되는 파일 권한 비트 중 하나다.
    • 일반적으로 실행 파일은 실행시킨 사용자의 권한으로 작동하지만, Setuid가 설정된 파일은 실행되는 동안 해당 파일의 소유자 권한으로 동작한다.

2. 동작 원리

  • 단순 권한을 빌려오는 것을 넘어서 커널 내부에서 프로세스 자격 증명이 어떻게 변환되는지 알아보자
    • 리눅스 시스템은 프로세스 권한을 관리하기 위해서 UID 를 세분화해서 관리한다.

2.1 UID의 3가지 종류

  • 프로세스가 실행될 때 커널은 다음 3가지 UID를 추적한다.
    1. Read UID (RUID, 실제 사용자 ID)
      1. 프로세스를 실제로 실행시킨 사용자의 ID
      2. 프로그램에 Setuid가 걸려 있어도 RUID는 절대 변하지 않고 로그인한 사용자의 ID를 유지한다.
    2. Effective UID (EUID, 유효 사용자 ID)
      1. 실제 접근 권한을 결정하는 ID
      2. 운영체제가 "지금 이 프로세스가 어떤 권한을 가지고 있는가?"를 판단할 때 사용하는 ID다.
      3. 파일 읽기/쓰기, 네트워크 포트 점유 등 실제 자원 접근 제어(Access Control)의 척도가 된다.
      4. 일반적인 경우 RUID 와 EUID는 같지만, Setuid 비트가 활성화된 파일을 실행하는 순간, 커널은 이 값을 파일 소유자의 UID로 덮어쓴다.
    3. Saved Set-UID (SUID, 저장된 사용자 ID)
      1. 권한을 일시적으로 낮췄다가 다시 복구할 때 사용하기 위해 저장해두는 ID

2.2 실행 흐름

  • passwd 명령어를 예로 들어 동작 과정을 설명한다.
    • passwd/etc/shadow 파일을 수정해야 하므로 Root 권한이 필요하다.
  1. 실행 요청
    1. 일반 사용자가 /usr/bin/passwd 를 실행한다.
  2. 커널 검사
    1. 커널은 파일의 inode 정보를 읽고 Setuid 비트가 설정되어 있음을 확인
  3. 권한 변경
    1. RUID: 실행한 사용자 (User) 유지.
    2. EUID: 파일 소유자 (Root)로 변경.
  4. 프로세스 수행
    1. 프로세스는 EUID가 Root이므로 /etc/shadow 파일에 쓰기가 가능하다.
  5. 종료
    1. 프로세스가 종료되면 반환된 권한은 사라진다.

Setuid는 바이너리 실행 파일에만 적용되며, 보안상의 이유로 쉘 스크립트에는 일반적으로 무시된다
(운영체제 버전에 따라 상이함).

상태RUID (Real)EUID (Effective)SUID (Saved)비고
실행 전 (Shell)100110011001alice 권한
실행 직후 (passwd)10010 (Root)0Setuid 동작
권한 포기 시100110010필요 작업 후 강제 강등

3. 사용법 및 구문

3.1 Setuid 확인 방법

  • ls -l 명령어를 통해 파일 권한을 확인했을 때, 소유자 실행 권한(x) 자리에 s가 표시된다.

    $ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root 68208 May 28  2020 /usr/bin/passwd
    #   ^ 's'가 있으면 setuid가 설정된 것이다.
    
    • 소문자 s
      • 실행 권한(x)이 있으면서 Setuid가 설정된 경우 (정상).
    • 대문자 S
      • 실행 권한(x)은 없는데 Setuid만 설정된 경우 (비정상, 동작 안 함).

3.2. Setuid 설정 방법 (chmod)

  • Setuid 비트는 숫자 모드에서 4000에 해당한다.

  • Symbolic Mode (기호 모드)

    chmod u+s filename
    
  • Octal Mode (8진수 모드)

    # 4xxx: Setuid 설정
    # 755: rwxr-xr-x (기본 실행 권한)
    chmod 4755 filename
    

3.3. Setuid 제거 방법

chmod u-s filename
# 또는
chmod 0755 filename

Loading comments...