728x90
파일 및 디렉터리 권한
- 리눅스는 여러 사용자가 들어와 사용하는 멀티유저 시스템이기 때문에 여러 사용자가 들어와 사용하다 보면, 서버에 올려진 비밀자료 열람과 변조,수정,삭제를 할 우려가 생김
- 이 문제를 극복하기 위해 리눅스 OS에는 특별한 기능이 있는데 바로 퍼미션(권한)이라는 기능
- 윈도우 OS에도 퍼미션기능이 있긴 하지만 여러 사용자들이 들어오는 서버용이 아니기에 리눅스처럼 활성화되어 있지 않음
- 이 기능으로 사용자들은 자신한테 읽기 퍼미션이 부여된 파일만 읽을 수(Read) 있고, 쓰기 퍼미션이 부여된 파일만 쓰기와 수정(Write)이 가능하고, 실행 퍼미션이 부여된 파일만 실행(Execute)이 가능하며, 열람 권한뿐만 아니라 파일 소유자 개념도 지원
- 즉, 소유자(owner), 그룹(group), 기타(others) 사용자에 대해 읽기(read), 쓰기(write), 실행(execute) 권한을 설정하는 방식으로 관리
소유권 & 허가권 확인 방법

파일 권한 정보 (소유권/허가권) 확인
ls -l
ls -n # 소유권을 UID/GID 로

파일 유형 종류
| 문자값 | 디렉토리 밎 파일의 종류 |
| - | 일반(정규) 파일 |
| d | 디렉토리 |
| l | 심볼릭 링크 파일 |
| p | 명명된 파이프 |
| s | 유닉스 도메인 |
| c | 문자 디바이스 파일(터미널과 모뎀같이 바이트의 열로 데이터를 처리하는 디바이스) |
| b | 블록 디바이스 파일 (하드 드라이브나 CD-ROM 같이 블록 단위의 데이터를 처리하는 디바이스) |

허가권(Permission)
- 각 파일에 접근해서 읽거나 쓰거나 실행할 권리를 사용자 / 그룹 / 다른 사용자로 나눠서 관리
- user : 파일을 만든(생성) 소유주
- group : 파일을 만든 소유주가 속한 그룹의 사용자
- other : 기타 사용자

- User 권한(rwx) : 파일 소유자에게 읽기, 쓰기, 실행 권한을 모두 가짐
- Group 권한 (r-x) : 파일 소유 그룹에게 읽기, 실행 권한을 가짐
- Other 권한(r--) : 그 외에는 읽기 권한만 가짐
| 문자값 | 파일 | 디렉토리 |
| r(4) | 파일에 대한 읽기 권한 → 열기, 읽기 허용 |
디렉토리 내의 파일을 나열할 수 있게 허용 |
| w(2) | 파일에 대한 쓰기 권한 → 쓰기, 잘라내기 허용 단, 이름 변경이나 파일 삭제 허용하지 않음 파일 삭제나 파일 이름 변경은 디렉토리 속성에 의해 결정 |
디렉토리 내의 파일들을 생성, 삭제, 이름변경이 가능하도록 허용 |
| x(1) | 파일에 대한 실행 권한 → 파일이 프로그램으로 처리되고 파일이 실행되도록 허용 스크립트 언어에서 작성된 프로그램 파일들은 읽기 가능으로 설정 되어 있어야만 실행 가능함 |
디렉토리 내에서 탐색을 위해 이동 할 수 있도록 허용 → 디렉토리에 들어 올 수 있도록 허용 |
| - | r, w, x에 대한 권한이 없음을 표시 (문자 자리를 -로 대체) | |
- 디렉토리는 실행 권한(x)를 가져야만 해당 디렉토리로 이동 가능
- 즉, 'cd 디렉토리명'을 하기 위해선 해당 디렉토리에 실행 권한이 반드시 있어야 한다는 의미

소유권(ownership)
- 각 파일이나 디렉토리를 소유할 사용자 또는 그룹을 지정

소유권(Ownership) & 허가권(Permission) 변경 방법
허가권 변경 ( chmod [퍼미션 숫자] )

| 모드 | 설명 |
| 8진수 숫자 | 읽기 = 4 쓰기 = 2 실행 = 1 권한을 주지않으려면 0 Ex) 읽기 및 쓰기 : 4+2=6 1번째 자리는 사용자 허가권 2번째 자리는 그룹 허가권 3번째 자리는 다른 사용자 허가권 Ex) 755 사용자 허가권 = 읽기, 쓰기, 실행 권한 그룹 및 다른 사용자 허가권 = 읽기,실행 권한 |
| 8진수 | 2진수 | 권한 | 의미 |
| 0 | 000 | --- | 아무 권한 없음 |
| 1 | 001 | --x | 실행 권한 |
| 2 | 010 | -w- | 쓰기 권한 |
| 3 | 011 | -wx | 쓰기 및 실행 권한 |
| 4 | 100 | r-- | 읽기 권한 |
| 5 | 101 | r-x | 읽기, 실행 권한 |
| 6 | 110 | rw- | 읽기, 쓰기 권한 |
| 7 | 111 | rwx | 모든 권한 |
# 사용자는 읽기,쓰기(4+2) 권한 부여하고,
# 그룹과 다른사용자는 읽기(4) 권한만 부여
chmod 644 sample.txt
# 권한 전부 주기
chmod 777 sample.txt

