맨위로가기

Chmod

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

`chmod`는 파일 및 디렉터리의 접근 권한을 변경하는 데 사용되는 유닉스 및 유닉스 계열 운영 체제의 명령어이다. 1970년대 초 유닉스 버전 1에 처음 등장했으며, GNU Core Utilities에 포함되어 널리 사용된다. `chmod`는 문자열 모드 또는 숫자 모드를 사용하여 권한을 설정하며, 옵션을 통해 재귀적으로 하위 디렉터리에도 적용할 수 있다. 문자열 모드는 사용자, 그룹, 기타 사용자에 대한 권한을 지정하고, 숫자 모드는 8진수를 사용하여 각 권한을 표현한다. 또한, setuid, setgid, sticky bit과 같은 특별한 모드 설정도 가능하다.

더 읽어볼만한 페이지

  • 유닉스 파일 시스템 관련 소프트웨어 - Filesystem in Userspace
    Filesystem in Userspace (FUSE)는 사용자 공간에서 파일 시스템을 구현하는 인터페이스로, 커널 수정 없이 파일 시스템 개발을 가능하게 하며, libfuse 라이브러리를 통해 다양한 운영체제 및 프로그래밍 언어를 지원한다.
  • 유닉스 파일 시스템 관련 소프트웨어 - Chattr
    `chattr`과 `chflags`는 리눅스와 BSD 계열 운영체제에서 파일 속성을 관리하는 명령어로, 파일 접근 권한 제어, 데이터 보안 강화, 파일 불변성 및 숨김 속성 설정 등을 통해 시스템 보안 및 데이터 무결성을 유지한다.
  • 운영 체제 보안 - NX 비트
    NX 비트는 하드웨어 기반 보안 기능으로, 메모리 페이지의 실행 권한을 제어하여 특정 영역에서 코드 실행을 막아 버퍼 오버플로 공격과 같은 보안 위협을 줄이는 데 사용되며, AMD에서 처음 도입 후 다양한 프로세서와 운영체제에서 DEP 등의 이름으로 구현되었다.
  • 운영 체제 보안 - 슈퍼유저
    슈퍼유저는 운영 체제에서 모든 권한을 가진 사용자를 지칭하며, 유닉스 계열에서는 root, 윈도우에서는 관리자 계정이 해당 역할을 수행한다.
  • 표준 유닉스 프로그램 - AWK
    AWK는 1977년에 개발된 텍스트 처리 및 프로그래밍 언어로, 유닉스 환경에서 텍스트 처리를 위해 설계되었으며 정규 표현식 처리 기능을 통해 텍스트 분석, 데이터 추출, 보고서 생성 등 다양한 작업을 수행한다.
  • 표준 유닉스 프로그램 - Rm (유닉스)
    유닉스 명령어 `rm`은 파일을 삭제하는 데 사용되며, 옵션을 통해 삭제 동작을 제어하고 디렉터리를 재귀적으로 삭제할 수 있지만, 잘못 사용하면 시스템에 심각한 손상을 초래할 수 있어 주의가 필요하며 안전 장치나 휴지통 기능 등의 대안이 존재한다.
Chmod - [IT 관련 정보]에 관한 문서
개요
종류명령어
개발자AT&T 벨 연구소
최초 출시일1971년 11월 3일
운영 체제유닉스, 유닉스 계열, 플랜 9, 인페르노, IBM i
플랫폼크로스 플랫폼
장르명령어
라이선스GPLv3 (coreutils)
라이선스 (Plan 9)MIT 허가서
웹사이트chmod 튜토리얼 (catcode.com)

2. 역사

`chmod` 명령어는 AT&T 유닉스 버전 1에서 처음 등장했으며, 오늘날에도 여전히 유닉스 계열 운영 체제에서 사용되고 있다.[3] 시스템 사용자와 유형이 증가함에 따라 유연성을 높이기 위해 가장 기본적인 모드 외에도 접근 제어 목록이 많은 파일 시스템에 추가되었다.[4]

GNU Core Utilities에 포함된 `chmod` 버전은 David MacKenzie와 Jim Meyering이 작성했다.[5] 이 명령어는 일반적인 GNU 유닉스 유사 유틸리티의 네이티브 Win32 포트인 UnxUtils 컬렉션의 일부로 마이크로소프트 윈도우용 별도 패키지로 제공된다.[6] `chmod` 명령어는 IBM i 운영 체제로도 이식되었다.[6]

3. 사용법

`chmod` 명령어의 기본 형식은 다음과 같다.

```bash

$ chmod [옵션] 모드[,모드] 파일1 [파일2 ...]

```

현재 파일 또는 디렉터리의 권한 설정을 확인하려면 `ls -l` 명령어를 사용한다.[7]

