리눅스 chmod
IT위키
더 많은 작업
해당 파일에 대한 권한을 변경한다.
- 유닉스와 리눅스 모두에서 명령어와 옵션이 같음
- 경로 : /bin/chmod
$ chmod [권한] [파일]
- 모드 : 새로운 모드(접근 권한)
- 파일명 : 모드를 변경하고 싶은 파일이나 디렉터리 이름
- -c, --changes : 변경된 파일 정보를 출력한다.
- -f, --silent, --quiet : 대부분의 에러 메시지를 출력하지 않는다.
- --help : 사용법을 출력한다.
- -R, --recursive : 하위 디렉터리에 있는 모든 디렉터리/파일을 변경한다.
- 재귀 옵션은 대문자 R 이다. 소문자 -r 은 재귀 옵션이 아니라 '모든 사용자의 읽기 권한 빼기' 모드(-r)로 읽히고, -a·-A 라는 옵션은 없다. data 디렉터리와 그 아래 모든 파일·디렉터리를 755 로 바꾸려면
chmod -R 755 data
- 재귀 옵션은 대문자 R 이다. 소문자 -r 은 재귀 옵션이 아니라 '모든 사용자의 읽기 권한 빼기' 모드(-r)로 읽히고, -a·-A 라는 옵션은 없다. data 디렉터리와 그 아래 모든 파일·디렉터리를 755 로 바꾸려면
- --reference=filename : 지정한 파일을 참조하여 퍼미션을 변경한다.
- -v, --verbose : 각 파일 정보를 상세히 출력한다.
- --version : 버전 정보를 출력한다.
- ex) chmod 707 log.txt
- ex) chmod u=rw o-r log.txt
- 권한에 대해선 리눅스 권한 문서를 참조
- 설정된 권한을 보기 위해선 리눅스 ls 명령어를 사용
누구 연산 권한 을 붙여 쓴다. 지정한 부분만 바뀌고 나머지 권한은 그대로 남는다.
| 자리 | 쓰는 글자 |
|---|---|
| 누구 | u(소유자), g(그룹), o(다른 사용자), a(모두) |
| 연산 | + (더하기), - (빼기), = (그 값으로 정하기) |
| 권한 | r, w, x, s(SetUID·SetGID), t(스티키 비트) |
$ chmod g-x test # 그룹의 실행 권한만 뺀다 $ chmod u+x,o-w test # 소유자 실행 추가, 다른 사용자 쓰기 제거 $ chmod o+t /share # 스티키 비트 설정 $ chmod a=r test # 모두 읽기만 $ chmod a+x,g-w lin.sh # rw-rw-r-- → rwxr-xr-x (모두에게 실행 추가, 그룹 쓰기 제거) $ chmod 755 lin.sh # 같은 결과를 숫자로. 664 는 rw-rw-r--, 644 는 rw-r--r-- 라 실행 권한이 없다 $ chmod u+rwx,go+rx lin.sh # 더하기만 하므로 그룹의 w 가 남아 rwxrwxr-x 가 된다
숫자 모드에서 세 자리만 주면 맨 앞(특수 권한) 자리를 0 으로 본다. 그래서 일반 파일에 세 자리 숫자를 주면 SetUID·SetGID·스티키 비트가 지워진다(디렉터리의 SetUID·SetGID 는 GNU chmod 가 남겨 둔다).
| 처음 | 명령 | 결과 |
|---|---|---|
| -rwxr-xr-t | chmod g-x test | -rwxr--r-t (그룹 x 만 빠지고 t 는 남는다) |
| -rwxr-xr-t | chmod 745 test | -rwxr--r-x (스티키 비트가 사라진다) |
| -rwxr-xr-t | chmod 1745 test | -rwxr--r-t (네 자리로 주면 g-x 와 같다) |
| -rwxr-xr-t | chmod 1755 test | -rwxr-xr-t (그대로다) |
- 특수 권한 자리 : 4 = SetUID, 2 = SetGID, 1 = 스티키 비트 → 리눅스 특수권한
숫자 세 자리는 차례로 소유자(User)·그룹(Group)·다른 사용자(Other)이고, 읽기 4 + 쓰기 2 + 실행 1 을 더한 값이다.
| 숫자 | 기호 | 뜻 |
|---|---|---|
| 755 | rwxr-xr-x | 소유자는 읽기·쓰기·실행, 그룹과 다른 사용자는 읽기·실행 |
| 775 | rwxrwxr-x | 그룹에게도 쓰기 권한을 준다 |
| 777 | rwxrwxrwx | 모두에게 모든 권한. 보안상 피한다 |
| 644 | rw-r--r-- | 일반 파일의 흔한 권한 |
| 555 | r-xr-xr-x | 아무도 쓸 수 없다(소유자도 쓰기 없음) |
-R이 없으면 지정한 디렉터리 자신의 권한만 바뀌고 그 안의 파일과 하위 디렉터리는 그대로다. 하위까지 한꺼번에 바꾸려면chmod -R 755 /var/www/upload처럼 쓴다.
- 특정 디렉터리 하위의 전체 파일/폴더에 대한 권한 변경을 위해선 -R 옵션을 이용한다.
$ chmod -R 755 ./*
- 그러나, 일반적으로 파일과 폴더는 같은 권한을 가지지 않음
- 파일은 666을 기본으로 하고, 폴더는 777을 기본으로 하며,
- umask가 022인 경우 파일은 644, 폴더는 755로 적용되는 등, 동일하게 설정하지 않는 것이 상식적
- 이렇게 파일과 폴더 전체를 대상으로 퍼미션을 변경하는 경우 chmod -R 을 사용하기 적절치 않다.
- find 명령어를 사용하는 것이 일반적이다.
$ find /var/www/html -type d -exec chmod 755 {} \;
$ find /var/www/html -type f -exec chmod 644 {} \;