Linux 파일 권한: chmod 명령
Linux에서 파일로 할 수 있는 세 가지 주요 작업이 있습니다.
- 파일에 저장된 데이터를 읽습니다. (r = 읽기).
- 파일에 데이터를 씁니다. (w = 쓰기).
- 파일 실행. (x = 실행)
그러나 유형이나 용도에 관계없이 Linux 시스템의 모든 파일이 읽기, 쓰기 및 실행 가능하게 만들어진다면 어떻게 될까요? 시스템 운영에 중요한 역할을 하는 파일의 내용이 잘못된 명령을 사용하여 변경되거나 사용자의 작은 실수로 인해 Linux 시스템의 모든 파일이 삭제될 수 있습니다.
이를 방지하기 위해 Linux에서는 각 파일 및 디렉토리에 대해 “읽기(r)”, “쓰기(w)”, “실행(x)” 파일마다 개별적으로 권한을 설정할 수 있도록 되어 있습니다. 그리고 이 세 가지 “파일을 소유한 사용자(User)”, “특정 그룹에 속한 사용자(Group)”, “다른 사용자(Others)”각각에 대해 지정할 수 있도록 했습니다.

chmod command는 이러한 파일의 권한을 변경할 수 있는 명령입니다. “채널에”와 “모델이름은 e”의 첫 글자 조합입니다. (chmod = ch + mod)
여기서 “모드”는 앞에서 소개한 세 가지 권한(읽기, 쓰기, 실행)과 각 권한이 할당된 대상(파일 소유자, 그룹, 기타 사용자)을 포함하여 파일의 속성을 나타냅니다. 즉, chmod 명령으로 지정된 읽기(r), 쓰기(w), 실행(x) 권한은 물론, 소유자(user), 그룹(group), 기타 사용자(other)에 대한 설정 값 “방법”그것은 가리킨다. 이런 이유로 chmod 명령으로 파일의 모드를 변경하는 것은 파일의 권한을 변경하는 것과 동일합니다.가지다
chmod 명령
앞에서 설명한 것처럼 chmod 명령은 파일의 모드를 변경하는 명령입니다. chmod 다음에 “옵션 옵션”, “모드 문자열”, “대상 파일(또는 디렉터리)”을 차례로 입력하여 파일의 모드를 변경할 수 있습니다.
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
0~7 : 8진수(octet) 형식 모드 설정 값.
위에서 볼 수 있듯이 chmod에서 제공하는 OPTIONS 유형은 많지 않습니다. 주어진 디렉토리 아래의 모든 디렉토리와 파일의 모드를 변경하는 “-R”을 제외하고는 거의 사용되지 않으므로 이에 대해 걱정할 필요가 없습니다. 다만, MODE에 전달되는 파라미터에는 약간(?) 복잡한 문자열 조합이 적용됩니다. 그리고 MODE에 전달된 이 문자열 조합은 chmod 명령의 동작을 이해하는 열쇠입니다.
chmod 명령의 MODE 매개변수.
MODE 매개변수에 적용되는 문자열은 얼핏 보기에 꽤 복잡해 보일 수 있지만 알고 나면 실제로 매우 간단합니다. MODE 매개 변수와 결합할 수 있는 문자 조합에 대해 걱정하기 전에 먼저 파일에 할당하려는 권한을 설명적인 문장으로 표현하면 chmod 명령을 좀 더 쉽게 작성할 수 있습니다. 한 문장으로 정리해볼까요?
- 파일을 소유 사용자약 읽고 쓸 수 있다권한 정해진.
- 파일이 속한 그룹그만큼 실행에 대한 권리 첨가물.
- 시스템에서 모든 사용자들가다 읽을 수 있다유일한 권한 정해진.
- 파일을 소유 그룹수업 다른 사용자의 모든 권리 제거하다.
이제 우리가 해야 할 일은 이 문장의 단어를 “MODE 매개변수의 문자”로 바꾸는 것입니다. 앞서 chmod 명령어의 MODE 매개변수에서 언급했는데 아래 그림을 참고하시면 좀 더 직관적으로 이해하실 수 있을 것 같습니다.

위의 첫 번째 문장을 chmod 명령으로 바꾸면 아래 그림과 같이 MODE 매개변수를 결합할 수 있습니다.

