본문 바로가기
IT/리눅스 명령어

[Linux] 리눅스 서버 기본 명령어 chmod 명령어 옵션 사용법 총정리

by 꾸꾸웍스 2022. 4. 22.
반응형

[Linux] 리눅스 서버 기본 명령어 chmod 명령어 옵션 사용법 총정리



※ 목차

1. 리눅스 chmod 명령어란?
2. 리눅스 chmod 명령어 규칙 및 설명
3. 리눅스 chmod 명령어 옵션
4. 리눅스 chmod 명령어 옵션 사용법

 


1. 리눅스 chmod 명령어란?

chmod의 명령어는 change와 mode의 앞글자를 조합한 명령어로 파일의 권한을 변경하는 명령어입니다
  • 기본적으로 파일 및 디렉토리의 모드 비트를 변경하므로 모드의 종류와 사용법을 익혀야 됩니다.
  • chmod 명령어는 아래에 그림과 같이 파일 및 디렉토리의 권한을 변경하는 명령어입니다.

 


 

2. 리눅스 chmod 명령어 규칙 및 옵션

  • 지정한 각 파일의 파일 모드 비트를 변경합니다.
  • chmod 명령어는 심볼릭 링크의 직접적인 권한을 변경하지 않지만
    심볼릭 링크가 가리킨 파일 및 디렉토리는 권한이 변경 됩니다.
  • 모드문자조합숫자조합(8진수)로 총 2가지 형태로 변경을 할 수 있습니다.


 

문자 권한 영역 설명

  • 1번: 파일 종류
문자 설명
- Regular File, 일반파일을 의미합니다.
d Directory File의 약자로 디렉토리 파일을 의미합니다.
b Block Device File의 약자로 블록 디바이스 파일을 의미합니다.
c Character Device File의 약자로 문자디바이스 파일을 의미합니다.
I Symbolic Link File의 약자로 심볼릭 링크 파일을 의미합니다.
  • 2번: 파일소유자(user) 영역.  ex) 위 그림의 디렉토리와 파일의 소유자는 kim
  • 3번: 파일소유자그룹(group) 영역. ex) 위 그림의 디렉토리와 파일의 그룹은 school
  • 4번: 그 외 사용자(others)의 영역.

모드 종류 1 - 문자조합

chmod [uoga][-+=][rwxXst] [파일 또는 디렉토리]
타입 모드 설명
사용자 u 소유자(user)의 약자로 각 파일 및 디렉토리의 소유자 권한을 변경할때 지정합니다.
g 그룹(group)의 약자로 각 파일 및 디렉토리의 그룹 권한을 변경할때 지정합니다.
o 그 외 사용자(others)의 약자로 각 파일 및 디렉토리의 그 외 사용자 권한을 변경할때 지정합니다.
a all users의 약자로 각 파일의 디렉토리의 u,g,o의 모든 권한을 변경할때 지정합니다.
또한 u,g,o를 지정하지 않으면 a와 동일하게 적용됩니다.
기호 + 현재모드에 지정한 권한을 추가하겠다는 의미입니다.
- 현재모드에 지정한 권한을 제거하겠다는 의미입니다.
= 현재모드로 지정한 권한을 지정하겠다는 의미입니다.
권한 r 읽기(read)의 약자로 파일의 읽기 권한을 부여합니다.
w 쓰기(write)의 약자로 파일의 쓰기 권한을 부여합니다.
x 실행(execute)의 약자로 파일의 실행 권한을 부여합니다.
X 디렉토리 또는 파일에 실행 권한이 있는 경우 지정한 사용자의 실행 권한을 부여합니다.
s 특수 권한으로 소유자에 setuid, 그룹에 setgid를 실행 관련 권한을 부여합니다.
설정 부여 시 기존 실행권한 자리에 실행권한이 있으면 소문자(s) 없다면 대문자(S)로 부여됩니다.
t 특수 권한으로 그 외 사용자에 sticky bit를 실행 관련 권한을 부여합니다.
설정 부여 시 기존 실행권한 자리에 실행권한이 있으면 소문자(t) 없다면 대문자(T)로 부여됩니다.

모드 종류 2 - 숫자조합

