1. Linux 권한의 3요소
Linux의 권한은 간단하지만 강력한 원칙을 따른다.
모든 파일과 디렉터리에는 세 가지 사용자 그룹에 대해 세가지 유형의 접근 권한이 있다.
- Linux는 “최소 권한 원칙(Principle of Least Privilege)“을 따른다.
사용자와 프로세스에게 작업 수행에 필요한 최소한의 권한만 부여하는 것이 보안의 기본이다.
1.1 권한 유형
• 읽기 (r) – 파일 내용 보기 또는 디렉터리 목록 조회 • 쓰기 (w) – 파일 내용 수정 또는 디렉터리 내 파일 생성·삭제 • 실행 (x) – 파일을 프로그램으로 실행하거나 디렉터리에 진입
1.2 사용자 그룹
• 소유자 (u, user) – 파일을 소유한 사용자 • 그룹 (g, group) – 해당 파일의 그룹에 속한 사용자들 • 기타 (o, others) – 시스템의 모든 다른 사용자
2. 권한 문자열 읽기
2.1 문자열 구조 분석
맨 앞의 문자는 파일의 유형을 나타내고, 이후 9개의 문자가 3개씩 나뉘어 소유자·그룹·기타의 권한을 나타낸다.
-a : 숨김 파일 포함 (.으로 시작하는 파일) -l : 상세 정보(long format) 출력 -h : human readable (KB, MB, GB) [lycos7560@DMT-RL01 ~]$ ls -alh total 24K drwx------. 3 lycos7560 lycos7560 132 Mar 16 05:38 . drwxr-xr-x. 4 root root 39 Mar 16 04:59 .. -rw-------. 1 lycos7560 lycos7560 3.3K Mar 17 05:21 .bash_history -rw-r--r--. 1 lycos7560 lycos7560 18 Oct 29 2024 .bash_logout -rw-r--r--. 1 lycos7560 lycos7560 144 Oct 29 2024 .bash_profile -rw-r--r--. 1 lycos7560 lycos7560 522 Oct 29 2024 .bashrc drwx------. 3 lycos7560 lycos7560 20 Mar 12 07:19 .config -rw-------. 1 lycos7560 lycos7560 38 Mar 11 04:36 .lesshst -rw-r-x---. 1 root root 12 Mar 16 05:38 myfile.txt # 현재 사용자 및 그룹 확인 id [lycos7560@DMT-RL01 ~]$ id uid=1000(lycos7560) gid=1000(lycos7560) groups=1000(lycos7560),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 # 특정 사용자가 속한 그룹 확인 groups lycos7560 [lycos7560@DMT-RL01 ~]$ groups lycos7560 lycos7560 : lycos7560 wheel (wheel은 내가 넣음)
- rwx r-x r-- │ │ │ │ │ │ │ └── 기타(Others): 읽기 전용 │ │ └─────── 그룹(Group): 읽기 및 실행 │ └──────────── 소유자(Owner): 읽기, 쓰기, 실행 └──────────────── 파일 유형 (- = 파일, d = 디렉터리)
2.2 파일 유형 기호
| 기호 | 의미 |
| – | 일반 파일 |
| d | 디렉터리(Directory) |
| l | 심볼릭 링크(Symbolic Link) |
| c | 문자 장치 파일(Character Device) |
| b | 블록 장치 파일(Block Device) |
| s | 소켓(Socket) |
| p | 파이프(Named Pipe) |
3. 자주 사용하는 권한 패턴 명령어
3.1 파일 권한
| 숫자 | 기호 | 설명 | 주요 용도 |
| 644 | rw-r–r– | 소유자: 읽기/쓰기, 나머지: 읽기 전용 | 일반 텍스트, 설정 파일 |
| 755 | rwxr-xr-x | 소유자: 모든 권한, 나머지: 읽기+실행 | 스크립트, 실행 파일 |
| 600 | rw——- | 소유자만 읽기/쓰기 가능 | SSH 키, 비밀번호 파일 |
| 400 | r——– | 소유자만 읽기 가능 (쓰기 불가) | 백업 파일, 중요 설정 |
| 777 | rwxrwxrwx | 모든 사용자가 모든 권한 | 매우 위험! (보안의 문제 사용을 지양) |
3.2 디렉터리 권한
| 숫자 | 기호 | 설명 | 주의사항 |
| 755 | rwxr-xr-x | 표준 디렉터리 권한 | 일반적으로 가장 많이 사용 |
| 700 | rwx—— | 소유자만 접근 가능한 비공개 디렉터리 | 개인 데이터 폴더에 적합 |
| 775 | rwxrwxr-x | 소유자와 그룹 모두 쓰기 가능 | 팀 협업 폴더에 사용 |
| 644 | rw-r–r– | ❌ 사용 불가 | 실행(x) 권한 없이 디렉터리 진입 불가 |
⚠ 디렉터리와 실행 권한
디렉터리에서 실행(x) 권한은 “진입 권한”을 의미한다.
읽기(r)만 있고 실행(x)이 없으면 디렉터리 안에 파일이 있다는 사실은 알아도 접근할 수 없다.
반드시 실행 권한을 포함해야 합니다.
4. chmod로 권한 변경하기
4.1 기호 방식
기호 방식은 매우 직관적이며 현재 권한을 유지한 채 특정 권한만 추가하거나 제거할 때 유용하다.
| 기호 | 의미 |
| u | 소유자(user) |
| g | 그룹(group) |
| o | 기타(others) |
| a | 모두(all) = u+g+o |
| + | 권한 추가 |
| – | 권한 제거 |
| = | 권한 설정(기존 권한 덮어쓰기) |
# 소유자에게 실행 권한 부여 chmod u+x myfile # 그룹의 쓰기 권한 제거 chmod g-w myfile # 기타 사용자에게 읽기 권한 부여 chmod o+r myfile # 모든 사용자에게 실행 권한 부여 chmod a+x myfile # 그룹 권한을 읽기+실행으로 정확히 설정 (= 사용) chmod g=rx myfile # 여러 권한을 동시에 변경 (콤마로 구분) chmod u+x,g-w,o+r myfile
4.2 숫자 방식
숫자 방식은 빠르고 정확하다.
각 자리는 소유자·그룹·기타의 권한을 나타내며 r=4, w=2, x=1을 더해 계산한다.
| 권한 | 이진수 | 10진수 |
| — | 000 | 0 |
| –x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r– | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
예: 755 = 소유자(7=rwx) + 그룹(5=r-x) + 기타(5=r-x) chmod 755 myfile # rwxr-xr-x chmod 644 myfile # rw-r--r-- chmod 600 myfile # rw------- chmod 400 myfile # r-------- chmod 700 mydir # rwx------
4.3 재귀적 권한 변경 (-R 옵션)
디렉터리와 그 안의 모든 파일/하위 디렉터리에 권한을 일괄 적용할 때 사용한다.
# 웹 서버 디렉터리 전체 권한 설정
sudo chmod -R 755 /var/www/html/
# 특정 패턴의 파일만 선택적으로 변경
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
# 파일과 디렉터리 권한 분리 팁
chmod -R 755를 사용하면 파일도 755(실행 가능)가 되어 보안상 좋지 않다.
find 명령으로 파일(644)과 디렉터리(755)를 따로 설정하는 것을 권장.
5. chown 으로 소유권 변경하기
chown 명령으로 파일의 디렉터리의 소유자와 그룹을 변경할 수 있다.
일반적으로 관리자 권한(sudo)이 필요하다.
5.1 소유자 변경
# 소유자를 alice로 변경 sudo chown alice myfile # 소유자를 alice, 그룹을 staff로 동시 변경 sudo chown alice:staff myfile # 그룹만 developers로 변경 (콜론 앞 생략) sudo chown :developers myfile
5.2 재귀적 소유권 변경
# 디렉터리 전체 소유자와 그룹 변경 sudo chown -R alice:staff /home/alice/projects/ # 소유자만 재귀적으로 변경 sudo chown -R www-data /var/www/html/
5.3 chgrp 명령 (그룹 전용 변경)
그룹만 변경하고 싶을 때는 chgrp 명령을 사용할 수도 있다.
sudo chgrp developers myfile sudo chgrp -R developers /srv/project/
6. 특수 권한 (고급)
일반 rwx 외에 시스템 관리에 중요한 역할을 하는 SetUID, SetGID, Sticky Bit 세 가지 특수 권한이 있다.
| 권한 유형 | 명령어 예시 | 설명 |
| SetUID (4xxx) | chmod 4755 file | 실행 시 소유자 권한으로 동작 (예: /usr/bin/passwd) |
| SetGID (2xxx) | chmod 2755 dir | 파일을 소유자 그룹으로 생성, 공유 폴더에 유용 |
| Sticky Bit (1xxx) | chmod 1777 /tmp | 파일 소유자만 삭제 가능 (/tmp 디렉터리에 사용) |
# SetUID 설정 (소유자 권한으로 실행) chmod 4755 myprogram # 또는: chmod u+s myprogram # SetGID 설정 (그룹 권한 상속) chmod 2755 shared_dir # 또는: chmod g+s shared_dir # Sticky Bit 설정 (소유자만 삭제 가능) chmod 1777 /tmp # 또는: chmod +t /tmp # ls -l에서 특수 권한 확인 # -rwsr-xr-x → SetUID (소유자 x 자리에 s) # -rwxr-sr-x → SetGID (그룹 x 자리에 s) # drwxrwxrwt → Sticky Bit (기타 x 자리에 t) - SetUID 보안 주의 SetUID가 설정된 프로그램은 실행 시 소유자(보통 root로 설정) 권한으로 동작한다. 불필요한 파일에 SetUID를 설정하면 심각한 보안 취약점이 될 수 있다. 반드시 필요한 경우에만 사용.
7. umask – 기본 권한 마스크
새 파일이나 디렉터리를 생성할 때 자동으로 적용되는 기본 권한을 제어한다.
7.1 umask 동작 원리
- 파일 최대 권한: 666 (rw-rw-rw-) 실행 권한은 기본적으로 부여되지 않음
- 디렉터리 최대 권한: 777(rwxrwxrwx)
- 실제 권한 = 최대 권한 – umask 값
# 현재 umask 확인 umask [lycos7560@DMT-RL01 ~]$ umask 0022 # umask 022 적용 시 (가장 일반적) # 파일: 666 - 022 = 644 (rw-r--r--) # 디렉터리: 777 - 022 = 755 (rwxr-xr-x) # umask 변경 (현재 세션에만 적용) umask 027 # 영구 적용: ~/.bashrc 또는 /etc/profile에 추가 echo "umask 027" >> ~/.bashrc
8. 실무 팁 & 자주 하는 실수
| 상황 | 원인 | 해결 방법 |
| 스크립트 실행 안 됨 | 실행(x) 권한 없음 | chmod +x script.sh |
| 디렉터리 진입 불가 | 실행(x) 권한 없음 | chmod 755 dirname |
| 파일 수정 안 됨 | 쓰기(w) 권한 없음 | chmod u+w filename |
| sudo 없이 chown 불가 | 일반 사용자 제한 | sudo chown 사용 |
| 777 설정 후 보안 문제 | 과도한 권한 부여 | chmod 755 또는 644로 변경 |
보안 체크리스트
① 민감한 파일(SSH 키, 설정 파일)은 600 또는 400 사용
② 웹 서버 파일은 644, 디렉터리는 755
③ 777은 절대 사용하지 않기
④ SetUID 파일 주기적 점검: find / -perm -4000 -ls 2>/dev/null



