chmod 명령어로 파일 / 디렉토리 권한 변경하기
리눅스(Linux)에서 파일이나 디렉토리의 권한을 소유자, 소유 그룹, 그 외 사용자들에 맞게 설정하여 사용하고 있다.
이때 특정 파일이나 디렉토리의 경우 어떠한 이유(보안상 이유 등)로 권한을 줄 수도 있고 뺄 수도 있다.
이럴 때 사용하는 명령어가 chmod이다. chmod는 Change mode의 약어이다.
그럼 이제 chmod 명령어를 통해서 파일 / 디렉토리의 권한을 변경해보도록 하자.
1. chmod 명령어 사용법
기본적으로 chmod 명령어 아래와 같이 사용한다.
- $ chmod 755 test.sh
# chmod 명령어 사용법
$ chmod --help
사용법: chmod [옵션]... MODE[,MODE]... FILE...
또는: chmod [옵션]... 8진수-MODE FILE...
또는: chmod [옵션]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.
-c, --changes like verbose but report only when a change is made
-f, --silent, --quiet suppress most error messages
-v, --verbose output a diagnostic for every file processed
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive change files and directories recursively
--help 이 도움말을 표시하고 끝냅니다
--version 버전 정보를 출력하고 끝냅니다
Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report chmod translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/chmod>
or available locally via: info '(coreutils) chmod invocation'
2. 파일 / 디렉토리 권한 정보
리눅스 파일 / 디렉토리는 소유자(User), 소유 그룹(Group), 그 외 사용자(Others)에 읽기(Read), 쓰기(Write), 실행(Execute) 권한을 부여할 수 있다.
예를 들어 "ls" 명령을 통해서 파일에 부여된 권한을 확인할 수 있다.
# Test File 권한
$ ls -alth test.sh
-rw-r--r--. 1 root root 0 12월 26 15:34 test.sh
해당 test.sh 파일은 소유자(User)는 읽기(Read), 쓰기(Write) 권한을 가지고 있고, 소유 그룹(Group)과 모든 사용자(Others)에는 읽기(Read) 권한을 가지고 있는 것을 확인할 수 있다.
그럼 디렉토리도 한번 확인해보도록 하자.
# Test Directory 권한
$ ls -alth
drwxr-xr-x. 2 root root 6 12월 26 15:40 test
-rw-r--r--. 1 root root 0 12월 26 15:34 test.sh
해당 test 디렉토리는 소유자(User)는 읽기(Read), Write(쓰기), 실행(Execute) 권한을 가지고 있고, 소유 그룹(Group)과 모든 사용자(Others)에는 읽기(Read), 실행(Execute) 권한을 가지고 있는 것을 확인할 수 있다.
다만 파일과 디렉토리의 차이점은 맨 앞에 위치한 부분에 "-" 경우에는 파일이고 "d" 경우에는 디렉토리로 구분할 수 있다.
레퍼런스 | 내용 | 설명 |
User | 소유자 | 파일의 소유자 |
Group | 소유 그룹 | 파일의 소유 그룹 맴버 사용자 |
Others | 그외 사용자 | 소유자 및 소유 그룹 맴법가 아닌 사용자 |
3. 파일 / 디렉토리 권한 변경 방법
파일 / 디렉토리의 권한 변경을 해보도록 하자.
그전에 chmod 명령어를 사용하는 경우 대부분 8진수를 사용하여 변경을 하게 되는데 8진수를 어떻게 나타내는지 알아보도록 하자.
3.1 8진수 표현법
예로 확인했던 test.sh를 보면 "-rw-r--r--" 이렇게 되어 있다.
이중 맨 처음은 파일 / 디렉토리 구분 자이며, 맨 처음을 제외하면 3개씩 3가지로 구분을 할 수 있다.
- rw- : 6
- r-- : 4
- r-- : 4
위에서도 읽기(Read), Write(쓰기), 실행(Execute)에 대해서 설명했으며 각 권한에 값을 나타내고 있다.
- r(Read) : 4
- w(Write) : 2
- x(Execute) : 1
- r + w + x : 7
3.2 변경 방법 예제
8진수 표현법도 확인했으니 정말로 변경하는 방법을 예제로 확인해보자.
# 8진수로 권한 추가 / 삭제
# 기본 권한
$ ls -alt test.sh
-rw-r--r--. 1 root root 0 12월 26 15:34 test.sh
# 권한 추가
$ chmod 777 test.sh
$ ls -alth test.sh
-rwxrwxrwx. 1 root root 0 12월 26 15:34 test.sh
# 권한 삭제
$ chmod 600 test.sh
$ ls -alth test.sh
-rw-------. 1 root root 0 12월 26 15:34 test.sh
8진수 표현법 이외에도 +, - 를 통해서도 권한을 추가, 삭제할 수 있다.
# +,- 를 이용한 권한 추가 / 삭제
# 기본 권한
$ ls -alt test.sh
-rw-r--r--. 1 root root 0 12월 26 15:34 test.sh
# 권한 추가
$ chmod u+x,g+w,o+wx test.sh
$ ls -alth test.sh
-rwxrw-rwx. 1 root root 0 12월 26 15:34 test.sh
# 권한 삭제
$ chmod u-r,g-r,o-r test.sh
$ ls -alth test.sh
--wx-w--wx. 1 root root 0 12월 26 15:34 test.sh
8진수 혹은 +,- 를 이용하던 chmod 명령어를 통해서 파일 / 디렉토리의 권한을 추가, 삭제할 수 있다.
권한 변경을 통해서 보안적 이슈가 발생할 수도 있어 권한 변경을 할 때는 사용에 맞도록 잘 맞춰 변경을 해야 한다.
🌵댓글