[UNIX] 파일 접근 권한

Taegang Yun·2023년 9월 20일
1

Unix 프로그래밍

목록 보기
4/19

디렉토리

. 과 .. 은 모든 디렉터리에 항상 존재하는 파일 이름이다. 디렉토리가 생성될 때 자동적으로 포함됨.

  • 디렉토리 허가
    • 읽기 : 디렉토리 내의 파일이나 부디렉토리의 이름을 리스트
    • 쓰기 : 디렉토리 내의 파일을 제거하거나 새로운 파일을 생성
    • 실행 : cd 또는 chdir로 디렉토리 내부로 들어갈 수 있음

inode 접근 권한 정보 확인

링크 함수

  • 링크 : 기존 파일이나 디렉터리에 접근할 수 있는 새로운 이름을 의미
  • 링크를 만들 수 있는 기능으로 하드 링크와 심벌릭 링크가 있다.

파일명으로 파일 정보 검색 : stat()

int stat(const char pathname, struct stat statbuf);

  • pathname : 정보를 알고자 하는 파일 명

  • statbuf : 검색한 파일 정보를 저장할 구조체 주소

  • pathname에 지정한 파일의 정보를 검색

  • stat() 함수로 파일의 정보를 검색할 때 파일에 대한 읽기/쓰기/실행 권한이 반드시 있어야 하는 것은 아니지만 파일에 이르는 경로의 각 디렉터리에 대한 읽기 권한을 있어야함

  • 성공하면 0을 반환하고 stat 구조체에 파일 정보를 저장, 오류 발생 시 -1 리턴

stat 구조체

  • stat() 함수로 검색한 inode정보는 stat 구조체에 저장되어 리턴

새로운 파일을 만들면 default link수는 1.
link 수 == 0 -> 삭제

'>' 하나 : overwrite
'>>' 두개 : append

ex) ls -al > text.txt 이렇게 하면 ls -al의 내용이 text.txt에 들어감.
ls -al >> text.txt 하면 본래 text.txt에 써져있던 것에 덧붙여서 더해짐.

파일 기술자로 파일 정보 검색 : fstat()

int fstat(int fd, struct stat *statbuf);

  • fd : 열려 있는 파일의 파일 기술자
  • statbuf : 검색한 파일 정보를 저장할 구조체 주소

파일 경로 대신 현재 열려 있는 파일의 파일 기술자를 인자로 받아 파일 정보를 검색한 후 statbuf 로 지정한 구조체에 저장

st_mode의 구조

chmod로 변경 가능.

r w x

파일 접근 권한 제어

파일의 소유자는 사용자 식별번호로 구별

  • uid, gid
  • /etc/password

chmod u+s test.txt를 하면
-r-S-r-xr-x 와 같이 S가 생김. 이는 다른 사용자도 이걸 읽을 수 있다.

이미 x가 있는데 +s를 하면 s가 생김.

uid와 gid, sticky bit를 설정하려면 이미 적용되있는 권한(ex: 755) + uid상수(04000) = 4755 이런식으로 해야댐. chmod 4755.

/ --S / --S / --T/
uid gid sticky bit

  • 유효 사용자 식별번호 (effective user-id, euid)
    파일에 대해 실제 소유권을 갖는 사용자의 사용자 식별번호 root(루트) 가 여기에 속함.

  • 진짜 사용자 식별번호 (real user-id, ruid)

    실제로 프로세스를 갖는 사용자의 사용자 식별번호
    유효 그룹 식별번호, 진짜 그룹 식별번호
    대부분의 경우, 유효 사용자 식별번호와 진짜 사용자 식별번호는 동일

    set user-id(04000)
    생성된 프로세스에게 그 프로세스를 시작시킨 사용자의 uid대신 파일 소유자의 유 효 사용자 식별번호를 부여
    set group-id(02000)
    sticky bit(01000)
    공유디렉토리(/tmp)에 대한 접근 권한 OR 텍스트-이미지를 swap영역에 남겨둠

파일의 종류 검색

상수와 & 명령을 해주면 혹시 1이 나올 경우 0으로 .. 바꿔줌.

kind = statbuf.st_mode & S_IFMT;

이런식으로..

매크로를 이용한 파일 종류 검색

매크로를 사용하게 되면 소스 파일이 확대되게 만들어줌. 오버헤드가 없음.
짧은 코드의 경우 매크로를 사용한다.

profile
언젠간 전문가가 되겠지

0개의 댓글