이 규칙에 따라 변환하면 큰 어려움 없이 나머지 문장에 대한 MODE 매개변수를 결합할 수 있습니다.
- 파일이 속한 그룹그만큼 실행에 대한 권리 첨가물.
$ chmod g+x FILE - 시스템에서 모든 사용자들가다 읽을 수 있다유일한 권한 정해진.
$ chmod a=r FILE - 파일을 소유 그룹수업 다른 사용자의 모든 권리 제거하다.
$ chmod go-rwx FILE
그런데 “할당(=)” 권한은 전달된 권한으로 완전히 설정되지만 “추가(+)” 및 “제거(-)”는 파일의 기존 권한을 기반으로 하며 새 권한이 추가되거나 지정된 권한이 변경됩니다. 제거됩니다. 그렇다면 파일이 이미 가지고 있는 권한을 확인할 수 있어야겠죠? 간단한 “ls -l” 명령으로 파일의 현재 권한을 확인할 수 있습니다.
파일 또는 디렉토리 권한을 확인하십시오.
Linux에서 파일 또는 디렉터리에 할당된 권한을 확인하려면 “ls -l” 명령을 사용할 수 있습니다.
$ ls -l
-rw-r--r-- 1 ppotta manager 17 Mar 24 03:17 FILE
“ls -l” 명령을 실행하면 현재 디렉토리(ls=list)에 있는 파일 목록이 한 파일 단위로 긴 한 줄(-l=long)로 표시됩니다. 디스크 공간을 기준으로 첫 번째 항목(-rw-r–r–)은 파일 소유자별 권한을 지정하고 세 번째(ppotta) 및 네 번째(manager) 항목은 각각 파일 소유자 및 그룹을 지정합니다.

이전에 실행한 “ls -l” 명령의 실행 결과를 해석하면 다음과 같다.
-rw-r--r-- 1 ppotta manager 17 Mar 24 03:17 FILE
- 파일 사용자: ppotta
- 파일 소유 그룹: 관리자
- 파일 소유자 사용자(ppotta)의 권한: “rw-” = 읽기(r), 쓰기(w) 있음.
- 파일 소유자 그룹(관리자) 권한: “r–” = 읽기 가능(r).
- 다른 사용자의 권한: “r–” = 읽기(r) 허용.
이제 ls -l 명령을 사용하여 파일에 설정된 권한을 확인하는 방법을 알았으므로 쉽게 추가(+) 및 삭제(-)를 사용하여 파일에 대한 권한을 추가하거나 제거할 수 있습니다.
그런데 여기서 질문이 생깁니다. 파일에 대한 읽기(r), 쓰기(w) 및 실행(x)의 의미는 명확하지만 디렉토리에 대한 각 권한은 무엇을 의미합니까? 흠… Read(r) 와 Write(w) 의 의미가 애매한 것 같은데… 다만 “execute”라는 개념을 디렉토리에 적용할 수 없기 때문에 “execute(x)” 권한은 디렉토리로 시작합니까?
디렉터리에 대한 권한
디렉토리는 파일을 분류하는 데 사용됩니다. 그리고 디렉토리 안에는 다른 파일이나 디렉토리 목록이 있습니다. 이 기사의 시작 부분에서 파일로 할 수 있는 세 가지 작업인 데이터 읽기, 데이터 쓰기 및 파일 실행을 소개했습니다. 마찬가지로 디렉토리로 수행할 수 있는 세 가지 주요 작업이 있습니다.
- 디렉토리의 파일 및 디렉토리 목록을 읽습니다. (r = 읽기)
- 디렉토리에 파일을 추가, 이름 변경, 삭제합니다. (w = 쓰기)
- 디렉토리에 액세스하십시오. cd 명령을 사용하여 작업 디렉토리를 변경하십시오. (x = 실행)
먼저, 읽기(r) 권한은 디렉토리에 있는 파일 목록을 검사할 수 있는 권한을 의미합니다. 즉, ls 명령으로 디렉토리를 나열할 때 읽기(r) 권한이 있어야 합니다. 디렉토리에 읽기(r) 권한이 없는 경우 ls 명령을 실행하면 권한 거부 오류가 발생합니다. (참고로 읽기(r) 권한만 있다면 “파일명”만 확인이 가능하며 파일의 모든 정보를 확인하기 위해서는 실행(x) 권한이 있어야 합니다(“ls -l”).)
$ ls -l
total 4
d--------- 2 ppotta ppotta 4096 Mar 26 00:50 DIR
$ ls DIR
ls: cannot open directory 'DIR': Permission denied
다음으로 쓰기(w) 권한은 디렉터리에서 파일을 생성, 복사, 이름 바꾸기 또는 삭제할 때 필요합니다. 문자 그대로 “디렉토리의 내용을 변경”하므로 쓰기(w) 권한이 필요합니다. 작성, 복사, 수정 및 삭제 작업은 쓰기(r) 권한만 있어도 수행되지 않으며 요청된 작업은 실행(x )이 지정된 경우에만 정상적으로 진행됩니다.
마지막으로 디렉토리에 접근할 때 실행 권한(x)이 필요합니다. 이 권한은 cd 명령으로 디렉토리에 접근할 때 필요합니다. 그러나 단순히 cd 명령으로 작업 디렉토리를 변경하는 것에 국한되지 않고, “입장” 이름 권한에서 알 수 있듯이 디렉터리에 대한 모든 작업(읽기, 쓰기)에는 디렉터리에 액세스하기 위한 실행(x) 권한이 필요합니다. 즉, 읽기(r) 및 쓰기(w) 권한은 실행(x) 권한 없이는 완전히 사용할 수 없습니다.
결론적으로 다음과 같이 요약할 수 있다.
- 디렉터리의 내용을 읽으려면 읽기(r) 권한이 필요합니다.
- 디렉토리의 내용을 변경하려면 쓰기(w) 권한이 필요합니다.
- 실행(x) 권한은 디렉터리 접근을 위해 필요하며 가장 기본적인 접근 권한입니다.
8진수 형식으로 파일 모드를 지정하는 방법
지금까지 MODE 매개변수 문자열을 결합하여 파일 모드를 변경하는 방법에 대해 자세히 설명했습니다. 이전에 설명한 것보다 파일 모드를 지정하는 약간 더 간단한 방법이 있습니다. 따라서 MODE 매개변수에 파일 모드를 나타내는 8진수를 사용하십시오.
“ls -l” 명령을 사용하여 현재 파일의 권한을 확인하는 방법을 알고 계셨습니까? 출력 결과의 첫 번째 요소를 통해 “사용자(u)”, “그룹(g)” 및 “기타 사용자(o)”에 대해 “읽기(r)”, “쓰기(w)” 및 “실행”합니다. (x)” 권한.

