Jump to content

chmod

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

chmod
Original author(s)AT&T Bell Laboratories
Developer(s)Various open-source and commercial developers
Initial release3 November 1971; 52 years ago (1971-11-03)
Operating systemUnix, Unix-like, Plan 9, Inferno, IBM i
PlatformCross-platform
TypeCommand
Licensecoreutils: GPLv3

유닉스유닉스-계열 운영 시스템에서, chmod는 때때로 모드라고 알려져 있는 파일 시스템 개체 (파일디렉토리)의 접근 권한을 변경하기 위해 사용되는 명령시스템 호출입니다. 그것은 역시 setuidsetgid 플래그와 'sticky' 비트와 같은 특수 모드 플래그를 변경하기 위해 사용됩니다. 요청은 umask로 필터링됩니다. 그 이름은 change mode의 약어입니다.[1] 그것들은 긴 형식에서 파일을 나열할 때 표시됩니다.

stat 구조에서, 파일 형식과 권한 (모드)은 st_mode 비트 필드에 함께 저장되며, 적어도 12비트 (7가지 가능한 파일 형식 중 형식을 지정하기 위한 3비트; 권한에 대해 9비트)의 크기를 가집니다. 허가권에 대한 레이아웃은 POSIX에 의해 최하위 9비트로 정의되지만, 나머지는 정의되지 않습니다.[2]

History

chmod 명령은 AT&T 유닉스 버전 1에서 처음 나타났습니다.

시스템이 사용자의 숫자와 유형이 증가함에 따라, 접근-제어 목록은 유연성을 높이기 위해 이들 가장 기본적인 모드 외에도 많은 파일 시스템에 추가되었습니다.[3]

GNU coreutils에 번들된 chmod 버전은 David MacKenzie와 Jim Meyering에 의해 작성했습니다.[4]

chmod 명령은 역시 IBM i 운영 시스템에 이식되었습니다.[5]

Preliminaries

유닉스-계열 시스템은 각 클래스에 적용되는 세 가지 특정 허가권을 구현합니다:

  • 읽기 권한은 r에 의해 표시되고 숫자 값 4를 가집니다.
    • 디렉토리에 대해 설정할 때, 읽기 권한은 디렉토리에 있는 파일 이름을 읽을 수 있는 권한을 부여할 수 있습니다 (구현에 따라 다릅니다) . 파일에 대한 정보의 접근은 허용되지 않습니다.
    • 파일에 대해 적용할 때, 읽기 권한은 파일과 그것의 속성을 읽기 위한 권한을 부여합니다.
  • 실행 권한은 x에 의해 표시되고 숫자 값 1을 가집니다.
    • 디렉토리에 대해 설정할 때, 실행 권한은 검색할 수 있는 권한을 부여합니다: 만약 파일 이름이 알려져 있으면 파일 컨텐츠와 메타 정보에 접근할 수 있는 권한을 부여하지만 read가 역시 설정되지 않은 한 디렉터리 내의 파일 컨텐츠를 나열할 수 없습니다.
    • 파일에 대해 설정할 때, 실행 권한은 파일을 실행할 수 있는 권한을 부여합니다. 이 권한은 명령 프롬프트에서 호출된 실행 가능한 프로그램 및 스크립트에 대해 설정되어야 합니다.
  • 쓰기 권한은 w에 의해 표시되고 숫자 값 2를 가집니다.
    • 디렉토리에 대해 설정할 때, 쓰기 권한은 파일 생성, 삭제 및 이름 바꾸기를 포함하여 디렉토리의 항목을 수정할 수 있는 권한을 부여합니다. execute이 역시 설정되어야 합니다.
    • 파일에 대해 설정할 때, 쓰기 권한은 파일을 수정할 수 있는 권한을 부여합니다. 실제로 새 파일을 생성하고 저장함으로써, 이전 버전을 삭제하고 새 버전의 이름을 변경함으로써 파일을 "수정"하는 프로그램은 디렉토리에 대한 쓰기 권한없이 실패할 것입니다.


허가권이 설정되지 않을 때, 해당하는 접근이 거부됩니다.

유닉스-계열 시스템에 대한 허가권은 상속되지 않습니다. 디렉토리 내에서 생성된 파일은 반드시 해당 디렉토리와 같은 권한을 가질 필요는 없습니다.

