st_mode

윤강훈·2024년 10월 17일

System Programming

목록 보기
6/12

st_mode

  • struct stat의 멤버로 16비트로 구성

  • type: 파일 타입 지정

    • socket
    • symbolic link
    • regular file
    • block device
    • directory
    • character device
    • FIFO
  • 3개의 special bits

    • Set-User-ID bit(suid)
    • Set-Group-ID bit(sgid)
    • Sticky bit
  • permission bit

    • user: read, write, execute
    • group: read, write, execute
    • others: read, write, execute

Set-User-ID Bit

  • 일반 사용자는 비밀번호를 어떻게 바꾸나?
ganghoon@ganghoon-virtual-machine:~$ ls -l /etc/passwd
-rw-r--r-- 1 root root 3132  9월  6 14:26 /etc/passwd
  • root: OS에 기본적으로 존재하는 "최고 관리자" 계정, 보안 상의 이유로 사용을 최소한으로 하고 sudo를 사용해서 일시적으로 권한을 높임

  • root 사용자()가 /etc/passwd를 소유

  • root 권한으로 실행되는 프로그램에서 /etc/passwd 파일을 수정할 수 있음

  • passwd 명령어

    • root 권한이 없어도 사용자의 비밀번호 변경 가능
    • set-user-ID bit를 변경하여 root와 동일한 권한으로 실행(root가 실행하는 것처럼 함)
      ganghoon@ganghoon-virtual-machine:~$ ls -l /usr/bin/passwd
      -rwsr-xr-x 1 root root 72056  4월  9  2024 /usr/bin/passwd
  • Set-Group-ID Bit도 마찬가지로 동작

Memory Management Techniques

  • Process swapping 기술

    • 예전 Unix 시스템이 동시에 여러 프로그램을 실행하기 위해 사용한 기술
    • Kernel은 process swapping을 위해 하드 디스크의 특정 섹션에 프로그램 전체를 저장
  • Virtual Memory 기술

    • 물리적인 메모리 크기보다 더 큰 프로세스 실행
    • 프로세스는 필요한 부분만 메모리에 올려서 실행
    • Kernel은 작은 크기의 section 단위(page)로 메모리에 추가하거나 제거

Sticky Bit

  • Sticky bit for files
    • 현재 자주사용되지 않는 내용의 process의 내용을 swap device(HDD)에 유지하도록 지시
  • Sticky bit for directories
    • 일부 디렉토리는 임시 파일들을 보관하도록 설계됨

      • /tmp 디렉토리: 모든 사용자가 파일을 만들고 삭제할 수 있음
    • Sticky bit는 특정 디렉토리에 대해 모든 사용자들이 쓰기 가능하도록 재정의함

      • Sticky bit가 설정된 디렉토리의 파일들은 해당 파일의 소유자만 삭제 가능

Type of file

  • 파일 타입

    • 일반 파일(-)
    • 디렉토리(d)
    • device file(b)
    • socket(s)
    • symbolic link(l)
    • named pipe(p)
    • character device(c)
  • 파일의 타입 설정

    • 파일이 생성되는 시점에 타입이 결정됨

      • creat() 함수로 일반적인 파일 생성
      • 다른 system call을 통해서 디렉토리와 디바이스 생성
    • 파일 타입은 변경 불가능

  • 모드 설정

    • creat() 함수의 두번째 인자에 파일의 permission bit 설정
      fd = creat("newfile", 0744);
      -> 초기 "newfile"의 권한(0744): rwxr--r--
  • 모드 변경

    • chmod()로 권한 및 special bits를 변경

      1. 8진수(octal) 사용
      chmod("/tmp/newfile", 04764);
      1. <sys/stat.h>에 정의된 mask들을 OR 연산자(|)를 활용하여 변경
      chmod("/tmp/newfile", S_ISIUD|S_IRWXU|S_IRGRP|S_IWSRP|S_IROTH)
profile
Just do it.

0개의 댓글