리눅스 퍼미션(Permission)사용 방법
퍼미션(Permission) 이란?
특정 파일이나 디렉터리에 대하여 읽기, 기록하기, 삭제하기 등의 권한을 설정해 놓은 것으로 다중사용자 운영체제에서 파일의 접근권한과 보호 등을 위하여 반드시 필요 것입니다.
퍼미션 특징
퍼미션 | 의미 | 파일 | 디렉터리 |
r | 읽기(read)권한 | 파일 읽기 | 디렉터리의 내용을 볼 수 있음 |
w | 쓰기(write)권한 | 파일 저장, 삭제 | 디렉터리에 파일저장, 디렉터리이름 변경. 삭제 가능 |
x | 실행(execution)권한 | 파일 실행 | 디렉터리에 접근 할 수 있음 |
s | SetUID, SetGID 권한 | 파일 소유자, 그룹소유자의 권한으로 실행 | |
t | Sticky Bit 권한 | 공유 디렉터리로 사용됨 |
8진수로 표현하는 퍼미션
8진수 | 표시되는 퍼미션 | 의미하는 내용 |
0 | --- | 아무런 권한이 없음 |
1 | --x | 실행권한만 있음 |
2 | -w- | 쓰기 권한만 있음 |
3 | -wx | 쓰기와 실행권한만 있음 |
4 | r-- | 읽기 권한만 있음 |
5 | r-x | 읽기와 실행권한만 있음 |
6 | rw- | 읽기와 쓰기 권한만 있음 |
7 | rwx | 모든 권한(읽기, 쓰기, 실행) |
실제 퍼미션의 확인
ls -l
# ls –l 합계 120 -rw-------. 1 root root 1954 2016-11-16 04:50 anaconda-ks.cfg -rw-r--r--. 1 root root 25 2016-12-13 01:39 filename -rw-r--r--. 1 root root 62923 2016-11-16 04:50 install.log -rw-r--r--. 1 root root 11949 2016-11-16 04:48 install.log.syslog .... # |
각각의 파일은 총 7가지의 속정을 가지게 되는데 각 부분의 의미하는 바는 다음과 같습니다.
1. 파일 퍼미션 : 접근 권한 명시
2. 링크 카운터 : 해당하는 데이터블록에 연결되어진 파일의 개수
3. 파일의 소유자
4. 파일그룹 소유자
5. 파일 사이즈
6. 최종 변경 일시
7. 파일 이름
위와 같은 정보에서 퍼미션 부분을 보면 다음과 같습니다.
d | r | w | x | r | - | x | r | - | x |
A: 파일유형 | B: 소유자 권한 | C: 그룹 소유자 권한 | D: 일반 사용자 권한 |
위와 같은 정보를 바탕으로 해당하는 파일은 디렉토리이며 소유자는 읽고 쓰고 실행할 수 있고 그룹 소유자는 읽고 실행만 가능하며 일반 사용자는 읽고 실행 할 수 있다는 것을 알 수 있습니다.
A: 파일유형
해당하는 파일의 종류를 명시하는 부분이며 한 개의 문자로 표현합니다. 시스템에서는 파일은 크게 일반 파일과 특수 파일로 구분할 수 있고 일반 파일에는 텍스트, 실행, 데이터 파일이 포함되고 특수 파일에는 블록파일, 캐릭터파일, 링크 파일등이 해당됩니다.
문자의 의미
문자 | 의미 |
- | 일반파일을 의미 |
b | 블록구조의 특수파일 (/dev/sda) |
c | 입출력에 사용되는 특수파일을 의미 (dev/console) |
d | 디렉터리를 의미 |
l | 심볼릭 링크파일 (symbolic link file) 의미 |
다중사용자시스템에서는 파일의 보안을 위하여 퍼미션을 설정해야 하고 경우에 따라서 퍼미션을 조정해야 하는 경우가 생길 수 있습니다. 퍼미션을 변경하는 명령은 chmod가 있고 파일의퍼미션을 변경하는 방법에는 캐릭터 방식과 8진수를 이용하는 방법이 있습니다.
1. 캐릭터를 이용하는 방식
퍼미션을 명시하는 r,w,x 세 개의 캐릭터를 해당하는 권한부분에 더하거나 빼주는 방식으로 사용합니다.
예) chmod g+w file_name
file_name 파일의 그룹 소유자 권한에 w권한을 더한다는 뜻입니다.
# mkdir dir # ls -ld dir drwxr-xr-x. 2 root root 4096 2016-12-15 17:45 dir/ # chmod g+w dir # ls -ld dir drwxrwxr-x. 2 root root 4096 2016-12-15 17:45 dir/ # * 그룹소유자에 w권한이 추가 되었습니다. |
예) chmod u+x,g+rw,o+rwx file_name
file_name 파일의 유저에 실행권한을 더하고, 그룹권한에 읽기와 쓰기를 더하고 일반사용자(other)권한에 모든 권한을 더합니다.
# mkdir dir1 # ls -ld dir1 drwxr-xr-x. 2 root root 4096 2016-12-15 17:50 dir/ # chmod u+x,g+rw,o+rwx dir1 drwxrwxrwx. 2 root root 4096 2016-12-15 17:50 dir/ # * 결과는 rwxrwxrwx가 되었습니다. |
이 방식은 직관으로 조정할 수 있다는 장점이 있지만 변경하는 사항이 많아지게 되면 명령의 형식이 복잡해지기 때문에 많이 사용하지 않습니다.
2. 8진수를 이용하는 방식
각각의 권한은 그에 해당하는 숫자를 가지게 됩니다.
r=4, w=2, x=1 rwx는 숫자를 더하여 7이라는 형식으로 표현할 수 있습니다.
또한 권한은 총 3개의 부분으로 구성되어 있기 때문에 한 개의 파일의 권한은 총 3개의 숫자로 표현 될 수가 있습니다.
# mkdir testdir # ls -ld testdir drwxr-xr-x. 2 root root 4096 2016-12-15 18:29 testdir/ # * 파일의 권한은 755가 됩니다. rwx = 4 + 2 +1 = 7 rx = 4 + 1 = 5 rx = 4 + 1 = 5 따라서 755 |
8진수를 이용한 변경 방식은 기존의 권한을 고려하지 않고 새롭게 부여될 권한을 지정하는 방식으로 적용됩니다.
chmod 644 file_name
# chmod 644 testdir # ls -ld testdir drw-r--r--. 2 root root 4096 2016-12-15 18:29 testdir/ # * 644는 rw-r--r-- 표현될 수 있고 유저는 읽고 쓰기, 그룹사용자와 일반사용자는 읽기로 변경됩니다. |
chmod 600 file_name
# chmod 600 testdir # ls -ld testdir drw-------. 2 root root 4096 2016-12-15 18:29 testdir/ # * 600은 rw-------로 표현될 수 있고 유저는 읽고 쓰기, 그룹사용자와 일반사용자는 아무 권한도 없습니다. |
기본 퍼미션(Permission) 수정
매번 파일이나 디렉터리 생성 시 기본 퍼미션이 적용됩니다. 이 기본 퍼미션에 영향을 주는 것이 umask(user mask)라고 하는데 이것은 사용자 초기화 환경파일에 명령어를 넣어주어 각 사용자의 기본 퍼미션을 수정할 수 있습니다.
umask 유틸
umask 유틸은 파일이나 디렉터리를 생성할 때 초기화 퍼미션에 영향을 줍니다. 이 유틸은 위에서 본 chmod명령을 사용할 때처럼 읽고, 쓰고, 실행하는 3개의 값으로 퍼미션을 가지고 있습니다. 마찬가지로 3개의 값 중 첫 번째는 소유자(Owner), 두 번째는 그룹(Group), 세 번째는 일반사용자(Other)의 값을 결정하게 됩니다.
CentOS 6.5에서는 umask의 기본 값은 0022입니다.
umask
# umask 0022 |
umask의 값은 Shell에 의존적이여서 각 Shell에 따라 0022(sh), 022(ksh), 22(csh), 022(ksh)으로 기본 값으로 정해져 있습니다. 0022라고 나오면 맨 앞에 부분은 없는 것이라고 생각하고 3자리만 기억하면 됩니다.
umask 값은 파일과 디렉터리 생성시 초기화 퍼미션 값이 서로 틀립니다. 파일을 생성할 때 값은 666(rw- rw- rw-) 이며, 디렉터리 생성시에는 777(rwx rwx rwx)로 초기화 됩니다. 파일과 디렉터리의 초기화 값이 틀린 이유는 디렉터리는 생성 후에 cd명령으로 그 디렉터리에 접근 할 수 있어야 합니다. umask 값은 변경도 가능합니다. 파일(666), 디렉터리(777)제외한 값은 umask 명령으로 설정이 가능합니다. 예를 들면 기본 umask 값이 022 일 때 파일을 새로 생성시에는 초기화 퍼미션 값이 644(rw- r-- r--) 로 나타납니다.
umask 표
umask 8진수 값 | 파일 퍼미션(666) | 디렉터리 퍼미션(777) |
0 | rw- | rwx |
1 | rw- | rw- |
2 | r-- | r-x |
3 | r-- | r-- |
4 | -w- | -wx |
5 | -w- | -w- |
6 | --- | --x |
7 | --- | --- |
umask는 언제 사용할까?
보안상 umask 값을 바꿔야 할 때가 있습니다. 예를 들어 umask 값을 027로 바꾸게 되면 새로 생성되는 파일이나 디렉터리의 퍼미션은 어떻게 될까요?
umask 사용법
umask 적용 후 파일 생성
# umask 0022 # umask 027 # umask 027 # touch umask_file # ls –ld umask_file -rw-r-----. 1 root root 0 2016-12-15 21:45 umask_file * 파일에 퍼미션 기본값은 666인데 umask 027을 적용(삭제)하게 되면 666 – 027 = 640이 됩니다. |
umask 적용 후 디렉터리 생성
# umask 027 # touch umask_dir # ls –ld umask_file drwxr-x---. 2 root root 4096 2016-12-15 21:51 umask_dir/ * 디렉터리에 퍼미션 기본값은 777인데 umask 027을 적용(삭제)하게 되면 777 – 027 = 750이 됩니다. |
* umask는 시스템을 재부팅하면 초기 값으로 돌아갑니다.