CS/UNIX

[Files And Directories] - umask

sliver__ 2022. 10. 11. 21:19
728x90

[Permission bits]

  • 새로운 파일 또는 디렉토리를 생성할 때 권한을 부여한다.
  • umask 함수를 사용하며 자료형은 mode_t 이다.
rwx rwx rwx
  • rwx 의미는 아래와 같다.

  • 각 3개의 자리 묶음은 아래와 같다.

  • 0740의 권한은 아래와 같다.

  • C macro는 아래와 같다.

 

[umask 범위 이해]

  • umask 값은 프로세스 수준에서 UNIX 커널에 의해 유지된다. 
  • Korn 쉘에 대한 umask 내장 명령은 해당 쉘 프로세스에 대한 umask 값을 설정한다.
  • 그러나 쉘이 새 프로세스를 생성할 때마다 새 프로세스는 쉘의 umask 설정을 상속한다.
  • 이러한 방식으로 셸에서 umask 값을 설정하면 새 셸 프로세스에서도 전체 사용자 세션에 대해 설정된다.
  • umask 값의 범위도 파일 시스템 개체로 제한된다. 
  • 즉, 파일 및 디렉터리에는 적용되지만 세마포어, 메시지 대기열 및 공유 메모리와 같은 IPC 개체에는 적용되지 않는다.

 

[umask 사용]

  • 아래의 형식과 같이 권한이 설정된다.
actual_permissions = requested_permissions & ( ~umask );
  • prototype은 아래와 같다.
#include <sys/types.h>
#include <sys/stat.h>

mode_t umask(mode_t new_umask);
  • return 값은 호출 이전의 umask 값이다.
  • umask 함수는 error return 을 하지 않는다.
  • 현재 umask를 조회하는 query는 아래와 같다.
1:   /* umask.c */
2:
3:   #include <stdio.h>
4:   #include <sys/types.h>
5:   #include <sys/stat.h>
6:
7:   mode_t
8:   query_umask(void) {
9:       mode_t old_umask;
10:
11:      umask(old_umask = umask(0));
12:      return old_umask;
13:  }
14:
15:  int
16:  main(int argc,char **argv) {
17:
18:      printf("umask = %04o\n",query_umask());
19:      return 0;
20:	}

 

 

  • creat 함수는 아래와 같다.
#include <fcntl.h>

int creat(const char *path,mode_t mode);
  • 아래의 open 함수와 같다.
open(path,O_CREAT|O_TRUNC|O_WRONLY,mode);
  • mode_t mode의 parameter 값이 파일 권한으로 지정된다.
728x90