- 공유 링크 만들기
- X
- 이메일
- 기타 앱
리눅스 서버에서 Permission denied 에러를 마주하거나, 배포 스크립트가 실행되지 않아 당황한 경험이 있다면 이 글이 필요합니다. chmod 755와 777의 차이를 정확히 이해하지 못하면 보안 취약점을 만들거나 운영 장애를 초래할 수 있습니다. 이 글에서는 리눅스 파일 권한의 구조부터 chmod, chown 실전 사용법까지 실습 기반으로 정리했습니다.
| Linux 파일 권한의 모든 것: chmod 755 vs 777 차이와 chown 사용법 |
1. 리눅스 권한 구조: rwx와 숫자 표기법
리눅스의 모든 파일과 디렉터리는 소유자(User) / 그룹(Group) / 기타(Others) 3개 주체에 대해 각각 읽기(r) / 쓰기(w) / 실행(x) 권한을 가집니다.
- r (read, 4): 파일 내용 읽기 / 디렉터리 목록 조회(ls)
- w (write, 2): 파일 수정 / 디렉터리 내 파일 생성·삭제
- x (execute, 1): 파일 실행 / 디렉터리 진입(cd)
ls -al 명령 실행 시 출력되는 10자리 문자열은 다음과 같이 해석합니다.
- 첫 번째 문자: 타입 (-=파일, d=디렉터리, l=심볼릭 링크)
- 2~4번째: 소유자 권한 (rwx)
- 5~7번째: 그룹 권한 (rwx)
- 8~10번째: 기타 사용자 권한 (rwx)
예: -rw-r--r--는 파일이며, 소유자는 읽기·쓰기(6), 그룹과 기타는 읽기만(4) 가능 → 644
숫자 계산법: 각 권한 그룹(소유자/그룹/기타)마다 r=4, w=2, x=1을 합산합니다.
- rwx = 4+2+1 = 7
- rw- = 4+2 = 6
- r-x = 4+1 = 5
- r-- = 4 = 4
- --- = 0
따라서 rwxr-xr-x는 755, rwxrwxrwx는 777입니다.
2. chmod: 권한 변경 실전 사용법
chmod는 파일 및 디렉터리의 권한을 변경하는 명령어로, 숫자 방식과 문자 방식 두 가지를 지원합니다.
숫자 방식 (권장)
운영 환경에서는 명확성과 속도 때문에 숫자 방식을 더 많이 사용합니다.
chmod 755 script.sh→ 소유자 rwx(7), 그룹 r-x(5), 기타 r-x(5)chmod 644 config.yml→ 소유자 rw-(6), 그룹 r--(4), 기타 r--(4)chmod 700 private.key→ 소유자만 rwx(7), 나머지 권한 없음
문자 방식
특정 권한만 추가/제거할 때 유용합니다.
- u (user, 소유자), g (group), o (others), a (all)
- + (추가), - (제거), = (설정)
예시:
chmod u-r test.txt→ 소유자 읽기 권한 제거chmod g+w test.txt→ 그룹 쓰기 권한 추가chmod o-rwx test.txt→ 기타 사용자 모든 권한 제거chmod a+x deploy.sh→ 모든 사용자에게 실행 권한 부여
재귀 적용 (-R 옵션)
디렉터리 하위의 모든 파일/폴더에 일괄 적용할 때 사용합니다.
chmod -R 755 /var/www/html- 주의: 하위 파일까지 모두 변경되므로, 실행 권한이 불필요한 일반 파일에도 x가 부여될 수 있습니다. 프로덕션 환경에서는 find 명령과 조합하여 파일/디렉터리를 구분해 적용하는 것을 권장합니다.
chmod 755 vs 777: 보안 관점 차이
| 권한 | 의미 | 사용 시나리오 | 보안 위험도 |
|---|---|---|---|
| 755 | 소유자 rwx, 그룹·기타 r-x | 웹서버 실행 파일, 공개 스크립트 | 낮음 |
| 777 | 모든 사용자 rwx | 임시 테스트 (운영 환경 절대 금지) | 매우 높음 |
777은 누구나 파일을 수정·삭제·실행할 수 있어 악의적인 스크립트 삽입, 설정 파일 변조 등의 보안 사고로 직결됩니다. "일단 돌아가게" 하려고 777을 설정했다가 프로덕션에 그대로 배포되는 사고가 빈번하므로, 최소 권한 원칙(Principle of Least Privilege)을 준수해야 합니다.
3. 디렉터리 권한의 특수성: x(실행)의 의미
파일과 달리 디렉터리에서는 x(실행) 권한이 '진입(접근)' 권한을 의미합니다. 실습을 통해 확인한 동작은 다음과 같습니다.
- r 제거 시:
ls명령으로 목록 조회 불가 (Permission denied) - w 제거 시: 디렉터리 내부에서 파일 생성·삭제 불가
- x 제거 시:
cd로 진입 불가,ls -l같은 상세 정보 조회 불가
예시:
chmod 700 /home/user/private→ 소유자만 진입·조회·수정 가능chmod 755 /var/www→ 소유자는 모든 권한, 그룹·기타는 진입·조회만 가능 (쓰기 불가)chmod 750 /opt/app→ 소유자 rwx, 그룹 r-x, 기타 접근 차단
실무 팁: 웹 서버 DocumentRoot는 보통 755, 로그 디렉터리는 750, SSH 키 디렉터리(.ssh)는 700으로 설정합니다.
4. chown / chgrp: 소유권 변경
권한(permission)과 별개로 파일의 소유자(owner)와 그룹(group)을 변경해야 할 때 사용합니다.
chown: 소유자 변경
chown yj testfile.txt→ 소유자를 yj로 변경chown yj:developers testfile.txt→ 소유자를 yj, 그룹을 developers로 동시 변경chown -R yj:yj /home/yj/project→ 디렉터리 하위 전체 소유권 변경
주의: root 권한이 필요하므로 sudo와 함께 사용합니다. 잘못된 소유권 변경은 서비스 기동 실패로 이어질 수 있으므로, 변경 전 백업 또는 스냅샷 생성을 권장합니다.
chgrp: 그룹만 변경
chgrp developers testfile.txt→ 그룹을 developers로 변경chgrp -R www-data /var/www/html→ 웹 서버 그룹으로 일괄 변경
chown으로 그룹까지 한 번에 변경 가능하므로, 실무에서는 chown을 더 많이 사용합니다.
실전 예제: Nginx 배포 시 권한 설정
Nginx 프로세스가 www-data 사용자로 실행될 때, 정적 파일 서빙을 위한 권한 설정 예시입니다.
sudo chown -R www-data:www-data /var/www/html→ 소유권 변경sudo find /var/www/html -type d -exec chmod 755 {} \;→ 디렉터리는 755sudo find /var/www/html -type f -exec chmod 644 {} \;→ 파일은 644
이렇게 하면 Nginx는 파일을 읽을 수 있지만, 외부 사용자가 파일을 수정할 수 없어 보안이 강화됩니다.
요약 및 Action Item
리눅스 권한은 소유자/그룹/기타 각 3비트(rwx)로 구성되며, 숫자 합산(4/2/1)으로 표현합니다. chmod로 권한을 변경하고, chown으로 소유권을 변경하며, 디렉터리의 x는 진입 권한임을 기억해야 합니다. 일반 파일은 644, 실행 파일이나 디렉터리는 755, 민감 정보는 600 또는 700으로 설정하는 것이 일반적입니다.
당장 실행할 Action Item: 현재 운영 중인 서버에서 find / -type f -perm 0777 2>/dev/null 명령으로 777 권한 파일을 검색하고, 보안 정책에 맞게 권한을 재조정하십시오. 이 한 번의 점검이 잠재적 보안 사고를 예방합니다.
#함께 읽으면 좋은 글
REST API vs GraphQL 실무 비교: 내 프로젝트에 맞는 통신 방식 선택 기준 : 바로보기
댓글
댓글 쓰기