/
linux chmod 사용법

linux chmod 사용법


권한의 의미

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: -


위 그림의 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: -

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


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


TL;DR

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

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

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

chmod +x test.sh


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

chmod 755 test.sh


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

chmod 700 ~/.ssh


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

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

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


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

chmod u+x file
chmod u+x file

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

숫자로 권한 지정
chmod 700 ~/.ssh
+, - 로 권한 지정
chmod u+rwx,g-r-w-x,o=-r-w-x ~/.ssh
= 구문 사용
chmod u+rwx,g=,o=- ~/.ssh

other 에 group 과 동일 권한 부여

chmod o=g file

other 는 모든 권한 제거

chmod -R /varo= file

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

chmod -R 755 /var/www/myapp

권한(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


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

chmod 644 myfile


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

chmod -R 755 mydir


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


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

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

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

같이 보기

Related content

Linux chmod 에서 대문자 x 옵션의 의미(capital X means in chmod)
Linux chmod 에서 대문자 x 옵션의 의미(capital X means in chmod)
More like this
폴더와 파일에 적절한 권한 부여
폴더와 파일에 적절한 권한 부여
More like this
chmod, setfacl 실행시 "Operation not permitted" 에러 발생
chmod, setfacl 실행시 "Operation not permitted" 에러 발생
More like this
directory 를 생성하는 linux mkdir 명령어 사용법
directory 를 생성하는 linux mkdir 명령어 사용법
More like this
linux chown 명령어 사용법
linux chown 명령어 사용법
More like this
파일 유형(file type)을 알려주는 linux file 명령어 사용법
파일 유형(file type)을 알려주는 linux file 명령어 사용법
More like this