원격 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 | 기타 사용자 쓰기 권한 제거 |