'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으로 확인하세요.