```bash

$ ls -l ''file''

```

`chmod` 명령어에서 `u`는 파일 소유자(user)를 나타낸다. "other"와의 혼동을 피하기 위해 "u"를 사용한다. 파일 권한을 변경할 수 있는 사람은 파일 소유자 또는 슈퍼유저(root)뿐이다.

일반적으로 사용되는 옵션은 다음과 같다.


  • `-R`: 재귀, 즉 하위 디렉터리의 객체를 포함한다.
  • `-v`: 상세, 변경된 객체를 표시한다(변경되지 않은 객체는 표시되지 않는다).


심볼릭 링크가 지정된 경우 대상 객체에 영향을 미친다. 심볼릭 링크 자체와 직접 관련된 파일 모드는 일반적으로 사용되지 않는다.

파일 모드를 보려면 ls 또는 stat 명령어를 사용할 수 있다.

```console

$ 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 -l` 출력의 첫 번째 문자는 객체 유형을 나타낸다. 하이픈은 일반 파일을 나타낸다. 위 예시에서 `findPhoneNumbers.sh` 스크립트는 소유자 `dgerman`이 읽기, 쓰기, 실행할 수 있으며, `staff` 그룹의 구성원은 읽고 실행할 수 있으며, 다른 사용자는 읽기만 할 수 있다.

`chmod` 권한은 다음과 같이 세 그룹으로 나뉜다.

예: `rwxr-x---`

  • 가장 왼쪽 세 글자 `rwx`는 사용자(파일 소유자)에 대한 권한이다.
  • 가운데 세 글자 `r-x`는 그룹(파일을 소유한 그룹)에 대한 권한이다.
  • 가장 오른쪽 세 글자 `---`는 기타(파일 소유자가 아니고 그룹의 구성원도 아닌 사용자)에 대한 권한이다. 위 예시에서 기타 클래스에 속하는 사용자는 파일에 접근할 권한이 없다.

4. 옵션


  • R: 재귀적으로 파일들과 디렉터리들의 모드를 바꾼다.[1]

  • v: 자세한 모드; 실행되고 있는 모든 파일을 나열한다.[1]

5. 모드 지정 방식

`chmod` 명령어는 권한을 지정하기 위해 문자열 모드와 숫자 모드 두 가지 방식을 제공한다.[8]

하위 섹션에서 각 방식에 대해 자세히 설명한다.

5. 1. 문자열 모드

`chmod` 유틸리티는 파일이나 디렉터리의 접근 권한(모드)을 변경하는 데 사용되며, 기호 모드를 사용하여 권한을 지정할 수 있다. 기호 모드는 사용자 클래스, 연산자, 권한 종류의 세 부분으로 구성된 문자열로 표현된다.[7]

  • 사용자 클래스 (References): 권한이 적용되는 대상을 나타낸다. 지정하지 않으면 '모든 사용자'를 의미한다.

참조클래스설명
`u`사용자파일 소유자
`g`그룹파일 소유자가 속한 그룹의 구성원
`o`기타파일 소유자도, 그룹 구성원도 아닌 사용자
`a`모두사용자, 그룹, 기타 모두 (`ugo`와 동일)


  • 연산자 (Operator): 권한 변경 방식을 지정한다.[8]

연산자설명
`+`추가지정된 권한을 지정된 사용자 클래스에 추가
`-`제거지정된 사용자 클래스에서 지정된 권한을 제거
`=`설정지정된 사용자 클래스의 권한을 지정된 권한으로 설정 (다른 권한은 제거)


  • 권한 종류 (Modes): 부여하거나 제거할 권한을 나타낸다.

모드이름설명
`r`읽기파일 읽기 또는 디렉터리 내용 보기
`w`쓰기파일 또는 디렉터리에 쓰기
`x`실행파일 실행 또는 디렉터리 접근
`X`특수 실행디렉터리: 실행 권한 부여, 파일: 실행 권한 비트가 하나 이상 설정된 경우에만 실행 권한 부여
`s`setuid/gid특별한 모드들 참조
`t`스티키특별한 모드들 참조



여러 변경 사항은 쉼표로 구분하여 지정할 수 있다.
예시:


  • `sample` 파일/디렉터리의 사용자(`u`) 및 그룹(`g`)에 읽기(`r`) 및 쓰기(`w`) 권한 추가:[9]


```bash

chmod ug+rw sample

```

  • `sample` 파일의 모든 사용자(`a`)에 대해 읽기(`r`), 쓰기(`w`), 실행(`x`) 권한 제거:


```bash

chmod a-rwx sample

```

  • `sample` 파일의 사용자(`u`) 및 그룹(`g`) 권한을 읽기(`r`) 및 실행(`x`) 전용으로 변경 (쓰기 권한 없음):


