Chmod
"오늘의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]
`chmod` 명령어의 기본 형식은 다음과 같다.
GNU Core Utilities에 포함된 `chmod` 버전은 David MacKenzie와 Jim Meyering이 작성했다.[5] 이 명령어는 일반적인 GNU 유닉스 유사 유틸리티의 네이티브 Win32 포트인 UnxUtils 컬렉션의 일부로 마이크로소프트 윈도우용 별도 패키지로 제공된다.[6] `chmod` 명령어는 IBM i 운영 체제로도 이식되었다.[6]
3. 사용법
```bash
$ chmod [옵션] 모드[,모드] 파일1 [파일2 ...]
```
현재 파일 또는 디렉터리의 권한 설정을 확인하려면 `ls -l` 명령어를 사용한다.[7]
```bash
$ ls -l ''file''
```
`chmod` 명령어에서 `u`는 파일 소유자(user)를 나타낸다. "other"와의 혼동을 피하기 위해 "u"를 사용한다. 파일 권한을 변경할 수 있는 사람은 파일 소유자 또는 슈퍼유저(root)뿐이다.
일반적으로 사용되는 옵션은 다음과 같다.
심볼릭 링크가 지정된 경우 대상 객체에 영향을 미친다. 심볼릭 링크 자체와 직접 관련된 파일 모드는 일반적으로 사용되지 않는다.
파일 모드를 보려면 ls 또는 stat 명령어를 사용할 수 있다.
```console
$ ls -l findPhoneNumbers.sh
$ stat -c %a findPhoneNumbers.sh
754
```
`r`, `w`, `x`는 각각 읽기, 쓰기, 실행 권한을 나타낸다. `ls -l` 출력의 첫 번째 문자는 객체 유형을 나타낸다. 하이픈은 일반 파일을 나타낸다. 위 예시에서 `findPhoneNumbers.sh` 스크립트는 소유자 `dgerman`이 읽기, 쓰기, 실행할 수 있으며, `staff` 그룹의 구성원은 읽고 실행할 수 있으며, 다른 사용자는 읽기만 할 수 있다.
`chmod` 권한은 다음과 같이 세 그룹으로 나뉜다.
예: `rwxr-x---`
4. 옵션
- R: 재귀적으로 파일들과 디렉터리들의 모드를 바꾼다.[1]
5. 모드 지정 방식
`chmod` 명령어는 권한을 지정하기 위해 문자열 모드와 숫자 모드 두 가지 방식을 제공한다.[8]
하위 섹션에서 각 방식에 대해 자세히 설명한다.
5. 1. 문자열 모드
`chmod` 유틸리티는 파일이나 디렉터리의 접근 권한(모드)을 변경하는 데 사용되며, 기호 모드를 사용하여 권한을 지정할 수 있다. 기호 모드는 사용자 클래스, 연산자, 권한 종류의 세 부분으로 구성된 문자열로 표현된다.[7]- 사용자 클래스 (References): 권한이 적용되는 대상을 나타낸다. 지정하지 않으면 '모든 사용자'를 의미한다.
참조 | 클래스 | 설명 |
---|---|---|
`u` | 사용자 | 파일 소유자 |
`g` | 그룹 | 파일 소유자가 속한 그룹의 구성원 |
`o` | 기타 | 파일 소유자도, 그룹 구성원도 아닌 사용자 |
`a` | 모두 | 사용자, 그룹, 기타 모두 (`ugo`와 동일) |
연산자 | 설명 | |
---|---|---|
`+` | 추가 | 지정된 권한을 지정된 사용자 클래스에 추가 |
`-` | 제거 | 지정된 사용자 클래스에서 지정된 권한을 제거 |
`=` | 설정 | 지정된 사용자 클래스의 권한을 지정된 권한으로 설정 (다른 권한은 제거) |
- 권한 종류 (Modes): 부여하거나 제거할 권한을 나타낸다.
모드 | 이름 | 설명 |
---|---|---|
`r` | 읽기 | 파일 읽기 또는 디렉터리 내용 보기 |
`w` | 쓰기 | 파일 또는 디렉터리에 쓰기 |
`x` | 실행 | 파일 실행 또는 디렉터리 접근 |
`X` | 특수 실행 | 디렉터리: 실행 권한 부여, 파일: 실행 권한 비트가 하나 이상 설정된 경우에만 실행 권한 부여 |
`s` | setuid/gid | 특별한 모드들 참조 |
`t` | 스티키 | 특별한 모드들 참조 |
여러 변경 사항은 쉼표로 구분하여 지정할 수 있다.
예시:
```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 | 권한 |
---|---|---|---|
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 | --- | 없음 |
다음은 숫자 모드 사용 예시이다.
```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.sh | UID를 설정하고, 사용자에게 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에게 읽기 및 실행 권한을 설정한다. |
chmod 2755 setCtrls.sh | GID를 설정하고, 사용자에게 읽기, 쓰기 및 실행 권한을 설정하고, 그룹 및 기타 사용자에게 읽기 및 실행 권한을 설정한다. |
chmod -R u+rw,g-,o-rx privateStuff | privateStuff의 모든 파일 및 디렉토리에 대해 사용자에게 읽기, 쓰기 권한을 추가하고, 그룹에 읽기, 쓰기 및 실행 권한을 제거하고, 기타 사용자에게 읽기 및 실행 권한을 제거한다. |
chmod -R a-x+X publicDocs | publicDocs의 모든 파일 및 디렉토리에 대해 모든 클래스에서 실행 권한을 제거하고 모든 클래스에 특수 실행 권한을 추가한다. |
참조
[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