'chmod' 명령어를 활용한 Linux 파일 권한 숙달하기
기호 모드와 숫자 모드, 안전한 기본값, 재귀적 변경, 특수 권한 비트를 통해 chmod를 배워보세요.
Linux 파일 권한 마스터하기: 'chmod' 명령어
Linux 파일 권한은 누가 파일을 읽고, 변경하거나 실행할 수 있는지를 결정합니다. 스크립트가 실행되지 않거나, 웹 서버가 파일을 읽을 수 없거나, 개인 키가 너무 열려 있어 거부될 때 chmod가 해결책의 일부인 경우가 많습니다.
chmod 명령어는 권한 비트를 변경합니다. u+x와 같이 읽기 쉬운 기호 모드나 755와 같은 간결한 숫자 모드를 사용할 수 있습니다.
권한 문자열 읽기
ls -l을 실행하여 파일의 유형과 권한을 확인하세요:
ls -l deploy.sh
출력 예시:
-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh
첫 번째 문자는 파일 유형입니다. 일반 파일은 -로 시작하고, 디렉토리는 d, 심볼릭 링크는 l로 시작합니다.
다음 아홉 문자는 세 가지 권한 그룹입니다:
- 사용자(User): 파일 소유자.
- 그룹(Group): 파일 그룹의 구성원.
- 기타 사용자(Others): 그 외 모든 사람.
각 그룹은 다음을 가질 수 있습니다:
r: 파일 내용 읽기, 또는 디렉토리 이름 나열.w: 파일 수정, 또는 디렉토리 내 항목 생성/삭제/이름 변경.x: 파일 실행, 또는 디렉토리 탐색.
디렉토리 실행 권한은 중요합니다. 디렉토리에 x 권한이 없으면, 다른 곳에서 일부 메타데이터를 나열할 수 있더라도 디렉토리에 들어가거나 이름으로 내부 파일에 접근할 수 없습니다.
작은 변경에는 기호 모드 사용
기호 구문은 다음과 같습니다:
chmod [대상][연산자][권한] 경로
대상은 u(사용자), g(그룹), o(기타 사용자), a(모두)가 될 수 있습니다. 연산자는 +(추가), -(제거), =(정확히 설정)입니다.
소유자에게 스크립트 실행 권한 부여:
chmod u+x deploy.sh
그룹이 공유 파일을 편집할 수 있도록 허용:
chmod g+w shared_document.txt
그룹과 기타 사용자의 쓰기 권한 제거:
chmod go-w config.yml
기타 사용자를 읽기 전용으로 설정하고, 기존 권한을 대체:
chmod o=r project_plan.txt
기호 모드는 지정한 비트만 변경하기 때문에 유용합니다.
전체 권한 설정에는 숫자 모드 사용
숫자 모드는 한 명령어로 사용자, 그룹, 기타 사용자의 권한을 설정합니다. 각 권한에는 값이 있습니다:
- 읽기:
4 - 쓰기:
2 - 실행:
1
각 그룹에 값을 더하세요:
| 모드 | 의미 |
|---|---|
7 |
rwx |
6 |
rw- |
5 |
r-x |
4 |
r-- |
0 |
--- |
일반 텍스트 파일을 소유자 읽기/쓰기, 나머지는 읽기 전용으로 설정:
chmod 644 important_file.txt
일반 디렉토리를 소유자가 관리할 수 있고, 다른 사람이 들어가서 읽을 수 있도록 설정:
chmod 755 public_assets
개인 키를 소유자만 읽고 쓸 수 있도록 잠금:
chmod 600 private_key.pem
임시 테스트 환경이 아니고 위험을 이해하지 않았다면 777을 피하세요:
chmod 777 scratch
777은 모든 로컬 사용자가 경로를 읽고, 쓰고, 실행하거나 탐색할 수 있게 합니다. 공유 시스템에서는 거의 허용되지 않습니다.
파일과 디렉토리를 다르게 처리
파일과 디렉토리는 일반적으로 다른 모드가 필요합니다. 파일은 주로 644를, 디렉토리는 주로 755를 사용합니다. 다음을 무분별하게 실행하면 모든 파일이 실행 가능해집니다:
chmod -R 755 web_root/
웹 디렉토리의 경우 더 안전한 패턴은:
find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +
그런 다음 실제로 필요한 스크립트에만 실행 권한을 추가하세요:
chmod 755 web_root/scripts/deploy.sh
특수 권한 비트는 신중하게 사용
숫자 모드는 특수 비트를 위해 네 번째 선행 숫자를 포함할 수 있습니다:
| 값 | 이름 | 일반적인 효과 |
|---|---|---|
4 |
SetUID | 실행 파일이 파일 소유자의 유효 사용자 ID로 실행됩니다. |
2 |
SetGID | 실행 파일이 파일 그룹의 유효 그룹 ID로 실행됩니다. 디렉토리에서는 새 항목이 디렉토리의 그룹을 상속받습니다. |
1 |
스티키 비트 | 디렉토리에서 사용자는 자신이 소유한 파일, 디렉토리 소유자가 소유한 파일, 또는 root만 삭제할 수 있습니다. |
공유 프로젝트 디렉토리에 SetGID 비트를 설정하여 새 파일이 디렉토리 그룹을 상속받도록:
chmod 2770 shared_group_files
공유 쓰기 가능 디렉토리에 스티키 비트 설정:
chmod 1777 /srv/shared-upload
전형적인 예는 /tmp로, 전 세계에서 쓰기 가능하지만 스티키 비트로 보호됩니다.
실행 파일에 SetUID와 SetGID를 사용할 때는 주의하세요. 프로그램이 쓰기 가능하거나, 설계가 잘못되었거나, 안전하지 않은 입력을 받으면 심각한 권한 상승 위험을 초래할 수 있습니다. 많은 Unix 계열 시스템은 보안상의 이유로 스크립트에서 SetUID를 무시합니다.
결과 확인
권한을 변경한 후 확인하세요:
ls -ld web_root web_root/index.html
숫자 모드를 원할 때는 stat을 사용하세요:
stat -c '%a %n' web_root/index.html
macOS에서는 stat 형식이 다릅니다:
stat -f '%Lp %N' web_root/index.html
핵심 요약
하나의 권한을 추가하거나 제거하려면 기호 chmod를 사용하세요. 전체 모드를 정확히 설정하려면 숫자 chmod를 사용하세요. 재귀적 변경은 신중하게 처리하고, 파일과 디렉토리를 분리하며, 진행하기 전에 ls -l 또는 stat으로 확인하세요.