```bash

chmod ug=rx sample

```

  • 사용자(`u`)에게는 쓰기 권한을, 다른 모든 사용자(`go`)에게는 읽기 권한만 부여:

```bash

chmod u=rw,go=r sample

5. 2. 숫자 모드

`chmod` 명령어는 세 자리 혹은 네 자리의 8진수를 사용하여 파일이나 디렉터리의 접근 권한을 설정하는 숫자 모드를 지원한다. 각 자릿수는 사용자 클래스별 권한을 나타내며, 읽기(4), 쓰기(2), 실행(1) 권한의 합으로 계산된다.

예를 들어, `chmod 664 sample` 명령어는 다음과 같이 해석된다.[7]

  • 6: 사용자(파일 소유자)에게 읽기(4) + 쓰기(2) 권한 부여.
  • 6: 그룹에게 읽기(4) + 쓰기(2) 권한 부여.
  • 4: 기타 사용자에게 읽기(4) 권한만 부여.


아래 표는 각 권한과 숫자의 조합을 나타낸다.

#합계rwx권한
74(r) + 2(w) + 1(x)rwx읽기, 쓰기 및 실행
64(r) + 2(w)rw-읽기 및 쓰기
54(r) + 1(x)r-x읽기 및 실행
44(r)r--읽기 전용
32(w) + 1(x)-wx쓰기 및 실행
22(w)-w-쓰기 전용
11(x)--x실행 전용
00---없음



다음은 숫자 모드 사용 예시이다.

```bash

$ chmod 664 sample

```

위 명령어는 `sample` 파일의 setuid, setgid, 스틱 비트가 설정되지 않은 경우, 아래와 같이 표현할 수 있다.

```bash

$ chmod 0664 sample

```

이는 심볼릭 모드를 사용하여 다음과 같이 표현할 수도 있다.[8]

```bash

$ chmod +r,-x,ug+w sample

6. 특별한 모드

`chmod` 명령어는 파일이나 디렉터리의 특별한 모드나 추가적인 허가 역시 변경할 수 있다. 기호적인 모드에서 ''setuid''나 ''setgid'' 모드를 나타낼 때는 `s`를 사용하고, ''sticky'' 모드를 나타낼 때는 `t`를 사용한다. 이 모드들은 다른 클래스들이 지정되었는지 여부와 관계없이 적절한 클래스에만 적용된다.

대부분의 운영 체제는 8진법 모드를 사용하여 특별한 모드를 지정하는 것을 지원하지만, 일부 운영 체제에서는 그렇지 않다. 이러한 시스템에서는 오직 기호적인 모드만 사용할 수 있다.

7. 예제

다음은 `chmod` 명령어 사용 예시이다.

명령어설명
chmod +r 파일모든 사용자에게 읽기 권한을 추가한다.
chmod -x 파일모든 사용자에게서 실행 권한을 제거한다.
chmod u=rw,go= 파일파일 소유자에게는 읽기/쓰기 권한을 부여하고, 그룹과 기타 사용자에게는 모든 권한을 제거한다.
chmod +rw 파일모든 사용자에게 읽기/쓰기 권한을 추가한다.
chmod -R u+w,go-w 디렉토리명지정된 디렉토리와 그 하위 모든 파일에 대해 소유자에게는 쓰기 권한을 추가하고, 그룹과 기타 사용자에게서는 쓰기 권한을 제거한다.
chmod 0 파일모든 사용자에게서 모든 권한을 제거한다.
chmod 666 파일모든 사용자에게 읽기/쓰기 권한을 부여한다.
chmod 0755 파일소유자에게는 읽기/쓰기/실행 권한(4+2+1), 그룹과 기타 사용자에게는 읽기/실행 권한(4+1)을 부여한다. 0은 특별한 모드를 지정하지 않음을 의미한다.
chmod 4755 파일사용자 ID 설정을 지정하고, 소유자에게는 읽기/쓰기/실행 권한, 그룹과 기타 사용자에게는 읽기/실행 권한을 부여한다.
find 경로/ -type d -exec chmod a-x {} \;`경로/` 하위의 모든 디렉터리에 대해 실행 권한을 제거한다. (파일에 대해서만 적용하려면 `-type f`를 사용한다.)
find 경로/ -type d -exec chmod a+x {} \;삼바(Samba) 쓰기 권한을 재설정한 경우, 모든 사용자가 디렉터리를 열람(예: ls)할 수 있도록 허용한다.
chmod -R u+rwX,g-rwx,o-rwx 디렉토리소유자에게는 디렉터리에 대해 읽기/쓰기/실행 권한, 파일에 대해 읽기/쓰기 권한을 부여하고, 그룹과 기타 사용자에게는 아무 권한도 부여하지 않는다.
chmod -R a-x+X 디렉토리디렉터리 트리 안의 모든 파일에 대한 실행 권한을 제거하는 한편, 디렉터리 열람은 허용한다.


  • 디렉터리의 그룹(g) 접근 모드에 쓰기 권한(w)을 추가하여 동일한 그룹의 사용자가 파일을 추가할 수 있도록 허용하는 예시:



