Develop

[리눅스 마스터 2급-2차] 2. 파일 권한 및 소유권 본문

자격증

[리눅스 마스터 2급-2차] 2. 파일 권한 및 소유권

230801 2025. 12. 5. 10:23

안녕하세요 ~ .ᐟ 

 

2일차 파일 권한 및 소유권에 대해서 공부해봤습니다~

(며칠 치 파바박 올리는 점 양해 부탁드립니다 ㅋㅋ)


Day 2 - 파일 권한 및 소유권

  • 파일 권한 및 소유권 관리
  • 특수 권한 (SetUID, SetGID, Sticky bit)
  • 파일 속성 관리
  • 심볼릭 링크와 하드 링크

 

1. 파일 권한 관리 (chmod)

리눅스의 모든 파일과 디렉토리는 rwx 권한을 가집니다.

  • r (read, 4): 읽기 권한
  • w (write, 2): 쓰기 권한
  • x (execute, 1): 실행 권한

권한은 소유자(user) / 그룹(group) / 기타(others) 3개 영역으로 나뉩니다.

 

chmod 명령어

*# 숫자 방식 (8진수)*
chmod 755 file.txt          *# rwxr-xr-x*
chmod 644 file.txt          *# rw-r--r--*
chmod 700 file.txt          *# rwx------

# 문자 방식*
chmod u+x file.txt          *# 소유자에게 실행 권한 추가*
chmod g-w file.txt          *# 그룹의 쓰기 권한 제거*
chmod o=r file.txt          *# 기타 사용자는 읽기만 가능*
chmod a+x file.txt          *# 모두에게 실행 권한 추가# 재귀적 적용*
chmod -R 755 /mydir         *# 디렉토리 하위 모든 파일에 적용*

 

실습 예제

*# 1. 파일 생성 및 권한 확인*
touch testfile.txt
ls -l testfile.txt
*# 출력: -rw-r--r-- 1 user group 0 Dec 5 10:00 testfile.txt

# 2. 권한 변경*
chmod 700 testfile.txt
ls -l testfile.txt
*# 출력: -rwx------ 1 user group 0 Dec 5 10:00 testfile.txt

# 3. 문자 방식으로 변경*
chmod g+rx testfile.txt
ls -l testfile.txt
*# 출력: -rwxr-x--- 1 user group 0 Dec 5 10:00 testfile.txt*

 

 


 

2. 소유권 관리 (chown, chgrp)

chown - 소유자 변경 (소유자 + 그룹 동시변경 가능)

*# 소유자만 변경*
chown newuser file.txt

*# 소유자와 그룹 동시 변경*
chown newuser:newgroup file.txt

*# 재귀적 적용*
chown -R user:group /mydir

*# 소유자만 변경하고 그룹은 유지*
chown newuser: file.txt

 

chgrp - 그룹 변경

*# 그룹 변경*
chgrp newgroup file.txt

*# 재귀적 적용*
chgrp -R developers /project

 

실습 예제

*# 1. 현재 소유권 확인*
ls -l myfile.txt
*# 출력: -rw-r--r-- 1 john developers 1024 Dec 5 10:00 myfile.txt

# 2. 소유자 변경*
sudo chown alice myfile.txt
ls -l myfile.txt
*# 출력: -rw-r--r-- 1 alice developers 1024 Dec 5 10:00 myfile.txt

# 3. 소유자와 그룹 함께 변경*
sudo chown bob:admins myfile.txt
ls -l myfile.txt
*# 출력: -rw-r--r-- 1 bob admins 1024 Dec 5 10:00 myfile.txt*

 

 


 

3. 특수 권한

  • 특수권한을 설정할때는 4자리 숫자를 사용
    • 리눅스난 9자리 공간만 사용해서 권한을 표시하는데, 특수 권한까지 표시하려면 자리가 모자라서 x자리를 재활용 한다.
  • 특수권한이 설정되면 x(실행) 자리가 s나 t로 바뀜
  • 사용
    • 4: SetUID
    • 2: SetGID
    • 1: Sticky bit
    • 0: 특수 권한 없음 (일반적인 경우)
  • 조합해서 사용
  • # SetUID + SetGID 동시 설정 (4 + 2 = 6) chmod 6755 file ls -l file # 출력: -rwsr-sr-x # SetGID + Sticky bit 동시 설정 (2 + 1 = 3) chmod 3755 dir ls -ld dir # 출력: drwxr-sr-t # 모든 특수 권한 설정 (4 + 2 + 1 = 7) chmod 7755 file ls -l file # 출력: -rwsr-sr-t

 

SetUID (4000)

  • 파일 실행 시 파일 소유자의 권한으로 실행
  • 주로 시스템 명령어에 사용 (예: passwd)
  • 사용
    • s (소문자) : 실행권한이 있으면서 SetUID 가 설정됨
    • S (대문자) : 실행권한이 없으면서 SetUID 가 설정됨 (의미 없음) ⇒ 실행권한이 제거된 것
# SetUID 가 설정된 경우 (소유자의 x가 s로 바뀜)
chmod 4755 file          *# rwsr-xr-x*

chmod u+s file          *# SetUID 설정*

 

