리눅스 프로그래밍 4주차 - The File in Context(1)

고강희·2022년 9월 21일
1

The File in Context - file들이 시스템에서 어떤의미를 가지는지

3.1 Files in a Multi-user Environment

Owner

  • 리눅스에선 각 파일에 소유자가 존재
  • 일반적으로 파일을 생성한 사람이 Owner

Owner의 실제 identity

  • user-id(uid = username 과 관련있다.) -> (in /etc/passwd) 에 user에대한 정보가 들어감
    ex) keith:x:35:10::/user/keith:/bin/ksh
    = login-id:password:uid:gid:user info:home-dir:shell
    login-id: 2~8개의 영문소문자 또는 숫자로 구성된 아이디
    password: 13자리의 암호화된 패스워드
    uid: 숫자로 된 user id (0-60000)
    gid: 숫자로 된 group id (0-60000)
    user info: 사용자의 실제 이름 등 사용자 정보
    home-dir: 사용자가 로그인할 디렉토리 경로
    shell: 사용자의 초기 쉘 프로그램

프로세스 역시도 user id를 가짐 일반적으로 프로세스를 시작한 유저의 id
만약 파일이 생성될때 시스템은 ownership을 만드는데, 이때는 해당 프로세스를 생성한 user의 id를 넣음

user - process uid = process를 실행시킨 유저
           └ file을 생성 = process uid를 따라 파일을 만듬

소유자를 바꾸는 것도 가능(superuser와 file 소우자만)
superuser(username = root, uid = 0)

Group

  • 각 유저는 적어도 하나 이상의 group을 가짐
  • in /etc/group → 각 유저가 어떤 그룹에 있는지를 제공

Group의 실제 identity

  • group-id (associated with group name)

gid, uid는 모두 유저가 시작한 프로세스로 부터 부여됨

Effective User and Group IDs

  • Real user-id(ruid): 프로세스를 실행시킨 사람의 id
  • Effective user-id(euid): 기본적으로 ruid와 비슷하지만, 특수한 경우에 바뀜 (program의 uid로)
    ex) a가 만든 프로그램을 b가 실행 -> euid는 대부분 b의 id를 가지지만 특수한 경우에 a의 id를 가짐
  • euid, efid(effective group-id)는 파일 접근 권한을 결정시킨다.

Permissions and File Modes

  • Permission
  • permission and File Modes
Octal valueSymbolPermission
00400S_IRUSRread by owner
00200S_IWUSRwrite by owner
00100S_IXUSRexecute by owner
00040S_IRGRPread by group
00020S_IWGRPwrite by group
00010S_IXGRPexecute by group
00004S_IROTHread by others
00002S_IWOTHwrite by others
00001S_IXOTHexecute by others

File permission: open(2)

  • 만약 존재하는 파일을 열경우
    • 시스템은 mode of access를 보고 권한이 있는지 없는지 check한다.
    • 만약 프로세스가 접근권한이 없으면 open은 -1을 return
    • 커널이 file access test를 진행 (euid와 egid를 근거해서)

The File Access Tests

  • 테스트는 커널에 의해 다음과 같이 진행됨
    • 만약 프로세스의 euid가 0이면 access는 허가됨
    • 만약 프로세스의 euid가 file의 owner id와 같으면 user access permission 비트가 set되 있을경우 접근이 허가됨
    • 만약 프로세스의 egid가 file의 gid와 같으면 group access permsiion 비트가 set되 있을경우 접근이 허가됨
    • 만약 other access permission 비트가 set되 있을경우 접근이 허가됨

Extra Permission for Executable Files

Octal valueSymbolPermission
04000S_ISUIDset user-id 비트를 on
02000S_ISGIDset group-id 비트를 on
01000S_IXVTXsticky 비트 on
  • 만약 S_ISUID 권한이 set되면, 파일이 시작될 때 시스템은 euid를 프로그램의 실 소유자(프로그램 만든 사람)의 id로 설정해줌(앞서말한 내용).
    if(S_ISUID == 0) → euid = ruid
    if(S_ISUID == 1) → euid = 프로그램 owner id

Extra Permission for Executable Files 예시

사용자들은 그들의 비밀번호를 /etc/shadow로 접근함으로써 바꿀 수 있음. 이때 /etc/shadow는 passwd 프로그램을 통해 접근할 수 있음

  • 사용자들은 직접적으로 /etc/shadow를 접근할 수 없음
  • 하지만 S_ISUID bit이 on인 /usr/bin/passwd파일을 실행함으로써 /etc/shadow를 실행할 수 있음
profile
그냥 AI 관련 유익해보이는거 이것저것 적어놓음

0개의 댓글