Linux File Permissions Handbook (파일 권한 정리 핸드북)

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 파일 권한

숫자기호설명주요 용도
644rw-r–r–소유자: 읽기/쓰기, 나머지: 읽기 전용일반 텍스트, 설정 파일
755rwxr-xr-x소유자: 모든 권한, 나머지: 읽기+실행스크립트, 실행 파일
600rw——-소유자만 읽기/쓰기 가능SSH 키, 비밀번호 파일
400r——–소유자만 읽기 가능 (쓰기 불가)백업 파일, 중요 설정
777rwxrwxrwx모든 사용자가 모든 권한매우 위험! (보안의 문제 사용을 지양)

3.2 디렉터리 권한

숫자기호설명주의사항
755rwxr-xr-x표준 디렉터리 권한일반적으로 가장 많이 사용
700rwx——소유자만 접근 가능한 비공개 디렉터리개인 데이터 폴더에 적합
775rwxrwxr-x소유자와 그룹 모두 쓰기 가능팀 협업 폴더에 사용
644rw-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진수
0000
–x0011
-w-0102
-wx0113
r–1004
r-x1015
rw-1106
rwx1117
예: 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

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