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) 의 의미는 다음과 같습니다.
Owner | Group | Other | ||||||
---|---|---|---|---|---|---|---|---|
r | w | x | r | w | x | r | w | x |
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
여기서 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 를 참고하세요.