8진수 값을 사용하는 방법은 각 권한(rwx)을 8진수 형태의 숫자 값으로 변환하여 바로 지정하는 것입니다. 따라서 그림의 “rwxrwxrwx”에서 “rwx”를 8진수 값으로 변환한 다음 해당 값을 3개(사용자, 그룹, 다른 사용자)의 목록으로 한 행에 전달합니다. 이때, 권한 없음(-)은 0, 읽기(r)는 4, 쓰기(w)는 2, 실행(x)은 1이며 이들 값의 합은 8진수로 변환된다. 값.
아래 그림을 보시면 이해가 더 쉬울 것 같아요.

어렵지 않니? 파일 모드를 8진수 형식으로 지정하는 방법에 대한 몇 가지 예를 살펴보겠습니다.
- 모든 사용자가 읽기, 쓰기 또는 실행할 수 없도록 지정합니다.
$ 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진수 형식을 사용할 때 u, g, o, a 또는 =, +, -는 MODE 매개변수에 전달된 값이 파일의 권한에 직접 적용되기 때문에 사용할 수 없습니다.
chmod 명령 사용 예(1)
이제 chmod를 사용하는 방법에 대한 다양한 예를 살펴보겠습니다.
$ chmod u+x FILE # 파일 소유 사용자에게 실행권한 추가.
$ chmod u+w FILE # 파일 소유 사용자에게 쓰기 권한 추가.
$ chmod u=rwx FILE # 파일 소유 사용자에게 읽기, 쓰기, 실행 권한 지정.
$ chmod u-x FILE # 파일 소유 사용자의 실행 권한 제거.
$ chmod g+w FILE # 파일 소유 그룹에 쓰기 권한 추가.
$ chmod g-x FILE # 파일 소유 그룹의 실행 권한 제거.
$ chmod o=r FILE # 파일 소유 사용자 및 그룹을 제외한 사용자는 읽기만 가능.
$ chmod a-x * # 현재 디렉토리의 모든 파일에서 모든 사용자의 읽기 권한 제거.
$ chmod a-w FILE # 모든 사용자에 대해 쓰기 권한 제거.
$ chmod u=rwx,g=r FILE # 파일 소유 사용자는 모든 권한, 그룹은 읽기만 가능.
$ chmod ug=rw FILE # 파일 소유 사용자와 그룹이 읽기, 쓰기 가능.
$ chmod g=rw,o=r FILE # 파일 소유 그룹은 읽기, 쓰기 가능, 그 외 사용자는 읽기만 가능.
$ chmod ug=rw,o=r FILE # 파일 소유 사용자 및 그룹은 일기, 쓰기 가능, 그외 사용자는 읽기만 가능.
$ chmod 000 FILE # 모든 사용자의 모든 권한 제거. = ---------
$ chmod 664 FILE # 사용자(읽기+쓰기), 그룹(읽기+쓰기), 그외 사용자(읽기) = rw-rw-r--
$ chmod 755 FILE # 사용자(읽기+쓰기+실행), 그룹(읽기+실행), 그외 사용자(읽기+실행) = rwxr-xr-x
$ chmod 777 FILE # 모든 사용자에 모든 권한 추가.
$ chmod -R g+x DIR # DIR 디렉토리 하위 모든 파일 및 디렉토리에 그룹 실행(x) 권한 추가.
$ chmod -R o-wx * # 현재 디렉토리의 모든 파일에서 그외 사용자의 쓰기, 실행 권한 제거
$ chmod -R a-x,a+X * # 현재 디렉토리 기준 모든 파일 읽기 권한 제거, 디렉토리 실행 권한 추가.
$ chmod -R a-x+X * # 위(chmod -R a-x,a+X *)와 동일.
$ chmod u=g FILE # FILE의 그룹 권한 값을 사용자 권한으로 적용.
$ ls -l
-rwxr--r-- 1 ppotta manager 23 Mar 26 04:13 FILE
$ chmod u=g FILE
-r--r--r-- 1 ppotta manager 23 Mar 26 04:13 FILE
$ chmod u+g FILE # FILE의 사용자 권한에 그룹 권한 값을 추가.
$ ls -l
-r-x-w--w- 1 ppotta manager 23 Mar 26 04:13 FILE
$ chmod u+g FILE
-rwx-w--w- 1 ppotta manager 23 Mar 26 04:13 FILE
X의 의미(대문자 X)
MODE 매개변수 아래에서 X(대문자 X)의 내용을 살펴보겠습니다.
- X : “디렉토리” 또는 “실행 권한(x)이 있는 파일”에 실행 권한(x)을 적용합니다.