허가권 변경 ( chmod [기호 문자] )
| 누구에게 | 권한 부여 | 어떤 권한 |
| u :사용자 g : 그룹 o : 기타 a : 전부 |
+ : 권한 추가 - : 권한 삭제 = : 권한 설정 |
r : 읽기 w : 쓰기 x : 실행 |
# 사용자(u)에 읽기 및 쓰기(rw)권한으로 초기화(=)
$ chmod u=rw owner-user-setting
# 모두(a)에게 읽기,쓰기(rw) 권한으로 초기화(=)
$ chmod a=rw owner-all-setting
# 소유자(u)에게 읽기(r) , 쓰기(w) 권한을 추가 부여(+)
$ chmod u+rw permission-add
# 소유그룹(g)에게 쓰기(w) 권한을 제거(-)
$ chmod g-w permission-remove
# 그외 계정에게 모든 권한을 제거(-)
# rwx 순서 무관 → o-rwx = o-wxr
$ chmod o-wxr other-no-permission

chmod 옵션
| 옵션 | 설명 |
| -R, --recursive | 특정 디렉토리 내 파일과 디렉토리에 대해 재귀적으로 허가권 변경 |
| -C, --changes | 변경된 파일이나 디렉터리에 대한 자세한 정보 출력 |
| -f, --silent, --quite | 대부분의 에러 메세지 출력을 제한 |
| --reference | 모드 대신 파일에 지정한 모드를 사용 |
# 디렉터리 이하의 모든 파일과 디렉터리에 대해 (-R)
# 사용자 : 읽기, 쓰기, 실행(4+2+1) 권한 부여
# 그룹과 다른 사용자 : 읽기 및 실행(4+1) 권한 부여
$ chmod -R 755 mydir

- 위의 사진에서는 디렉토리 및 그 하위의 모든 파일들의 권한이 재귀적으로 바뀌는 것을 확인하기 위한 테스트인데 안에 있는 파일들의 권한을 미리 000으로 변경해 두었었음
- 그 이유는 'chmod -R 000 mydir'을 입력하게 되면 허가 거부가 발생하였음
- 이는 위에서 설명한 대로 디렉토리 권한의 문제인데, 위에서 디렉토리 안으로 이동(cd 디렉토리명)하기 위해서는 실행 권한(x)이 반드시 있어야 한다고 설명하였음
- 하지만 디렉토리의 권한이 000으로 바뀌면서 실행 권한(x)이 사라지게 되었고, 재귀적으로 디렉토리 권한을 000으로 변경 → 디렉토리 안으로 이동하여 안의 파일 및 디렉토리들 권한을 000으로 변경의 순서로 이어져야 하는데 디렉토리가 실행 권한이 없어 해당 디렉토리 안으로 이동하지 못했기 때문에 하위 파일들의 권한을 변경하는 것이 거부되었다고 유추할 수 있음

- 정리
- chmod의 -R 옵션은 재귀적으로 권한을 변경하는데 다음의 순서로 변경이 됨
- 해당 디렉토리의 권한을 먼저 변경
- 해당 디렉토리 내로 이동하여 하위 파일, 디렉토리의 권한을 변경
- 하지만, 권한을 변경하려는 최상위 디렉토리의 실행 권한이 없으면 최상위 디렉토리 안으로 접근할 수 없기 때문에 허가 거부
- chmod의 -R 옵션은 재귀적으로 권한을 변경하는데 다음의 순서로 변경이 됨
- 디렉토리의 허가권은 파일보다 우선 시 됨
- 즉, 어떤 계정이 파일에 허가권이 있지만 그 파일을 담고 있는 디렉토리에 허가권이 없다면 사용 불가
- 또한, 임의 파일에 실행 권한(x)을 부여했을지라도 실행 가능한 형태가 아니면 오류 발생
- x 권한이 있는 파일을 실행하기 위해서는 ' ./ '을 앞에 붙임
Ex) ./exefile
사용자 및 그룹 소유권 변경 ( chown )
- 파일이나 디렉토리의 사용자 및 그룹 소유권 변경
- 소유권 변경은 오직 루트 사용자만 가능
- 옵션은 허가권과 동일
chown [옵션] 소유자:[그룹] [파일or그룹명]

