원격 Linux 환경에서 작업을 하던 중, Docker 컨테이너에서 마운트된 디렉토리에 파일을 생성하면 외부 환경에서는 권한 문제로 해당 파일을 수정하지 못하는 경우가 종종 발생하는 경우가 있다. 이를 해결하기 위해 리눅스 환경에서 파일 및 디렉토리의 권한을 변경하는 방법을 정리하여 기록으로 남기고자 한다.
리눅스 퍼미션 구조
리눅스에서 모든 파일과 디렉토리는 사용자(user), 그룹(group), 기타 사용자(other)로 나뉘며, 각 주체에 대해 읽기(r), 쓰기(w), 실행(x) 권한을 설정할 수 있습니다.
사용자 유형
| 기호 | 의미 | 
|---|
u | 소유자 (user) | 
g | 그룹 (group) | 
o | 기타 사용자 (others) | 
a | 전체 (all = u+g+o) | 
권한 기호와 의미
| 권한 | 기호 | 숫자 값 | 설명 | 
|---|
| 읽기 | r | 4 | 파일 내용을 읽을 수 있음 | 
| 쓰기 | w | 2 | 파일을 수정할 수 있음 | 
| 실행 | x | 1 | 파일 실행 또는 디렉토리 접근 가능 | 
chmod 명령어 형식
기호(SYMBOLIC) 방식
1
  | chmod [user][+|-|=][permission] 파일명
  | 
+: 권한 추가-: 권한 제거=: 해당 권한만 설정하고 기존 권한 제거
1
2
3
  | chmod u+x script.sh        # 사용자에게 실행 권한 추가
chmod go-w file.txt        # 그룹, 기타 사용자에게 쓰기 권한 제거
chmod a=r file.txt         # 모든 사용자에게 읽기 권한만 부여
  | 
숫자(NUMERIC) 방식
각 사용자 유형(u/g/o)의 권한 값을 더한 3자리 숫자이다.
| 권한조합 | 값 | 설명 | 
|---|
rwx | 7 | 읽기 + 쓰기 + 실행 | 
rw- | 6 | 읽기 + 쓰기 | 
r-x | 5 | 읽기 + 실행 | 
r-- | 4 | 읽기 | 
--x | 1 | 실행 | 
--- | 0 | 권한 없음 | 
1
2
3
  | chmod 755 script.sh       # 사용자: rwx, 그룹/기타: r-x
chmod 644 readme.md       # 사용자: rw-, 그룹/기타: r--
chmod 777 all-access.sh   # 모든 사용자에게 모든 권한 부여
  | 
디렉토리 권한 변경
디렉토리에도 실행(x) 권한이 필요하다. 실행권한이 있어야 진입하고자 하는 해당 디렉토리 안으로 진입할 수 있다.
1
2
  | chmod 755 mydir/        # 사용자: rwx, 그룹/기타: r-x
  | 
재귀적 권한 변경
하위 폴더/파일까지 한 번에 권한을 주려면 -R 옵션을 사용합니다.
1
  | chmod -R 755 myproject/
  | 
퍼미션 해석 예제
1
  | -rwxr-xr-x 1 root 1001 5680 Apr 14 13:41 requirements.txt
  | 
구조 분석
| 위치 | 권한 의미 | 
|---|
- | 일반 파일 | 
rwx | 사용자(root): 읽기,쓰기,실행 | 
r-x | 그룹(1001): 읽기,실행 | 
r-x | 기타 사용자: 읽기,실행 | 
| chmod 명령어 | 설명 | 
|---|
chmod 644 file | 사용자: 읽기+쓰기, 그룹/기타: 읽기만 | 
chmod 755 script | 사용자: 읽기+쓰기+실행, 그룹/기타: 읽기+실행 | 
chmod -R 755 dir/ | 디렉토리 및 하위 전체에 권한 설정 | 
chmod o-w file | 기타 사용자 쓰기 권한 제거 |