SetGID (2000)

  • 파일: 파일 실행 시 그룹 소유자의 권한으로 실행
  • 디렉토리: 생성되는 파일이 디렉토리의 그룹을 상속
  • 사용
    • s (소문자) : 실행권한이 있으면서 SetGID 가 설정됨
    • S (대문자) : 실행권한이 없으면서 SetGID 가 설정됨
chmod 2755 dir          *# rwxr-sr-x*
chmod g+s dir          *# SetGID 설정*

 

Sticky bit (1000)

  • 디렉토리에 설정
  • 자신이 생성한 파일만 삭제 가능 (타인의 파일 삭제 불가)
    • 디렉토리에 쓰기권한(w)이 모두에게 있더라도, 파일 삭제/이름변경은 소유자나 디렉토리 소유자만 가능
  • /tmp 디렉토리가 대표적 예시
  • 사용
    • t (소문자): 실행 권한(x)이 있으면서 Sticky bit가 설정됨
    • T (대문자): 실행 권한(x)이 없으면서 Sticky bit만 설정됨
chmod 1777 dir          *# rwxrwxrwt (x 가 있어서 t)
chmod 1666 dir          # rw-rw-rwT (x 가 없어서 T, 잘못된 설정)*

chmod +t dir           *# Sticky bit 설정*

 

실습 예제

*# 1. SetUID 설정*
chmod 4755 myprogram
ls -l myprogram
*# 출력: -rwsr-xr-x 1 root root 8192 Dec 5 10:00 myprogram

# 2. SetGID 설정*
chmod 2770 /shared
ls -ld /shared
*# 출력: drwxrws--- 2 root team 4096 Dec 5 10:00 /shared

# 3. Sticky bit 설정*
chmod 1777 /public
ls -ld /public
*# 출력: drwxrwxrwt 2 root root 4096 Dec 5 10:00 /public*

 

 


 

4.  파일 속성 관리 (chattr, lsattr)

chattr - 파일 속성 설정

*# 주요 속성
# i: immutable (수정, 삭제, 이름변경 불가)
# a: append only (추가만 가능)
# c: compressed (압축 저장)
# u: undeletable (삭제 시 복구 가능하도록 저장)*

chattr +i file.txt      *# 변경 불가 설정*
chattr -i file.txt      *# 변경 불가 해제*
chattr +a log.txt       *# 추가만 가능*

 

lsattr - 파일 속성 확인

lsattr file.txt
*# 출력: ----i------------- file.txt*

 

실습 예제

*# 1. 일반 파일 생성*
echo "test" > protected.txt

*# 2. 변경 불가 속성 설정*
sudo chattr +i protected.txt

*# 3. 삭제 시도 (실패)*
rm protected.txt
*# 출력: rm: cannot remove 'protected.txt': Operation not permitted

# 4. 속성 확인*
lsattr protected.txt
*# 출력: ----i------------- protected.txt

# 5. 속성 해제 후 삭제*
sudo chattr -i protected.txt
rm protected.txt

5. 링크 (Link)

하드 링크 (Hard Link)

  • 같은 inode를 가리키는 또 다른 이름 (같은 inode 를 공유함)
  • 원본 파일 삭제해도 링크 파일은 유효
  • 디렉토리나 다른 파일시스템에는 생성 불가 → 디렉토리 링크가 필요하면 심볼릭 링크 사용
ln original.txt hardlink.txt

*# inode 번호 확인*
ls -li original.txt hardlink.txt

 

심볼릭 링크 (Symbolic Link)

  • 원본 파일의 경로를 가리키는 포인터
  • 원본 파일 삭제 시 링크 파일 무효화
  • 디렉토리와 다른 파일시스템에도 생성 가능
ln -s /path/to/original.txt symlink.txt

*# 링크 확인*
ls -l symlink.txt
*# 출력: lrwxrwxrwx 1 user group 20 Dec 5 10:00 symlink.txt -> /path/to/original.txt*

 

실습 예제

*# 1. 원본 파일 생성*
echo "Original content" > original.txt

*# 2. 하드 링크 생성*
ln original.txt hard.txt
ls -li original.txt hard.txt
*# 출력: # 123456 -rw-r--r-- 2 user group 17 Dec 5 10:00 original.txt# 123456 -rw-r--r-- 2 user group 17 Dec 5 10:00 hard.txt# (같은 inode 번호 123456)

# 3. 심볼릭 링크 생성*
ln -s original.txt soft.txt
ls -li soft.txt
*# 출력: 654321 lrwxrwxrwx 1 user group 12 Dec 5 10:00 soft.txt -> original.txt

# 4. 원본 파일 삭제 테스트*
rm original.txt
cat hard.txt        *# 성공: Original content*
cat soft.txt        *# 실패: No such file or directory*

 

 

느낀 점

  • 그동안 정처기, 리마2급에서 보던 소유권, 권한 문제 확실히 알았습니다
  • 특수권한은 생소했는데 실습해보니까 마냥어렵지만은 않았고.. .ᐟ
  • 특히 수정/삭제가 금지되는 chattr +i 명령어는 파일 보호에 도움이 될 것 같고,
  • 본인/디렉토리 소유자/루트 소유자 만 삭제할 수 있는 스티키 비트는 협업할때 유용할 것 같다는 생각이 들었습니다 ㅎㅎ