리눅스에서 chmod
명령어는 파일 접근, 디렉토리 탐색, 스크립트 실행 권한을 사용자별로 제어하는 데 필수적입니다. 이 명령을 통해 파일 권한을 수정할 수 있으며, 처음에는 다소 복잡해 보일 수 있지만, 그 작동 원리를 이해하면 매우 간단합니다.
chmod: 파일 권한 조정
리눅스 시스템에서 파일 또는 디렉토리에 대한 사용자 작업 권한은 권한 집합으로 관리됩니다. 이러한 권한은 세 가지 그룹으로 나뉩니다. 첫째, 파일 소유자에 대한 권한, 둘째, 파일 그룹 구성원에 대한 권한, 그리고 마지막으로 그 외 모든 사용자에 대한 권한입니다.
각 권한 집합은 파일이나 디렉토리에서 수행할 수 있는 작업을 결정합니다. 파일의 경우 읽기, 수정, 스크립트 실행 등이 있으며, 디렉토리의 경우 디렉토리 접근 및 파일 생성/수정 권한을 제어합니다. chmod
명령어를 사용하면 이러한 권한을 개별적으로 설정할 수 있습니다. 각 권한 설정 방법을 참고하시고, 파일이나 디렉토리의 권한 확인에는 ls
명령어를 활용할 수 있습니다.
파일 권한 이해 및 확인
ls -l
명령어를 사용하면 파일 및 디렉토리의 권한을 자세히 확인할 수 있습니다.
ls -l
각 행의 첫 번째 문자는 항목 유형을 나타냅니다. ‘-‘는 파일, ‘d’는 디렉토리를 의미합니다. 그 뒤의 9개의 문자는 세 그룹의 권한 설정을 보여줍니다.
처음 세 문자는 파일 소유자의 권한, 다음 세 문자는 파일 그룹 구성원의 권한, 마지막 세 문자는 그 외 사용자의 권한을 나타냅니다.
각 권한 그룹은 세 개의 문자로 구성됩니다. 문자는 해당 권한의 존재 여부를 나타내며, ‘-‘는 권한 없음, ‘r’, ‘w’, ‘x’는 각 권한을 의미합니다.
각 문자의 의미는 다음과 같습니다.
r
: 읽기 권한. 파일 내용을 볼 수 있습니다.w
: 쓰기 권한. 파일 편집, 수정, 삭제가 가능합니다.x
: 실행 권한. 파일이 스크립트나 프로그램일 경우 실행할 수 있습니다.
예를 들어:
---
: 모든 권한이 없음.rwx
: 모든 권한이 있음(읽기, 쓰기, 실행).
예시 화면에서 첫 번째 행은 ‘d’로 시작하며, “archive”라는 디렉토리를 나타냅니다. 소유자는 “dave”, 그룹은 “dave”입니다.
첫 세 문자 ‘rwx’는 소유자 “dave”에게 모든 권한이 있음을 보여줍니다. 다음 ‘r-x’는 그룹 구성원이 읽기와 실행 권한을 가짐을 의미하며, 마지막 ‘r-x’는 그 외 사용자가 읽기와 실행 권한을 가지고 있음을 나타냅니다.
요약하면, 그룹 구성원 및 그 외 사용자는 읽기와 실행 권한을 가지고 있고, 소유자 “dave”는 쓰기 권한도 가지고 있습니다.
대부분의 파일에서 “dave”와 “dave” 그룹 구성원은 읽기와 쓰기 권한을, 그 외는 읽기 권한만 가집니다. 하지만 “mh.sh” 스크립트 파일의 경우 소유자와 그룹 구성원은 읽기, 쓰기, 실행 권한을, 그 외는 읽기 및 실행 권한을 가집니다.
권한 설정 문법
chmod
명령어로 권한을 설정하려면 다음과 같은 정보를 제공해야 합니다.
- 대상: 권한을 변경할 파일 또는 디렉토리.
- 동작: 권한 추가 또는 제거 여부.
- 권한: 어떤 권한을 설정할 것인지(읽기, 쓰기, 실행).
이러한 값은 “u+x”와 같은 짧은 권한 문자열로 표현됩니다. 여기서 “u”는 사용자, “+”는 추가, “x”는 실행 권한을 의미합니다.
사용 가능한 “who” 값:
u
: 파일 소유자.g
: 파일 그룹 구성원.o
: 그 외 사용자.a
: 모든 사용자.
값을 지정하지 않으면 a
로 간주합니다.
사용 가능한 “what” 값:
-
: 권한 제거.+
: 권한 추가 (기존 권한에 추가).=
: 권한 설정 (다른 권한 제거 후 설정).
사용 가능한 “which” 값:
r
: 읽기 권한.w
: 쓰기 권한.x
: 실행 권한.
권한 설정 및 변경
모든 사용자에게 모든 권한이 있는 파일이 있다고 가정해 보겠습니다.
ls -l new_file.txt
“dave” 사용자는 읽기와 쓰기 권한을, 그룹과 그 외 사용자는 읽기 권한만을 갖게 하려면 다음 명령을 사용합니다.
chmod u=rw,og=r new_file.txt
“=” 연산자는 기존 권한을 제거하고 지정된 권한만 설정함을 의미합니다.
새 권한을 확인하면 다음과 같습니다.
ls -l new_file.txt
기존 권한이 제거되고 새 권한이 설정되었습니다.
기존 설정을 유지하면서 권한을 추가하는 방법도 있습니다. 스크립트 파일이 있고, 모든 사용자가 실행할 수 있게 만들어야 합니다. 현재 권한은 다음과 같습니다.
ls -l new_script.sh
모든 사용자에게 실행 권한을 추가하려면 다음 명령을 사용합니다.
chmod a+x new_script.sh
권한을 확인하면 실행 권한이 추가되고 기존 권한은 유지됩니다.
ls -l new_script.sh
a+x
에서 a
를 생략해도 동일한 결과가 나타납니다. 다음 명령도 같습니다.
chmod +x new_script.sh
여러 파일 권한 설정
여러 파일에 동시에 권한을 적용할 수 있습니다.
현재 디렉토리의 파일은 다음과 같습니다.
ls -l
확장자가 “.page”인 파일에서 “그 외” 사용자의 쓰기 권한을 제거하려면 다음 명령을 사용합니다.
chmod o-r *.page
변경 결과를 확인해 봅시다.
ls -l
보시다시피 “.page” 파일에서 “그 외” 사용자의 읽기 권한이 제거되었습니다. 다른 파일은 영향을 받지 않았습니다.
하위 디렉토리의 파일까지 포함하려면 -R
옵션을 사용합니다.
chmod -R o-r *.page
숫자 단축 표기법
chmod
를 사용하는 또 다른 방법은 숫자 표기법을 이용하는 것입니다. 소유자, 그룹, 그 외 사용자에 부여하려는 권한을 세 자리 숫자로 나타냅니다. 왼쪽 숫자는 소유자, 중간 숫자는 그룹, 오른쪽 숫자는 그 외 사용자의 권한을 의미합니다.
숫자와 각 숫자가 나타내는 권한은 다음과 같습니다.
- 0: (000) 권한 없음.
- 1: (001) 실행 권한.
- 2: (010) 쓰기 권한.
- 3: (011) 쓰기 및 실행 권한.
- 4: (100) 읽기 권한.
- 5: (101) 읽기 및 실행 권한.
- 6: (110) 읽기 및 쓰기 권한.
- 7: (111) 읽기, 쓰기, 실행 권한.
각 권한은 이진 비트로 표시되며, 십진수 값은 이를 조합하여 나타냅니다. 예를 들어 이진수 101인 5는 읽기 및 실행 권한을 의미하며, 010인 2는 쓰기 권한을 의미합니다.
이 방법을 사용하면 원하는 권한을 설정할 수 있습니다. 기존 권한에 추가하는 것이 아니라 기존 권한을 대체합니다. 따라서 이미 읽기와 쓰기 권한이 있는 상태에서 실행 권한을 추가하려면 7(111)을 사용해야 합니다. 1(001)을 사용하면 읽기와 쓰기 권한이 제거되고 실행 권한만 남게 됩니다.
이제 “.page” 파일의 “그 외” 사용자에게 읽기 권한을 다시 추가하고, 사용자 및 그룹 권한도 설정해야 합니다. 사용자 및 그룹은 이미 6(110)의 읽기 및 쓰기 권한을 가지고 있으므로, “그 외” 사용자에게는 읽기 권한만 부여해야 하므로 4(100)로 설정해야 합니다.
다음 명령은 이를 수행합니다.
chmod 664 *.page
이제 사용자, 그룹 구성원, 그 외 사용자에게 필요한 권한이 설정되었습니다. 사용자 및 그룹 권한은 이전과 동일하게 유지되고 “그 외” 사용자에게 읽기 권한이 복원됩니다.
ls -l
고급 옵션
chmod
매뉴얼 페이지를 참조하면 SETUID, SETGID 비트와 같은 고급 옵션 및 제한된 삭제 비트 등의 추가 정보를 확인할 수 있습니다.
하지만 대부분의 경우, 여기에서 설명한 옵션만으로도 chmod
를 사용하는 데 충분합니다.