mydir 디렉토리의 소유자를 root로
chown root mydir
# 사용자와 그룹을 ubuntu로 변경
sudo chown ubuntu:ubuntu mydir
# mydir 디렉터리 이하 모든 파일 및 디렉터리에 대하여 사용자와 그룹을 root로 소유자 변경
sudo chown -R root:root mydir

그룹 소유권만 변경 ( chgrp )
- 파일이나 디렉토리의 그룹 소유권만 변경
- 자신이 속한 그룹 내에서만 변경 가능
- 자신이 속하지 않은 그룹으로 변경하려면 root 계정 또는 sudo 명령어 사용
- 옵션은 허가권과 동일
# 본인이 소유한파일에 대해 자신의 그룹내 소유권 변경
chgrp [옵션] [그룹명] [파일명or디렉토리명]

기본 허가권 변경 $ umask
- 리눅스는 시스템상 파일이나 디렉터리를 생성할 때 자동으로 기본 허가권 부여
- 파일 : 666(rw- rw- rw-)
- 디렉토리 : 777(rwx rwx rwx)
- 계산 방법
- 파일이나 디렉터리 생성 시 기본값에서 umask에 설정된 마스크값을 뺀 결괏값(기본값 - umask값)을 허가권으로 지정
- Ex) umask : 022
- 파일 생성 시 : 666 - 022 = 644 (rw- r-- r--)
- 디렉토리 생성 시 : 777 - 022 = 755 (rwx r-x r-x)
- 파일이나 디렉터리 생성 시 기본값에서 umask에 설정된 마스크값을 뺀 결괏값(기본값 - umask값)을 허가권으로 지정
umask [옵션][mask]
# 현재 umask 값 확인
umask
# 옵션 -S : umask 값을 숫자대신 문자로 표기
umask -S
# umask 설정시 문자 사용하여 설정가능
umask u=rwx,g=rwx,o=rx

- 디렉토리(777) - umask(002) = 775 = rwx rwx r-x
- 파일(666) - umask(002) = 664 = rw- rw- r--

- 디렉토리(777) - umask(022) = 755 = rwx r-x r-x
- 파일(666) - umask(022) = 644 = rw- r-- r--
umask -S 옵션
- 디렉토리를 기준으로 디렉토리를 생성했을 때 부여받는 권한을 보여주는 것임
- 즉, 디렉토리의 '기본 권한 - umask'를 한 결괏값을 문자로 보여준 것
- 파일의 기본 권한은 666 - umask값으로 직접 계산을 해야 함

리눅스 파일 특수 권한
- 보통 리눅스의 권한을 3종류라고 인식하고 있는 경우도 많지만 실제로 리눅스의 권한은 4종류
- 실제로 권한을 조회하다 보면 rwx가 아닌 rwt 같은 특이한 권한이 보이기도 하고, chmod 명령어로 숫자로 세팅할 때 몇몇 권한 세팅 예제에서 2750, 1777 등 4자리로 표현되는 권한을 보기도 하는 데 이들이 모두 특수권한이 적용된 경우임
- 특수 권한이란 예외적인 상황에 대처할 수 있는 권한이며 기존의 권한 3+3 분류로 해결할 수 없는 특수한 상황이 필요한 경우가 있기 때문에 추가된 기능
- 실제로 많은 보안 공격이 이 특수권한을 활용하여 발생하므로 상식적인 차원에서 알아두어야 하지만 이 특수권한은 웬만하면 최소한으로 사용해야 하며 사용에 주의를 요함
- 이 특정 문자가 User, Group, Other 중 어디에 위치하냐에 따라 그 용도가 달라짐
- 특수 권한 숫자
- SetUID : 4
- SetGID : 2
- Sticky : 1

SetUID
- 사용자의 권한이 있어야만 실행을 할 수 있는 파일의 경우 그 권한을 일시적으로 일반 사용자들에게 파일 실행 권한을 부여하기 위해 사용
- 파일에 Set-UID 비트가 설정되면 다른 사용자가 파일을 실행했을 때 해당 사용자의 권한이 아닌 파일의 소유자 권한으로 실행
- Set-UID 비트를 설정하기 위해 소유자 허가권에 s를 추가하거나 문자 또는 숫자방식으로 설정
- 숫자 방식으로 설정할 때 가장 앞에 4를 붙여줌
사용 예제
# 숫자 방식 : 4를 앞에 붙임
chmod 4750 suid-test1 # (rws r-x ---)
# 문자 방식 : 소유자의 권한에 s를 추가하여 설정
chmod u+s suid-test2
chmod u=srwx,g=r,o=r suid-test3
chmod 4744 suid-test4

