이 글에서는 사용자(user), 그룹(group), 기타 사용자(others)에게 모든 권한을 부여하는 리눅스 명령어 chmod 777에 대해 자세히 알아봅니다.
리눅스를 막 배우기 시작한 초보 사용자, 웹 개발자, 시스템 관리자라면 아래 명령어를 입력하라고 안내받은 적이 있을 겁니다.
chmod 777 /path/to/file/or/folder
시스템에서 명령어를 실행할 때(특히 root 권한으로 작업할 때는 더욱!) 해당 명령어가 정확히 무슨 일을 하는지 반드시 이해하고 실행해야 합니다. 그렇다면 chmod 777은 대체 어떤 의미일까요?
리눅스의 권한(Permissions) 체계
ls – l 명령어 실행 예시
위 스크린샷은 다음 명령어를 실행한 결과입니다.
ls -l
ls -l 명령어는 현재 디렉터리의 내용을 긴 목록(long listing) 형식으로 출력하며, 각 파일과 디렉터리의 권한 정보와 수정 날짜를 함께 보여줍니다.
- 첫 번째 열: 파일 또는 디렉터리에 할당된 권한 정보
- 두 번째 열: 포함된 파일 또는 폴더의 개수
- 세 번째·네 번째 열: 해당 파일에 대한 권한을 가진 사용자(user)와 그룹(group)
- 다섯 번째·여섯 번째 열: 파일 크기와 마지막 수정 날짜
- 마지막 열: 파일 이름
이 글에서 특히 중요한 것은 첫 번째, 세 번째, 네 번째 열입니다. 바로 이 세 열이 권한과 직결되는 정보를 담고 있습니다.
스크린샷에 보이는 폴더들은 linuxscrew 사용자의 홈 디렉터리에 있는 항목들로, 모두 다음과 같은 권한을 가지고 있습니다.
drwxr-xr-x
그리고 소유자(owner)와 그룹(group) 모두 linuxscrew 사용자로 지정되어 있습니다.
drwxr-xr-x 문자열 해석하기
drwxr-xr-x는 4개의 정보 조각으로 구성되어 있으며, 그중 3개가 권한과 관련되어 있습니다.
| d | rwx | r-x | r-x |
|---|---|---|---|
| 디렉터리임을 나타냄 | 소유자는 읽기, 쓰기, 실행 가능 | 그룹은 읽기, 실행 가능 | 기타 사용자는 읽기, 실행 가능 |
- 첫 번째 문자: 파일 유형을 나타냅니다. d이면 디렉터리, -이면 일반 파일입니다.
- 2~4번째 문자: 사용자(user)의 권한
- 5~7번째 문자: 그룹(group)의 권한
- 8~10번째 문자: 기타 사용자(others)의 권한
각 블록 안의 문자가 의미하는 바는 다음과 같습니다.
- '-' : 권한 없음 (거부됨)
- 'r' : 읽기(read) 권한
- 'w' : 쓰기(write) 권한
- 'x' : 실행(execute) 권한
실행(execute) 자리의 특수 값
실행 권한 자리에는 몇 가지 특수 문자가 들어갈 수도 있습니다.
- 's' — setuid 비트로, 사용자(user) 또는 그룹(group) 권한 자리에 나타납니다. 파일을 실행할 수 있는 사용자는 파일 소유자 및/또는 파일 그룹의 권한으로 실행하게 됩니다. x가 설정된 상태이므로 파일은 실행 가능합니다.
- 'S' — 's'와 동일하지만 파일 자체는 실행 불가능합니다.
- 't' — 스티키(sticky) 비트로, 기타 사용자(others) 권한 자리에 나타납니다. 파일이 스티키 상태가 되어 오직 소유자만 파일 또는 그 안의 파일들을 이름 변경하거나 삭제할 수 있습니다. 그룹과 기타 사용자는 불가능합니다! 이 역시 x가 설정된 상태이므로 파일은 실행 가능합니다.
- 'T' — 't'와 동일하지만 파일 자체는 실행 불가능합니다.
참고: 첫 번째 자리에 올 수 있는 파일 유형
완전한 이해를 위해 첫 번째 문자 자리에 올 수 있는 다양한 파일 유형도 정리해 보겠습니다.
- '-' : 일반 파일
- 'b' : 블록 특수 파일(block special file)
- 'c' : 문자 특수 파일(character special file)
- 'C' : 고성능("연속 데이터") 파일
- 'd' : 디렉터리
- 'D' : 도어(door, Solaris 2.5 이상)
- 'l' : 심볼릭 링크(symbolic link)
- 'M' : 오프라인("migrated") 파일 (Cray DMF)
- 'n' : 네트워크 특수 파일 (HP-UX)
- 'p' : FIFO (명명된 파이프)
- 'P' : 포트(port, Solaris 10 이상)
- 's' : 소켓(socket)
- '?' : 그 외의 파일 유형
777이라는 숫자의 의미
권한을 지정할 때 입력을 더 빠르게 하기 위해, 위에서 살펴본 문자 조합을 숫자로 대신 표현할 수 있습니다.
- 7 — 모든 권한 (읽기 + 쓰기 + 실행)
- 6 — 읽기 + 쓰기
- 5 — 읽기 + 실행
- 4 — 읽기 전용
- 3 — 실행 + 쓰기
- 2 — 쓰기 전용
- 1 — 실행 전용
- 0 — 권한 없음
따라서 사용자(user), 그룹(group), 기타 사용자(others) 모두에게 모든 권한을 부여하려면 권한 값을 777로 지정하면 됩니다.
chmod 명령어 사용법
chmod(Change Mode, 모드 변경) 명령어는 파일에 권한을 적용할 때 사용합니다.
chmod 777
다음 명령어를 실행하면,
chmod 777 /path/to/file/or/folder
…해당 파일 또는 폴더의 소유자(user), 그룹(group), 기타 사용자(시스템의 모든 사용자)에게 읽기, 쓰기, 실행 권한을 모두 부여하게 됩니다.
chmod -R 777 /path/to/file/or/folder
위처럼 -R 옵션을 붙이면 재귀적으로(recursively) 적용되어, 디렉터리 안에 포함된 모든 파일과 하위 폴더까지 모든 사용자에게 전체 권한을 부여합니다.
주의: chmod 777은 편리하지만 보안상 매우 위험할 수 있습니다. 누구나 파일을 수정하거나 삭제할 수 있게 되므로, 공개 서버나 중요한 설정 파일에는 절대 사용하지 않는 것이 좋습니다. 꼭 필요한 경우에만 임시로 사용하고, 작업 후에는 권한을 다시 좁혀 주세요.
이제 chmod 777이 무엇인지 완벽하게 이해하셨을 겁니다!