유닉스-계열 시스템에 대한 허가권은 세 가지 별개의 범위 또는 클래스에서 관리됩니다. 이들 범위는 사용자 (u로 표시), 그룹 (g로 표시) 및 다른-사람들 (o로 표시)로 알려져 있습니다. 파일디렉토리는 파일의 사용자 클래스를 정의하는 사용자에 의해 소유됩니다. 파일 및 디렉토리는 그룹 속성을 가지고 해당 그룹의 구성원인 임의의 사용자는 그룹 플래그에 의해 정의된 권한을 부여받습니다. 파일 또는 디렉토리 그룹의 소유자도 아니고 구성원이 아닌 사용자는 다른-사람들 플래그에 의해 기초한 권한을 부여받습니다. 파일 소유자는 그룹의 구성원이나 다른 사람들에게 부여된 권한보다 더 제한적일 수 있는 그룹 클래스 또는 다른 사람들 클래스에 부여된 권한에 관계없이 사용자 클래스에 부여된 권한을 가집니다.

Command syntax

이 섹션 전체에서, 사용자는 명령의 기호 형식이 "u"를 사용한다는 것을 상기시키기 위해 파일의 소유자를 참조합니다.

chmod [options] mode[,mode] file1 [file2 ...][6]

보통 구현된 옵션은 다음을 포함합니다:

  • -R 재귀적, 즉, 하위디렉토리에서 대상을 포함합니다.
  • -v 자세한, 변경된 개체를 표시합니다 (변경되지 않은 개체는 표시되지 않습니다).

만약 심볼릭 링크가 지정되면, 대상 개체가 영향을 받습니다. 심볼릭 링크 자체와 직접 결합된 파일 모드는 전형적으로 사용되지 않습니다.

파일 모드를 보기 위해, ls 또는 stat 명령이 사용될 수 있습니다:

$ ls -l findPhoneNumbers.sh
-rwxr-xr--  1 dgerman  staff  823 Dec 16 15:03 findPhoneNumbers.sh
$ stat -c %a findPhoneNumbers.sh
754

r, w, 및 x는 읽기, 쓰기 및 실행 접근을 지정합니다. ls 디스플레이의 첫 번째 문자는 객체 유형을 나타냅니다; 하이픈은 일반 파일을 나타냅니다. 이 스크립트는 사용자 dgerman에 의해 읽고, 쓰고, 실행될 수 있습니다; staff 그룹의 구성원에 의해 읽고 실행됩니다; 및 다른 사용자에 의해 오직 읽힙니다.

Octal modes

chmod 허가권의 주요 부분:

예를 들어: drwxrwx---

"d" 오른쪽에 있는 문자는 각 클래스에 대해 허가권을 정의합니다:

  • 가장 왼쪽에 있는 세 개의 문자, rwx사용자 클래스 (즉, 파일 소유자)에 대해 허가권을 정의합니다.
  • 중간에 있는 세 개의 문자, rwx그룹 클래스 (즉, 파일을 소유하는 그룹)에 대해 허가권을 정의합니다.
  • 마지막에 있는 세 개의 문자, ---다른 사람들에 대해 허가권을 정의합니다. 이 예제에서, 파일의 소유자가 아니고 그룹의 구성원이 아닌 사용자 (및, 따라서, 다른 사람들 클래스에 있는 사용자)는 파일을 접근하기 위한 허가권을 가지지 않습니다.

Numerical permissions

chmod 숫자 형식은 최대 4개의 팔진 자릿수를 허용합니다. 맨 오른쪽 세 자리는 파일 사용자, 그룹 및 다른 사람들에 대해 허가권을 정의합니다. 선택적 선행하는 자릿수는, 4개의 자릿수가 주어졌을 때, 특수 [[setuid]], [[setgid]], 및 [[Sticky bit|sticky]] 플래그를 지정합니다. 맨 오른쪽 세 개의 자릿수의 각 자릿수는 "읽기", "쓰기" 및 "실행" 권한을 각각 제어하는 이진 값을 나타냅니다. 값 1은 클래스가 해당 작업을 허용함을 의미하고, 0은 허용되지 않음을 의미합니다.