- 대문자 S :Set-UID 비트가 설정되어 있지만 실행 권한(x)이 없을 때 표시
- 즉, 파일에 Set-UID 비트는 설정되어 있지만 해당 파일이 실행 가능한 상태는 아니라는 의미
- 보통 Set-UID 비트가 설정된 파일은 실행 권한이 있어야 비로소 Set-UID 기능이 활성화되지만, 실행 권한이 없다면 대문자 S로 표시
- 소문자 s : 실행 권한이 있는 경우 → Set-UID 비트가 설정되어 있으며 실행할 수 있는 상태
- 대문자 S : 실행 권한이 없는 경우 → Set-UID 비트는 설정되어 있지만 실행할 수 없는 상태
주의 사항
- 보안 위험
- Set-UID 비트는 사용자의 권한을 일시적으로 파일의 소유자 권한으로 변경하기 때문에 잘못 설정되면 보안 취약점이 될 수 있음
- Ex) 악의적인 사용자가 Set-UID 비트가 설정된 파일을 악용하여 시스템 권한을 획득 가능
- Set-UID 설정이 필요한 경우
- 주로 특정 관리 작업을 수행하는 실행 파일들에 한정
- Ex) /bin/passwd와 같은 파일은 일반 사용자가 비밀번호를 변경할 때 Set-UID 비트가 필요
SetGID
- 그룹의 권한이 있어야만 실행을 할 수 있는 파일의 경우 그 권한을 일시적으로 일반 사용자들에게도 부여하여 파일을 실행할 수 있게 함
- 파일에 설정하면 사용자 그룹이 아닌 해당 파일 그룹으로 실행
- 디렉터리에 지정하면 하나의 디렉터리를 두고 여러 사용자가 공동 작업하기 편함
- 그룹허가권(g)에 s를 추가하거나, 숫자방식으로 할 경우 앞에 2 붙여줌
SUID vs SGID 비교
- SUID (Set-User ID) : 파일을 실행할 때 파일의 소유자 권한으로 실행
- SGID (Set-Group ID) : 파일을 실행할 때 파일의 그룹 소유자 권한으로 실행 또는 디렉토리 내에서 새 파일이 그 디렉토리의 그룹으로 생성
사용 예제
# 숫자 방식 : 4를 앞에 붙임
chmod 2750 sgid-test1 # (rwx r-s ---)
# 문자 방식 : 소유자의 권한에 s를 추가하여 설정
chmod g+s sgid-test2
chmod u=rwx,g=sr,o=r sgid-test3
chmod 2744 sgid-test4

Sticky-Bit (디렉토리에만 설정 가능)
- Sticky-Bit가 설정된 디렉토리에 파일을 생성하면 해당 파일은 생성한 사람의 소유가 되며 오직 소유자와 root에게만 해당 파일에 대한 삭제 및 변경의 권한을 가짐
- 즉, 다른 사용자는 자기 자신이 생성한 파일을 삭제할 수 없고, root만이 모든 파일을 삭제하거나 수정 가능
- 주로 공유 디렉토리에서 사용
- tmp 디렉토리와 같이 여러 사용자가 파일을 생성하고 접근할 수 있는 디렉토리에서 사용
- 공유 디렉토리에서 다른 사용자가 다른 사용자의 파일을 실수로 삭제하는 것을 방지하는 데 유용
- Sticky-Bit를 추가하기 위해 문자 방식인 경우 t를 사용 / 숫자 방식인 경우 앞에 1을 붙여줌
사용 예제
chmod o+t sticky-test1
chmod 1777 sticky-test2 # (drwxrwxrwt) <- 공유폴더 (/tmp와 동일)
# 해당폴더안에 파일이 퍼미션이 777이더라도, 디렉토리 퍼미션이 1777 아래 있으면 파일의 소유자 및 root 만 삭제 가능

참고 자료
🐧 리눅스 파일 & 디렉토리 권한 (소유권 / 허가권 / 특수권한)
파일 및 디렉터리 권한 리눅스는 여러사용자가 들어와 사용하는 멀티유저 시스템이다. 따라서 여러 사용자가 들어와 사용하다보면, 서버에 올려진 비밀자료 열람과 그것을 변조,수정,삭제를 할
inpa.tistory.com
728x90
'Operating System > Linux' 카테고리의 다른 글
| [Ubuntu] 서비스 관리 (0) | 2025.03.05 |
|---|---|
| [Ubuntu] 프로세스 관리 (0) | 2025.03.01 |
| [Ubuntu] 그룹 계정 관리 (0) | 2025.02.20 |
| [Ubuntu] 사용자 계정 관리 (0) | 2025.02.20 |
| [Ubuntu] 리눅스 계정 종류, Root 계정 및 시스템 계정 관리 (0) | 2025.02.20 |