chmod [0000] [파일 또는 디렉토리]

  • 기본적인 숫자조합 사용은 4자리이며 특수권한을 사용하지 않을 시는 3자리로 사용해도 됩니다.
    (일반적으로 3자리를 많이 사용)
  • 특수 권한 사용시 4자리 숫자 중 맨 앞자리에 위치하여 사용하고 
    setuid의 모드를 사용하면 소유자 영역의 실행권한 자리에 실행권한이 있으면 소문자s, 없으면 대문자 s가 부여된다.
    setgid의 모드를 사용하면 그룹 영역의 실행권한 자리에 실행권한이 있으면 소문자s, 없으면 대문자 s가 부여된다
    sticky의 모드를 사용하면 그외사용자 영역의 실행권한 자리에 실행권한이 있으면 소문자t, 없으면 대문자 T가 부여된다

 

특수권한의 파일이나 명령에 대해 실행 순간과 실행이 종료될 떄까지 그 파일의 소유자 권한으로 실행 합니다.
보안에 대한 예민한 부분이 있기 때문에 특별히 특수권한을 부여는 최소화해야 됩니다.

chmod 명령어 옵션

번호 옵션 long 옵션 설명
1 -c --changes 기존에 지정된 모드에서 변경되는 경우에만 메세지를 출력합니다.
2 -f --silent, --quiet 오류메세지를 출력하지 않습니다.
3 -v --verbose 지정한 모드로 처리된 모든 파일 및 디렉토리에 대한 메세지를 출력합니다.
4 - --no-preserve-root '/' 최상위 루트 디렉토리 모드를 변경 할 수 있습니다
5 - --preserve-root '/' 최상위 루트 디렉토리 모드를 변경 할 수 없습니다. (default)
6 - --reference=RFILE 지정한 파일에 대해 참조할 파일 권한과 동일하게 변경합니다.
7 -R --recursive 지정한 파일의 모드를 하위까지 변경합니다.
8 - --help chmod 명령어의 사용법을 출력합니다.
9 - --version chmod 명령어의 버전을 출력합니다.

 


 

4. 리눅스 chmod 명령어 옵션 사용법

 

chmod -c 옵션 사용법

기존에 지정된 모드에서 변경되는 경우에만 메세지를 출력합니다.
### 644의 file1이 존재
[ server 2022-04-20 17:51:33 ] ~/testdir
user@server # ls -l
total 0
-rw-r--r-- 1 user user 0 Apr 20 17:51 file.txt

### -c 옵션을 사용하여 기존 권한과 동일하게 명령
[ server 2022-04-20 17:51:34 ] ~/testdir
user@server # chmod -c 644 file.txt

### -c 옵션을 사용하여 기존 모드에서 변경 후 메세지 출력 확인
[ server 2022-04-20 17:51:54 ] ~/testdir
user@server # chmod -c 744 file.txt
mode of ‘file.txt’ changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)

[ server 2022-04-20 17:51:58 ] ~/testdir
user@server # ls -l
total 0
-rwxr--r-- 1 user user 0 Apr 20 17:51 file.txt

chmod -f 옵션 사용법

오류메세지를 출력하지 않습니다.
### root 소유자로 된 file 존재
[ server 2022-04-20 17:54:05 ] ~/testdir
user@server # ll
total 0
-rwxr--r-- 1 root root 0 Apr 20 17:51 file.txt

### user사용자가 root 사용자의 권한 변경 시도시 오류 메세지 출력
[ server 2022-04-20 17:54:05 ] ~/testdir
user@server # chmod 777 file.txt
chmod: changing permissions of ‘file.txt’: Operation not permitted

### -f 옵션을 사용하여 오류메세지를 출력하지 않음
[ server 2022-04-20 17:54:47 ] ~/testdir
user@server # chmod -f 777 file.txt

 


chmod -v 옵션 사용법

지정한 모드로 처리된 모든 파일 및 디렉토리에 대한 메세지를 출력합니다.
### 755 권한을 가진 file.txt
[ server 2022-04-21 09:17:14 ] ~/testdir
user@server # ls -l
total 0
-rwxr-xr-x 1 user user 0 Apr 20 17:51 file.txt