# rwx 허가권
7 4(r) + 2(w) + 1(x) rwx 읽기, 쓰기 및 실행
6 4(r) + 2(w) rw- 읽기 및 쓰기
5 4(r)        + 1(x) r-x 읽기 및 실행
4 4(r) r-- 읽기만 가능
3        2(w) + 1(x) -wx 쓰기 및 실행
2        2(w) -w- 오직 쓰기
1               1(x) --x 오직 실행
0 0 --- 없음

예를 들어, 754는 다음을 허용합니다:

  • 사용자 클래스에 대해 "읽기" (4), "쓰기" (2), 및 "실행" (1), 즉, 7 (4+2+1).
  • 그룹 클래스에 대해 "읽기" (4) 및 "실행" (1), 즉, 5 (4+1).
  • 다른 사람들 클래스에 대해 오직 "읽기" (4).

숫자 코드가 실행을 허용하는 것과 그것이 홀수 (즉, 1, 3, 5, 또는 7)인 것은 필요충분 조건입니다. 반면에 숫자 코드가 "쓰기"를 허용하는 것과 그것이 4보다 크거나 같은 것은 필요충분 조건이며, 이것은 4, 5, 6 또는 7을 의미합니다.

"쓰기"가 허용되는지 확인하려면, 만약 숫자 값이 홀수이면 그 값에서 1을 빼십시오 (그리고 짝수이면 빼지 마십시오); 그런-다음 "쓰기"가 허용되는 것과 이 결과 숫자가 2 또는 6인 것은 필요충분 조건입니다. 예를 들어:

  • 만약 그 값이 6 (각각, 2)이면, (아무것도 빼지 않고) 쓰기가 허용된다고 결론을 내립니다.
  • 만약 숫자 값이 7 (각각, 3)이면, 1을 빼서 6 (각각, 2)를 얻고 쓰기가 허용된다고 결론을 내립니다.
  • 만약 그 값이 4 (각각, 0)이면, (아무것도 빼지 않고) 쓰기가 허용되지 않는다고 결론을 내립니다.
  • 만약 그 값이 5 (각각, 1)이면, 1을 빼서 4 (각각, 0)을 얻고 다시 한번, 쓰기가 허용되지 않는다고 결론을 내립니다.

Numeric example

programmers 그룹의 구성원에게 파일을 업데이트할 수 있도록 권한을 변경합니다:

$ ls -l sharedFile
-rw-r--r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile
$ chmod 664 sharedFile
$ ls -l sharedFile
-rw-rw-r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile

setuid, setgidsticky 비트는 지정되지 않았기 때문에, 이것은 다음과 동등합니다:

$ chmod 0664 sharedFile

Symbolic modes

chmod 명령은 역시 다른 모드를 건드리지 않고 남겨둔 채 특정 모드를 수정하도록 허용하는 보다-세분화된 기호 표기법을 허용합니다.[7] 기호 모드는 단일 텍스트 문자열을 형성하기 위해 결합되는 세 가지 성분으로 구성됩니다:

$ chmod [references][operator][modes] file ...

사용자의 클래스는 허가권이 적용되는 대상을 구별하기 위해 사용됩니다. 만약 클래스가 지정되지 않으면, "all"이 암시됩니다. 클래스는 다음 문자 중 하나 이상으로 표시됩니다:

참조 클래스 설명
u 사용자 파일 소유자
g 그룹 파일 그룹의 구성원
o 다른 사람들 파일 소유자도 아니고 파일 그룹의 구성원도 아닌 사용자
a 모든 사람들 위의 셋 모두, ugo와 같음

chmod 프로그램은 연산자를 파일 모드가 조정되어야 하는 방법을 지정하기 위해 사용합니다. 다음 연산자가 허용됩니다:

연산자 설명
+ 지정된 클래스에 지정된 모드를 더합니다
- 지정된 클래스에서 지정된 모드를 없앱니다
= 지정된 모드는 지정된 클래스에 대해 정확한 모드를 만들게 됩니다

모드는 지정된 클래스에서 부여되거나 제거될 허가권을 나타냅니다. 기본 허가권에 해당하는 세 가지 기본 모드가 있습니다:

