검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Linux shell: understanding Umask with examples

  umask(user mask)는 POSIX 환경에서 사용할 수 있는 명령어이자 함수로서 현재 프로세스가 생성할 파일과 디렉토리의 퍼미션을 정합니다. 이 값은 자신의 자식 프로세스에게도 계승됩니다.

  이 명령어에서는 퍼미션과 마찬가지로 8진수를 사용합니다. 파일일 경우 666, 디렉토리일 경우 777에서 umask를 뺀 값이 현재 프로세스가 생성하는 파일과 디렉토리의 퍼미션이 됩니다. 예를 들어 파일을 생성할 때 기본으로 적용되는 퍼미션을 664(rw-rw-r--)으로 하고 싶다면 umask 명령어의 인자로 002를 사용해야 합니다.

1. 퍼미션 확인
  /tmp로 가서 파일을 만들고 확인해봅니다.
# cd /tmp
# touch firstfile
# ls -l firstfile
-rw-rw-r-- 1 mirashi mirashi 0  7월  5 11:05 firstfile
  인자 없이 umask 명령어를 사용하면 현재 umask를 볼 수 있습니다.
# umask
0002

2. umask 변경
  아래는 umask를 022로 변경하고 확인하는 모습입니다.
# umask 022
# touch secondfile
# ls -al secondfile
-rw-r--r-- 1 mirashi mirashi 0  7월  5 11:08 secondfile

3. 프로세스와 데몬에 umask 설정
  기본적으로 이를 이루는 방법은 데몬을 시작하는 스크립트 파일이나 시작에 포함된 파일에 umask 명령어를 집어넣는 것입니다. 예를 들어 아파치의 경우 /etc/init.d/apache2(데비안)이나 그보다 더 권장되는 /etc/apache2/envvars(데비안) 안에 넣어 해결할 수 있습니다.

4. 시스템 전체의 디폴트 umask 설정
  단일 계정의 umask를 변경하는 가장 쉬운 방법은 umask 명령어를 해당 계정의 홈디렉토리에 있는 .bashrc 파일이나 그와 같은 역할을 하는 파일(세션을 시작할 때 쉘이 읽는 파일)에 넣는 것입니다.

  모든 계정의 umask를 변경하려면 시스템 설정을 변경해야 하며 그 방법은 배포판에 따라 다릅니다.

데비안 계열
  pam_umask라는 이름의 PAM 모듈을 사용합니다. /etc/pam.d/common-session 파일과 /etc/pam.d/common-session-noninteractive 파일을 생성/수정하여 아래 줄을 추가합니다.
session    optional     pam_umask.so umask=0002

레드햇 계열
  /etc/bashrc 파일에서 정의합니다.
    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
       umask 002
    else
       umask 022
    fi
  UID가 199를 넘고 그룹명이 계정명과 같은 계정은 002, 그 외에는 022가 디폴트입니다.

2013/07/05 12:23 2013/07/05 12:23