$ ls -ld dir # chmod 이전 접근 모드 표시

drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir

$ chmod g+w dir

$ ls -ld dir # chmod 이후 접근 모드 표시

drwxrwxr-x 2 jsmitt northregion 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 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile


  • 특정 파일에 대한 사용자(u)와 그룹(ug)의 권한을 읽기 및 실행(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 ebowman northregion 96 Apr 8 12:53 referenceLib


  • 파일 또는 디렉터리의 사용자 및 그룹 클래스에 읽기 및 쓰기 권한을 추가하는 예시:



$ chmod ug+rw sample

$ ls -ld sample

drw-rw---- 2 rsanchez budget 96 Dec 8 12:53 sample


  • 모든 권한을 제거하여 아무도 파일을 읽거나, 쓰거나, 실행할 수 없도록 하는 예시:



$ chmod a-rwx sample

$ ls -l sample

  • --------- 2 rswven planning 96 Dec 8 12:53 sample


  • 파일에 대한 사용자 및 그룹의 권한을 읽기 및 실행 전용으로 변경(쓰기 권한 없음)하는 예시:



$ # 명령어 전 샘플 파일 권한

$ 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 oschultz warehousing 96 Dec 8 12:53 NJ_DBs


  • 하나의 명령으로 사용자(u)에 대해 항목을 쓰기 가능하게 하고 다른 모든 사용자에 대해서는 읽기 전용으로 설정하는 예시:



$ chmod u=rw,go=r sample

$ ls -ld sample

drw-r--r-- 2 oschultz warehousing 96 Dec 8 12:53 sample



명령어설명
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소유자에 대해 디렉토리 docs 및 모든 내용물에 쓰기 권한을 추가하고, 그룹 및 기타 사용자에 대해 쓰기 권한을 제거한다.
chmod ug=rw groupAgreements.txt사용자 및 그룹에 읽기 및 쓰기 권한을 설정한다.
chmod 664 global.txt사용자 및 그룹에 읽기 및 쓰기 권한을 설정하고, 기타 사용자에게 읽기 권한을 제공한다.
chmod 744 Show_myCV.sh사용자에게 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에게 읽기 권한을 설정한다.
chmod 1755 findReslts.sh스티키 비트를 설정하고 (스크립트가 메모리에 유지되도록 제안), 소유자에 대해 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에 대해 읽기 및 실행 권한을 설정한다.
chmod 4755 setCtrls.shUID를 설정하고, 사용자에게 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에게 읽기 및 실행 권한을 설정한다.
chmod 2755 setCtrls.shGID를 설정하고, 사용자에게 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에게 읽기 및 실행 권한을 설정한다.
chmod -R u+rw,g-,o-rx privateStuffprivateStuff의 모든 파일 및 디렉토리에 대해 사용자에게 읽기, 쓰기 권한을 추가하고, 그룹에 읽기, 쓰기 및 실행 권한을 제거하고, 기타 사용자에게 읽기 및 실행 권한을 제거한다.
chmod -R a-x+X publicDocspublicDocs의 모든 파일 및 디렉토리에 대해 모든 클래스에서 실행 권한을 제거하고 모든 클래스에 특수 실행 권한을 추가한다.


참조

[1] 문서 listing files
[2] 웹사이트 Tutorial for chmod http://catcode.com/t[...]
[3] 웹사이트 AIX 5.3 System management http://www-01.ibm.co[...] IBM 2015-08-30
[4] 웹사이트 chmod(1): change file mode bits - Linux man page https://linux.die.ne[...]
[5] 웹사이트 Native Win32 ports of some GNU utilities http://unxutils.sour[...]
[6] 웹사이트 IBM System i Version 7.2 Programming Qshell https://www.ibm.com/[...] 2020-09-05
[7] 웹사이트 chmod Man Page with examples and calculator - Linux - SS64.com https://ss64.com/bas[...]
[8] 웹사이트 AIX 5.5 Commands Reference http://www-01.ibm.co[...] IBM 2015-08-30
[9] 웹사이트 Permissions masking with umask, chmod, 777 octal permissions http://teaching.idal[...]
[10] 웹사이트 パーミッションなどを設定する!chmodコマンドの詳細まとめ【Linuxコマンド集】 https://eng-entrance[...] 2023-06-06



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com