모드 이름 설명
r 읽기 파일을 읽기(read) 또는 디렉토리 내용을 목록화
w 쓰기 파일 또는 디렉토리에 쓰기(write)
x 실행 파일을 실행(execute) 또는 디렉토리 트리를 재귀
X 특수 실행 이것은 그 자체로 허가권이 아니라 x 대신에 사용될 수 있습니다. 그것은 현재 허가권에 관계없이 디렉토리에 실행 권한을 적용하고 이미 실행 권한 비트가 하나 이상 설정된 파일 (사용자, 그룹 또는 다른 사람들)에 실행 권한을 적용합니다. 그것은 +와 함께 사용되고 보통 정규 파일 (예를 들어, 텍스트 파일)에 대한 실행 권한을 설정하지 않고 큰 디렉토리 트리에 대한 그룹 또는 다른 사람들 접근을 제공하는 것에 대해 -R 플래그와 결합에서 사용될 때 오직 정말 유용하며, 통상적으로 여러분이 단지 chmod -R a+rx .를 사용하면 발생할 것이지만, 대신에 X와 함께 chmod -R a+rX .를 수행할 수 있습니다.
s setuid/gid 특수 모드 섹션에서 자세한 정보를 참조
t sticky 특수 모드 섹션에서 자세한 정보를 참조

다중 변경은 여러 기호 모드를 (공백없이) 쉼표로 구분함으로써 지정될 수 있습니다. 만약 사용자가 지정되지 않으면, chmodumask를 확인하고 umask에 설정된 비트가 영향을 받지 않는다는 점을 제외하고 "a"가 지정된 것처럼 효과를 나타낼 것입니다.[8]

Symbolic examples

  • 그룹 (g)의 디렉토리 접근 모드에 쓰기 권한 (w)을 더하며, 같은 그룹의 사용자에게 파일을 추가하는 것을 허용합니다:
$ ls -ld shared_dir # show access modes before chmod
drwxr-xr-x   2 jsmitt  northregion 96 Apr 8 12:53 shared_dir
$ chmod  g+w shared_dir
$ ls -ld shared_dir  # show access modes after chmod
drwxrwxr-x   2 nfinny  eastregion 96 Apr 8 12:53 shared_dir
  • 모든 클래스(a)에 대해 쓰기 권한 (w)을 제거하며, 누구도 파일에 쓰는 것을 막습니다:
$ ls -l ourBestReferenceFile
-rw-rw-r--   2 tmiller  northregion 96 Apr 8 12:53 ourBestReferenceFile
$ chmod a-w ourBestReferenceFile
$ ls -l ourBestReferenceFile
-r--r--r--   2 ebowman  northregion 96 Apr 8 12:53 ourBestReferenceFile
  • 사용자 및 그룹 (ug)에 대해 오직 referenceLib에서 읽기와 실행 (rx) 전용 (쓰기 권한 없음)으로 권한을 설정하며, 누구도 파일을 추가하는 것을 막습니다:
$ ls -ld referenceLib
drwxr-----   2 ebowman  northregion 96 Apr 8 12:53 referenceLib
$ chmod ug=rx referenceLib
$ ls -ld referenceLib
dr-xr-x---   2 dhinkle  northregion 96 Apr 8 12:53 referenceLib
  • sample이라는 파일 또는 디렉토리의 사용자와 그룹 클래스에 읽기와 쓰기 권한을 더합니다:
$ chmod ug+rw sample
$ ls -ld sample
drw-rw----   2 rsanchez  budget       96 Dec  8 12:53 sample
  • sample에 대한 사용자와 그룹에 대해 읽기와 실행 전용 (쓰기 권한 없음)으로 변경합니다:
$ # Sample file permissions before command
$ ls -ld sample
drw-rw----   2 oschultz  warehousing       96 Dec  8 12:53 NY_DBs
$ chmod ug=rx sample
$ ls -ld sample
dr-xr-x---   2 aolensky  warehousing       96 Dec  8 12:53 NJ_DBs

Special modes

chmod 명령은 파일 또는 디렉토리의 추가적인 허가권 또는 특수 모드를 변경할 수도 있습니다. 기호 모드는 setuidsetgid 모드를 나타내기 위해 's'를 사용하고 sticky 모드를 나타내기 위해 't'를 사용합니다. 모드는 다른 클래스의 지정 여부에 관계없이 오직 적절한 클래스에 적용됩니다.

대부분의 운영 시스템은 팔진 모드를 사용하는 특수 모드의 사양을 지원하지만, 일부는 지원하지 않습니다. 이들 시스템에서, 오직 기호 모드가 사용될 수 있습니다.

Command line examples

