권한의 의미

chmod 는 파일이나 디렉터리(directory)의 권한(permission) 을 변경하는 명령어입니다.

특정 파일이나 디렉터리에 부여된 권한을 알아보려면 ls -l 을 사용하거나 파일의 상태를 알려주는 stat 명령어를 사용해서 Access 필드를 보면 됩니다.

$ stat /bin/ls

   File: /bin/ls
  Size: 142144          Blocks: 280        IO Block: 4096   regular file
Device: 810h/2064d      Inode: 38050       Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-11-07 22:08:04.420000000 +0900
Modify: 2019-09-05 19:38:40.000000000 +0900
Change: 2020-06-01 03:00:07.450000000 +0900
 Birth: -
CODE


위 그림의 Access 항목에 있는 숫자(0755) 와 문자(-rwxr-xr-x) 의 의미는 다음과 같습니다.


OwnerGroupOther
rwxrwxrwx
421421421

여기서 r은 읽기(read), w는 쓰기(write), x 는 실행(execution) 의 의미입니다.


즉 0755 는 소유자는 읽고, 쓰고, 실행할 수 있고 소유자의 그룹은 읽고, 실행할 수 있고 그외는 읽고 실행할 수 있다는 의미입니다.


특수 권한(Setuid, SetGid, Stick Bit)

이제 /usr/bin/passwd 파일에 대해서 stat 를 실행해 봅시다.

$ stat /usr/bin/passwd

   File: /usr/bin/passwd
  Size: 68208           Blocks: 136        IO Block: 4096   regular file
Device: 810h/2064d      Inode: 30751       Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-08-08 13:50:04.000000000 +0900
Modify: 2020-05-28 15:37:47.000000000 +0900
Change: 2020-08-08 13:50:08.620000000 +0900
 Birth: -
CODE

특이하게 4755 가 붙어 있는 것을 확인할 수 있는데 이는 특수 권한입니다.


자세한 내용은 Linux 의 특수 권한 - SetUid, SetGid, Sticky Bit 를 참고하세요.


TL;DR

chmod 로 권한을 부여할 경우 숫자로도 가능하며 문자열로도 가능합니다.

기존에 부여한 권한에서 권한을 빼거나 더할때는 문자로 지정하는게 편하고 전체를 새로 지정할 때는 숫자가 편합니다.

test.sh 란 파일이 있을 때 모두가 실행할수 있게 실행 속성을 추가할 경우 아래와 같이 문자로 지정하는게 편리합니다.

chmod +x test.sh
BASH


숫자로 권한을 부여할 경우 일부 권한만 추가할 수 없으므로 아래와 같이 지정합니다.

chmod 755 test.sh
BASH


ssh 정보를 담고 있는 홈 디렉터리의 .ssh 폴더에 대해 모두의 접근 권한을 해제할 경우는 숫자가 더 편리합니다.

chmod 700 ~/.ssh
BASH


문자로 권한을 부여할 경우 아래와 같이 해야 합니다.

chmod u+rwx,g=-rwx,o=-rwx ~/.ssh
BASH

문자로 기술할 경우 , 앞뒤에 공백이 있으면  "invalid mode: " 에러가 발생합니다.


소유자에게 파일 실행 권한 부여

chmod u+x file
BASH
chmod u+x file
BASH

.ssh 폴더를 소유자만 접근 가능하게 설정

숫자로 권한 지정

chmod 700 ~/.ssh
BASH

+, - 로 권한 지정

chmod u+rwx,g-r-w-x,o=-r-w-x ~/.ssh
BASH

= 구문 사용

chmod u+rwx,g=,o=- ~/.ssh
BASH

other 에 group 과 동일 권한 부여

chmod o=g file
BASH

other 는 모든 권한 제거

chmod -R /varo= file
BASH

하위 파일/디렉터리 권한 지정

chmod -R 755 /var/www/myapp
BASH

권한(permission) 종류


파일이나 디렉터리의 권한은 read(4), write(2), execute(1) 로 구분되며 숫자(8진수) 또는 문자로 표시할 수 있습니다.

예로 6(4 + 2) 은 read, write 권한을 의미하며  7은 read, write, execute 권한을 의미합니다.

문자로 표시할 경우 권한을 지정하는 단어의 앞자리를 사용하며 rw 는 read, write 권한, rwx 는 read, write, execute 권한을 의미합니다.


chmod 로 권한을 부여할 대상으로는 소유자 (u - user), 소속 그룹(g - group), 그외(o - other), 모두(a - all) 로 나눌수 있으며 지정하는 권한은 순서대로 소유자, 그룹, other 를 의미합니다.


즉 다음은 소유자는 읽고, 쓰고, 실행할 수 있고(7) 소유자가 아닌 이(그룹, other) 는 읽고 실행할 수 있으며(5) 디렉터리나 실행 파일에 부여하는 권한입니다.

chmod 755 mydir
BASH


plain text 파일일 경우 소유자는 읽고 쓸수 있고(6), 그외는 읽을수 있는(4) 권한을 부여합니다.

chmod 644 myfile
BASH


권한을 부여할 대상이 directory 일 경우 -R 옵션을 사용해서 재귀적으로 줄 수도 있으며 다음 명령은 mydir 하위의 모든 파일과 디렉터리의 권한을 755 로 만듭니다. 

chmod -R 755 mydir
BASH


chmod 는 소유자, 그룹, 그외만 지정할 수 있으므로 세밀한 권한 조정이 어렵습니다. 즉 alice 에게는 읽기 권한만 주고 bob 에게는 읽기 쓰기 권한을 주는 것이 불가능합니다.


위와 같은 세밀한 권한 조정이 필요한 경우 POSIX 표준인 setfacl 을 사용하면 됩니다.

특수 권한(setgid,setuid bit, sticky bit)

Linux 의 특수 권한 - SetUid, SetGid, Sticky Bit 를 참고하세요.

같이 보기