X(위쪽 X): “디렉토리” 또는 “실행(x) 권한이 있는 파일”에 실행(x) 권한을 적용합니다.
chmod 명령의 MODE 매개변수에 사용할 수 있는 X(대문자 X)는 “실행(x) 권한이 있는 디렉토리 및 파일에 실행(x) 권한을 적용”하는 데 사용됩니다. 음.. 적어놓고도 의미가 이상하네요. 실행(x)권한이 있는 파일에 실행(x)권한을 적용하다니… 별 의미 없는 연산인 것 같은데… 뭔가 이상하다.
그럼 조금 다르게 말하겠습니다.
X(대문자 X)는 “대상이 실행 권한(x)을 가질 수 있는 경우에만 실행 권한을 할당”하려는 경우에 사용됩니다.
조금 더 의미가 있습니까? 조금 더 설명하겠습니다.
Linux에서 실행 가능한 파일
파일이 Linux에서 실행 가능한지 여부는 확장자나 파일 형식으로 결정되지 않습니다. 이는 파일에 실행(x) 권한이 있는지 여부에 따라 결정됩니다. 이 기능은 시스템 관리 및 사용 측면에서 많은 이점을 제공하지만 사용자의 작은 실수가 큰 위험을 초래할 수 있다는 단점도 있습니다.
예를 들어, 다음과 같은 내용을 가진 “test”라는 텍스트 파일이 있는 경우,
echo 'TEST'
테스트 파일에 실행(x) 권한이 있으면 셸에서 테스트를 실행하고 결과를 볼 수 있습니다(echo 명령 실행).
$ ls -l
-rwxr-xr-x 1 ppotta ppotta 11 Mar 31 23:09 test
$ cat test
echo 'TEST'
$ ./test
TEST
즉, 실행할 명령을 텍스트 파일에 나열하고 실행(x) 권한을 부여한 다음 파일을 실행하면 파일에 나열된 명령(예제에서는 echo 명령)을 한 번에 실행할 수 있습니다. 매우 쉬워 보입니다. 동시에 실행할 명령을 나열하고 실행(x) 권한을 부여한 다음 실행하면 매우 편리해 보입니다. (물론 Linux에는 이러한 목적을 위한 쉘 스크립트라는 것이 있습니다.)
하지만 실행 목적이 아닌 기록 목적으로 파일에 “rm -rf *”라는 구문을 작성하고 파일에 실행 권한이 부여되어 실행할 수 있다면 어떻게 될까요? 으… 생각만 해도 끔찍하네요.
물론 이러한 파일에 대한 실행(x) 권한을 부여하지 않으면 전혀 문제가 없습니다. 의도적으로 실행(x) 권한을 부여할 이유가 없습니다. 그러나 시스템을 사용하다 보면 파일의 속성이 의도하지 않게 변경되는 경우가 가끔 발생합니다.
사례를 들어보겠습니다. 어느 날 우연히 특정 디렉터리 아래의 일부 디렉터리에서 execute(x) 옵션이 누락된 것을 발견했습니다. 각 파일을 찾아 실행(x) 옵션을 추가해야 하는 번거로움이 느껴집니다. 그래서 단순히 “+x”를 적용하여 실행 권한을 추가하기로 결정했습니다. 물론 모든 하위 디렉토리를 변경해야 하므로 “-R” 옵션을 적용합니다. (chmod -R +x *)
$ ls -l
drw-r--r-- 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rw-r--r-- 1 ppotta ppotta 12 Mar 31 23:37 test
$ chmod -R +x *
$ ls -l
drwxr-xr-x 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rwxr-xr-x 1 ppotta ppotta 12 Mar 31 23:37 test
실행 결과를 확인해보면 디렉토리(DIR)에 실행 권한(x)이 정상적으로 적용되어 있는 것을 확인할 수 있습니다. 단, 실행 권한(x)은 디렉터리가 아닌 “test” 파일(여기서 “rm -rf *”가 기록됨)에 적용됩니다. 실행(x) 권한이 매우 위험한 파일에 부여되었습니다.
(x) 권한 할당을 안전하게 실행
이제 X(대문자 X)에 대한 설명으로 돌아가겠습니다. 나는 당신이 이제 그것이 무엇을 의미하는지 이해할 것이라고 생각합니다.
chmod에서 X(대문자 X)는 “대상이 실행 권한(x)을 가질 때만 실행 권한을 지정”하는 데 사용되며, 이 경우 실행 권한(x)이 허용되는 대상은 “directory” 또는 “A file that have execute 이미 실행(x) 권한이 있습니다.” 즉, 이전에 실행(x) 권한이 없었던 파일에 실행(x) 권한을 부여하지 않으려면 x(소문자 x) 대신 X(대문자 X)를 사용하십시오.
$ ls -l
drw-r--r-- 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rw-r--r-- 1 ppotta ppotta 12 Mar 31 23:37 test
$ chmod -R a+X *
$ ls -l
drwxr-xr-x 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rw-r--r-- 1 ppotta ppotta 12 Mar 31 23:37 test
-엑스
X(대문자 X) 및 -(삭제)를 사용하면 x(소문자 x)를 사용하는 것과 동일한 결과가 생성됩니다. “-X”는 “aX”와 동일합니다. “chmod -R -X *”의 “-X”는 “-R”과 같이 chmod 명령에 사용할 수 있는 옵션 중 하나라고 오해하지 마십시오. “chmod -R -X *”는 “chmod -R aX *”와 같은 의미입니다.
$ ls -l
drwxr-xr-x 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rwxr-xr-x 1 ppotta ppotta 12 Mar 31 23:37 test
$ chmod -R -X *
$ ls -l
drw-r--r-- 2 ppotta ppotta 4096 Mar 31 23:59 DIR
-rw-r--r-- 1 ppotta ppotta 12 Mar 31 23:37 test
chmod 명령 사용 예(2)
아래 요약된 내용에서 X(대문자 X)가 있는 예를 참조하십시오.
$ chmod u+X FILE # FILE이 실행 권한을 가진 경우에만 파일 소유 사용자에게 실행 권한 추가.
$ chmod -R a-x,a+X * # 현재 디렉토리 아래 모든 파일의 실행 권한 제거, 디렉토리 실행 권한 추가.
$ chmod -R a-x+X * # 위(chmod -R a-x,a+X *)와 동일.
참조 페이지
