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

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

$ stat /usr/bin/passwd 

  File: /usr/bin/passwd
  Size: 34512           Blocks: 72         IO Block: 4096   regular file
Device: ca02h/51714d    Inode: 8960682     Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_exec_t:s0
Access: 2020-08-09 13:56:35.275043973 +0000
Modify: 2018-08-12 16:23:09.000000000 +0000
Change: 2019-10-29 16:28:06.747000000 +0000
 Birth: -
CODE

TL;DR

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

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 를 참고하세요.

같이 보기