1993.1.18

SUBJECT: Execute Permission(setuid, setgid)에 대하여

DESCRIPTION:
0. Permission bit의 format
   * file이나 directory의 file type과 permission은 해당 'inode'에 16 bit word로 정보가 저장된다.

                  Permission 정보를 위한 한 word  = 16 bits
   |----------------------------------------------------------------------------|
   +----------------+ +------------+ +------------+ +------------+ +------------+
   |     File       | |  Program   | |   Owner    | |   Group    | |   Others   |
   | Identification | | Execution  | | Permission | | Permission | | Permission |
   |     Bits       | |   Bits     | |   Bits     | |   Bits     | |   Bits     |
   +----------------+ +------------+ +------------+ +------------+ +------------+
   16   15   14   13   12   11   10    9   8   7      6   5   4      3   2   1
                      |------------|
                       File Execution Triplet
                      |---------------------------------------------------------|
                                          File의 mode
1. Program Execution Triplet
   * 실행(execute) program을 '어떤 방식으로 실행시킬 것인가'를 정의할 수 있다.
     이 '어떤 방식으로 실행할 것인가'를 inode의 'program execution triplet'에 정의한다.
   * Program Exedution Triplet의 Format
                      +-------------+------------+---------------+
                      |   setuid    |   setgid   |   sticky bit  |
                      +-------------+------------+---------------+
     Octal Value           4000          2000          1000
                      |------------------------------------------|
     Total Value                         7000
    
     - 4000 : file 실행시 user ID를 set하라는 의미. set-user-Id mode라 한다.
              만약 file이 directory라면 무시된다.
     - 2000 : file 실행시 group ID를 set하라는 의미. set-group-ID mode라 한다.
     - 1000 : sticky bit를 set하라는 의미

2. Process와 관련된 UID, GID
     +-----------------------------+-----------------------------+
     |  RUID (Real UID)            |  실제(really) 누구인가      |
     |  RGID (Real GID)            |                             |
     +-----------------------------+-----------------------------+
     |  EUID (Effective UID)       |  file access permission을   |
     |  EGID (Effective GID)       |  check하기 위해             |
     |  SGID (Supplementary GID)   |  사용됨                     |
     +-----------------------------+-----------------------------+
   * RUID, RGID : 사용자가 실제 누구인가를 식별한다.
                  이들의 값은 login시 password file에서 얻어진다.
   * EUID, EGID, SGID : file access permission을 결정한다.
                        즉 OS가 process의 file에 대한 access permission을 결정하는데 사용한다.
                        security와 관련됨
   * 실행 file이 실행되면 process가 생성된다.
     이 실행 file에 others execute permission이 있어  owner가 아닌 
     다른 user가 이 file을 실행하다 write해야 하는 경우를 처리해야 한다면
     process와 실행 file간에 무엇인가 교감할 수 있는 통로가 필요 할 것.
     이 때 사용되는 것이 EUID/EGID이다.
   * 대개 EUID/EGID는 RUID/RGID와 동일하다.
     모든 file은 한 owner와 한 group owner를 가진다.
     실행 program을 실행했을 때, process의 EUID/EGID는 대개 RUID/RGID이다.
   * 그러나 "이 file이 실행될 때, 그 process의 EUID가 file owner가 되도록 setting 하라"는
     식으로 file의 execution triplet에 'special flag'를 setting할 수 있다.
     비슷한 방법으로 EGID가 file의 group owner가 되도록 할 수 있다.
     이렇게 setting되는 bit를 "set-user-ID bit", "set-group-ID bit"라 한다.
   * 예를 들어, file의 owner가 superuser이고
                file이 ser-user-ID bit가 setting되어 있다면
     그 file이 process로서 실행되는 동안 그 process는 superuser의 권한을 가진다.
     이는 그 file을 실행한 process의 RUID가 무엇이어도 상관 없다. 

Revision History
Created        on Jan. 18 ,1993