🙏🏻 참조
리눅스에서, 파일(File)을 사용해 할 수 있는 작업은 크게 세 가지로 나눌 수 있다.
🔎 리눅스에서는 각 파일 및 디렉토리에 대해 "읽기(r)", "쓰기(w)", "실행(x)" 권한(permission)을 파일 개별적으로 지정할 수 있도록 만들어 놓았습니다.
그리고 이 세 가지 권한을 "파일을 소유한 사용자(user)", "특정 그룹(group)에 소속된 사용자", "그 외 사용자(others)"에 대해 각각 지정할 수 있게 만들었습니다.
📣 chmod 명령은 바로 이러한 파일의 권한을 변경할 수 있게 만들어주는 명령입니다. "change"와 "mode"의 앞 글자들을 조합한 이름이죠. (chmod = ch + mod)
📣 여기서 "모드(mode)"란, 앞서 소개한 세 가지 권한(읽기, 쓰기, 실행)과 각각의 권한을 지정할 대상(파일 소유자, 그룹, 그외 사용자)을 포함한 파일의 속성을 말합니다.
즉, chmod 명령에서 지정하는 읽기(r), 쓰기(w), 실행(x) 권한 및 소유자(user), 그룹(group), 그 외 사용자(others)에 대한 설정 값을 통틀어 "모드(mode)"라고 지칭합니다.
그러므로 chmod 명령을 사용하여 파일의 모드(mode)를 변경한다는 것은 파일의 권한을 변경한다는 것과 동일한 의미를 가집니다.
📌 chmod [OPTION][MODE] [FILE]
>OPTION
-v : 모든 파일에 대해 모드가 적용되는 진단(diagnostic) 메시지 출력.
-f : 에러 메시지 출력하지 않음.
-c : 기존 파일 모드가 변경되는 경우만 진단(diagnostic) 메시지 출력.
-R : 지정한 모드를 파일과 디렉토리에 대해 재귀적으로(recursively) 적용.
>MODE
파일에 적용할 모드(mode) 문자열 조합.
u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정.
+,-,= : 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정(=)
r,w,x : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
X : "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용.
s : 실행 시 사용자 또는 그룹 ID 지정(s). "setuid", "setgid".
t : 공유모드에서의 제한된 삭제 플래그를 나타내는 sticky(t) bit.
0~7 : 8진수(octet) 형식 모드 설정 값.
chmod g+x FILE
$ chmod a=r FILE
$ chmod go-rwx FILE
🔎 권한 "지정(=)"은 전달된 권한으로 온전히 설정되지만, "추가(+)"와 "제거(-)"는 파일이 기존에 가지고 있던 권한을 기준으로, 새로운 권한이 추가되거나 지정된 권한이 제거됩니다.
파일이 기존 가지고 있는 권한은 간단하게 "ls -l" 명령을 통해 확인 할 수 있다.
해석
-rw-r--r-- 1 ppotta manager 17 Mar 24 03:17 FILE
🔎 먼저, 읽기(r) 권한은 디렉토리에 있는 파일 리스트를 확인할 수 있는 권한을 의미합니다.
즉, "ls" 명령을 통해 디렉토리의 리스트를 확인할 때 "읽기(r)" 권한이 있어야 합니다.
만약 디렉토리에 읽기(r) 권한이 없다면, "ls" 명령을 수행할 때 "permission denied" 에러가 발생합니다.
🔎 읽기(r) 권한만 있는 경우 "파일 이름"만 확인 가능하고, 파일의 모든 정보를 확인("ls -l")하기 위해서는 실행(x) 권한이 있어야 합니다.
$ ls -l
total 4
d--------- 2 ppotta ppotta 4096 Mar 26 00:50 DIR
$ ls DIR
ls: cannot open directory 'DIR': Permission denied
✔️ 디렉토리의 내용을 읽기 위해서는 읽기(r) 권한 필요.
✔️ 디렉토리의 내용을 변경하기 위해서는 쓰기(w) 권한 필요.
✔️ 디렉토리의 접근을 위해 실행(x) 권한 필요하며 가장 기본적인 접근 권한.
명령어 | 설명 | (=) |
---|---|---|
chmod 664 FILE | # 모든 사용자의 모든 권한 제거. | --------- |
chmod 664 FILE | # 사용자(읽기+쓰기), 그룹(읽기+쓰기), 그외 사용자(읽기) | rw-rw-r-- |
chmod 755 FILE | # 사용자(읽기+쓰기+실행), 그룹(읽기+실행), 그외 사용자(읽기+실행) | rwxr-xr-x |
chmod 777 FILE | 모든 사용자에 모든 권한 추가. | rwxrwxrwx |
📌 사용예제
모든 사용자가 읽고 쓰고 실행할 수 없도록 지정.
chmod 000 FILE
---------- 1 ppotta manager 23 Mar 26 04:13 FILE
모든 사용자가 읽고 쓰고 실행할 수 있는 권한 지정.
chmod 777 FILE
-rwxrwxrwx 1 ppotta manager 23 Mar 26 04:13 FILE
소유자는 모든 권한, 그룹 및 그 외 사용자는 읽기와 실행만 가능.
chmod 755 FILE
-rwxr-xr-x 1 ppotta manager 23 Mar 26 04:13 FILE
소유자 및 그룹은 읽기 가능, 그외 사용자는 권한 없음.
chmod 440 FILE
-r--r----- 1 ppotta manager 23 Mar 26 04:13 FILE
📣 8진수 형식을 이용할 때는 MODE 파라미터로 전달되는 값이 파일의 권한에 그대로 적용되기 때문에 u, g, o, a 또는 =, +, - 등과 같이 사용할 수 없습니다.