### 소유주권한에 기존과 동일하게 설정
[ server 2022-04-21 09:17:15 ] ~/testdir
user@server # chmod -v u+rwx file.txt
mode of ‘file.txt’ retained as 0755 (rwxr-xr-x)

### 기존 권한 설정에 그룹 쓰기권한 부여 후 메세지 출력
[ server 2022-04-21 09:17:22 ] ~/testdir
user@server # chmod -v 775 file.txt
mode of ‘file.txt’ changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

[ server 2022-04-21 09:17:34 ] ~/testdir
user@server # ls -l
total 0
-rwxrwxr-x 1 user user 0 Apr 20 17:51 file.txt

chmod --no-preserve-root 옵션

--no-preserve-root 옵션은 최상위 디렉토리 '/' 모드 변경을 보존 안함으로 변경되어 반드시 변경 되지 않아야 할 권한 들이 변경되면서 시스템에 비정상정인 영향을 줄 수 있습니다.
[ server 2022-04-21 09:17:34 ] ~/testdir
user@server # chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)

chmod -preserve-root 옵션

-preserve-root 옵션은 최상위 디렉토리 '/'의 하위의 모드 변경을 변경하지 못하도록 보존합니다.
  • 옵션은 -R옵션을 함께 사용하지 않으면 효과가 없고 루트 사용자가 명령을 실행하면
    '/'의 권한은 변경되지만 다른 파일이나 디렉토리의 권한은 변경되지 않습니다.
[ server 2022-04-21 09:40:12 ] ~/testdir
user@server # chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe

[ server 2022-04-21 09:45:40 ] ~/testdir
user@server # chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted

### root 사용자로 실행
[ server 2022-04-21 09:48:31 ] ~/testdir
root@server # chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)

chmod --reference=RFILE

지정한 파일에 대해 참조할 파일 권한과 동일하게 변경합니다.
[ server 2022-04-21 10:01:01 ] ~/testdir
user@server # ls -l
total 0
-rw-r--r-- 1 user user 0 Apr 21 10:00 copy_file.txt
-rwxrwxr-x 1 user user 0 Apr 20 17:51 file.txt

[ server 2022-04-21 10:01:02 ] ~/testdir
user@server # chmod --reference=file.txt copy_file.txt

[ server 2022-04-21 10:01:24 ] ~/testdir
user@server # ls -l
total 0
-rwxrwxr-x 1 user user 0 Apr 21 10:00 copy_file.txt
-rwxrwxr-x 1 user user 0 Apr 20 17:51 file.txt

chmod -R

지정한 파일의 모드를 하위까지 변경합니다.
[ server 2022-04-21 10:10:28 ] ~/testdir
user@server # ls -l
total 0
drwxr-xr-x 3 user user 36 Apr 21 10:10 apple

[ server 2022-04-21 10:10:30 ] ~/testdir
user@server # ls -l apple
total 0
drwxr-xr-x 2 user user 6 Apr 21 10:10 banana
-rw-r--r-- 1 user user 0 Apr 21 10:10 file.txt

[ server 2022-04-21 10:10:33 ] ~/testdir
user@server # chmod -R 775 apple/

[ server 2022-04-21 10:10:45 ] ~/testdir
user@server # ls -l
total 0
drwxrwxr-x 3 user user 36 Apr 21 10:10 apple

[ server 2022-04-21 10:10:46 ] ~/testdir
user@server # ls -l apple
total 0
drwxrwxr-x 2 user user 6 Apr 21 10:10 banana
-rwxrwxr-x 1 user user 0 Apr 21 10:10 file.txt

chmod --help

chmod 명령어의 사용법을 출력합니다.
[ server 2022-04-21 10:22:16 ] ~/testdir
user@server # chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...
  or:  chmod [OPTION]... --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     display this help and exit
      --version  output version information and exit

Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'chmod invocation'

chmod --version

chmod 명령어의 버전을 출력합니다.
[ server 2022-04-21 10:39:34 ] ~/testdir
user@server # chmod --version
chmod (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David MacKenzie and Jim Meyering.

 


 


 

반응형
그리드형

댓글