Command Explanation
chmod a+r publicComments.txt 모든 클래스 (즉, 사용자, 그룹다른 사람들)에 대해 읽기 권한을 더합니다
chmod a-x publicComments.txt 모든 클래스에 대한 실행 권한을 제거합니다
chmod a+rx viewer.sh 모든 클래스에 대한 읽기와 실행 권한을 더합니다
chmod u=rw,g=r,o= internalPlan.txt 사용자에 대해 읽기와 쓰기 권한을 설정하고, 그룹에 대해 읽기를 설정하고, 다른 사람들에 대해 접근을 거부합니다
chmod -R u+w,go-w docs 소유자에 대한 (재귀적으로(Recursively)) 디렉토리 docs와 모든 내용에 대한 쓰기 권한을 추가하고, 그룹과 다른 사람들에 대해 쓰기 권한을 제거합니다
chmod ug=rw groupAgreements.txt 사용자그룹에 대해 읽기와 쓰기 권한 설정합니다
chmod 664 global.txt 사용자그룹에 대해 읽기와 쓰기 권한을 설정하고, 다른 사람들에게 읽기를 제공합니다
chmod 744 myCV.txt 사용자에 대해 읽기, 쓰기, 및 실행 권한을 설정하고, 그룹다른 사람들에 대해 읽기 권한을 설정합니다
chmod 1755 findReslts.sh 스티키 비트를 설정하고, 사용자에 대해 읽기, 쓰기, 및 실행 권한을 설정하고, 그룹과 다른 사람들에 대해 읽기와 실행 권한을 설정합니다 (이것은 스크립트가 메모리에 유지됨을 나타냅니다)
chmod 4755 setCtrls.sh UID를 설정하고, 사용자에 대해 읽기, 쓰기, 및 실행 권한을 설정하고, 그룹다른 사람들에 대해 읽기와 실행 권한을 설정합니다
chmod 2755 setCtrls.sh GID를 설정하고, 사용자에 대해 읽기, 쓰기, 및 실행 권한을 설정하고, 그룹다른 사람들에 대해 읽기와 실행 권한을 설정합니다
chmod -R u+rwX,g-rwx,o-rx personalStuff 재귀적으로 (즉, PersonalStuff에서 모든 파일 및 디렉토리에서) 사용자에 대해 읽기, 쓰기 및 특수 실행 권한을 더하고, 그룹에 대해 읽기, 쓰기, 및 실행 권한을 제거하고, 다른 사람들에 대해 읽기와 실행 권한을 제거합니다
chmod -R a-x+X publicDocs 재귀적으로 (즉, publicDocs의 모든 파일 및 디렉토리에서) 모든 클래스에 대해 실행 권한을 제거하고 모든 클래스에 대해 특수 실행 권한을 추가합니다

System call

POSIX 표준은 다음 함수 프로토타입을 정의합니다:[9]

int chmod(const char *path, mode_t mode);

모드 매개변수는 다양한 플래그로 구성된 비트필드입니다:

플래그 팔진 값 목적
S_ISUID 04000 실행시 사용자 ID를 설정하기
S_ISGID 02000 실행시 그룹 ID를 설정하기
S_ISVTX 01000 스티키 비트
S_IRUSR, S_IREAD 00400 사용자에 의한 읽기
S_IWUSR, S_IWRITE 00200 사용자에 의한 쓰기
S_IXUSR, S_IEXEC 00100 사용자에 의한 실행/검색
S_IRGRP 00040 그룹에 의한 읽기
S_IWGRP 00020 그룹에 의한 쓰기
S_IXGRP 00010 그룹에 의한 실행/검색
S_IROTH 00004 다른 사람들에 의한 읽기
S_IWOTH 00002 다른 사람들에 의한 쓰기기
S_IXOTH 00001 다른 사람들에 의한 실행/검색

See also

References

  1. ^ Lua error: too many expensive function calls.
  2. ^ Lua error: too many expensive function calls.
  3. ^ Lua error: too many expensive function calls.
  4. ^ Lua error: too many expensive function calls.
  5. ^ Lua error: too many expensive function calls.
  6. ^ Lua error: too many expensive function calls.
  7. ^ Lua error: too many expensive function calls.
  8. ^ Lua error: too many expensive function calls.
  9. ^ Lua error: too many expensive function calls.

External links