[Linux] 5. 파일 접근 권한 관리하기
1. 파일의 속성
파일 접근 권한 보호
- 리눅스는 파일에 무단으로 접근하는 것을 방지하고 보호하는 기능을 제공
- 사용자는 자신의 파일과 디렉터리 중에서 다른 사용자가 접근해도 되는 것과 그렇지 않은 것을 구분하여 접근 권한을 제한
파일의 속성
$ ls -l /etc/hosts
-rw-r--r-- root root 223 10월 24 23:58 /etc/hosts
1) 파일의 종류
- 파일 속성의 첫 번째 항목은 파일의 종류를 표시
- -는 일반 파일을,
d
는 디렉터리를,I
은 심벌릭 링크 파일을 의미 - 파일의 종류를 알려주는 명령 (
file 파일이름
)$ file /etc/hosts $ file /home/user1
-rw-r--r-- 1 root root 223 11월 8 23:13 /etc/hosts
2) 파일의 접근 권한 표시
- 파일 소유자와 그룹이나 기타 사용자들이 파일에 대해 가지는 접근 권한 표시
>> -rw-r--r-- << 1 root root 223 11월 8 23:13 /etc/hosts
3) 하드 링크의 개수
- 하드 링크는 한 파일에 대해 여러 개의 파일명을 가질 수 있도록 하는 기능
- 디렉터리의 경우는 해당 디렉터리 내의 디렉터리 개수를 의미
-rw-r--r-- >> 1 << root root 223 11월 8 23:13 /etc/hosts
4) 파일 소유자의 로그인 ID
- 리눅스에서 모든 파일은 소유자가 있음
-rw-r--r-- 1 >> root << root 223 11월 8 23:13 /etc/hosts
5) 파일 소유자의 그룹 이름
ls -l
명령에서 출력되는 그룹명은 파일이 속한 그룹을 의미- 사용자가 속한 기본 그룹은 시스템 관리자가 사용자를 등록할 때 결정
- 사용자가 속한 그룹을 알려주는 명령:
groups [사용자명]
$ groups user1
-rw-r--r-- 1 root >> root << 223 11월 8 23:13 /etc/hosts
6) 파일의 크기 (바이트 단위)
-rw-r--r-- 1 root root >> 223 << 11월 8 23:13 /etc/hosts
7) 파일이 마지막으로 수정된 날짜
-rw-r--r-- 1 root root 223 >> 11월 8 23:13 << /etc/hosts
8) 파일명
-rw-r--r-- 1 root root 223 11월 8 23:13 >> /etc/hosts <<
2. 파일의 접근 권한
접근 권한의 종류
- 읽기 권한(
r
), 쓰기 권한(w
), 실행 권한(x
) 등 세 가지로 구성
권한 | 파일 | 디렉터리 |
---|---|---|
읽기 | 파일을 읽거나 복사할 수 있다 | ls 명령으로 디렉터리 목록을 볼 수 있다(ls 명령의 옵션은 실행 권한이 있어야 사용할 수 있다) |
쓰기 | 파일을 수정,이동,삭제할 수 있다(디렉터리에 쓰기 권한이 있어야 한다) | 파일을 생성하거나 삭제할 수 있다 |
실행 | 파일을 실행할 수 있다(셸 스크립트나 실행 파일의 경우) | cd 명령을 사용할 수 있다. 파일을 디렉터리로 이동하거나 복사할 수 있다 |
접근 권한의 표기 방법
rw-
: 소유자, r--
: 그룹, r--
: 기타 사용자
다양한 접근 권한 조합의 예
접근 권한 | 의미 |
---|---|
rwxr-xr-x |
소유자는 읽기,쓰기,실행 권한을 모두 가지고 그룹과 기타 사용자는 읽기,실행 권한을 가지고 있다 |
r-xr-xr-x |
소유자, 그룹, 기타 사용자 모두 읽기, 실행 권한을 가지고 있다 |
rw------- |
소유자만 읽기, 쓰기 권한을 가지고 그룹과 기타 사용자는 아무 권한이 없다 |
rw-rw-rw- |
소유자, 그룹, 기타 사용자 모두 읽기, 쓰기 권한을 가지고 있다 |
rwxrwxrwx |
소유자, 그룹, 기타 사용자 모두 읽기, 쓰기 실행 권한을 가지고 있다 |
rwx------ |
소유자만 읽기, 쓰기, 실행 권한을 가지고 그룹과 기타 사용자는 아무 권한이 없다 |
r-------- |
소유자만 읽기 권한을 가지고 있다 |
-소유자, 파일이 속한 그룹, 일반 사용자 별로 누가 파일을 읽고 쓰고 실행할 수 있는지 문자로 표현
- 읽기 권한
r
, 쓰기 권한w
, 실행 권한x
이며, 권한이 없는 경우는 -로 표기 -rw-r--r-- 1 root root 223 11월 8 23:13 /etc/hosts
접근 권한의 변경 명령 (chmod [옵션] 접근권한모드 파일 또는 디렉터리
)
$ chmod a+rwx test.txt
$ chmod 777 test.txt
chmod |
|
---|---|
기능 | 파일이나 디렉터리의 접근 권한을 변경한다 |
형식 | chmod [옵션] 권한 모드 파일 또는 디렉터리 |
옵션 | -R : 하위 디렉터리까지 모두 변경할 수 있다 |
- 기호 모드: 접근 권한을 변경하기 위해 문자와 기호를 사용
- 숫자 모드: 접근 권한을 변경하기 위해 숫자를 사용
3. 기호를 이용한 파일 접근 권한 변경
기호 모드
chmod a+rwx test.txt
chmod | 사용자 카테고리 문자 |
연산자 기호 |
접근 권한 문자 |
파일명 |
---|---|---|---|---|
기호 모드 | 기호 모드 |
기호 모드에서 사용하는 문자와 기호
구분 | 문자/기호 | 의미 |
---|---|---|
사용자 카테고리 문자 |
user |
파일 소유자 |
사용자 카테고리 문자 |
group |
소유자가 속한 그룹 |
사용자 카테고리 문자 |
other |
소유자가 그룹 이외의 기타 사용자 |
사용자 카테고리 문자 |
all |
전체 사용자 |
연산자 기호 |
+ |
권한 부여 |
연산자 기호 |
- |
권한 제거 |
연산자 기호 |
= |
접근 권한 설정 |
접근 권한 문자 |
read |
읽기 권한 |
접근 권한 문자 |
write |
쓰기 권한 |
접근 권한 문자 |
execute |
실행 권한 |
기호 모드를 이용한 접근 권한 설정의 예
권한 표기 | 의미 |
---|---|
u+w |
소유자(u )에게 쓰기(w ) 권한 부여(+ ) |
u-x |
소유자(u )의 실행(x ) 권한 제거(- ) |
g+w |
그룹(g )에 쓰기(w ) 권한 부여(+ ) |
o-r |
기타 사용자(o )의 읽기(r ) 권한 제거(- ) |
g+wx |
그룹(g )에 쓰기(w )와 실행(x ) 권한 부여(+ ) |
+wx |
모든 사용자에게 umask 에 따라 권한 부여(- ) |
a+rwx |
모든 사용자에게 읽기(r ), 쓰기(w ), 실행(x ) 권한 부여(= ) |
go+w |
그룹(g )과 기차 사용자(o )에게 쓰기(w ) 권한 부여(+ ) |
u+x.go+w |
소유자(u )에게 실행(x ) 권한을 부여하고(+ ) 그룹(g )과 기타 사용자(o )에게 쓰기(w ) 권한 부여(+ ) |
기호를 이용한 접근 권한 변경 예
1) 현재 접근 권한 확인 (rw-rw-r--
)
$ ls -l test.txt
2) 소유자의 쓰기 권한 제거 (u-w
)
$ chmod u-w test.txt
4. 숫자를 이용한 파일 접근 권한 변경
- 전체 권한을 숫자 표기
rwx r- xr-- 소유자 권한 그룹 권한 기타 사용자 권한 7 5 4
-
권한을 숫자로 확산 1)
r-x
에서 권한이 있는 것은 1로 없는 것은 0으로 변환 2) 2진수를 각 자리별로 10진수로 환산하면 4, 0, 1이 됨 3) 세 숫자를 더하면 최종 권한 값 (5)이 됨 -
숫자 모드로 접근 권한 변경하기 예 1) 현재 접근 권한 확인: (
rw-rw-r--
) 664$ ls -l test2.txt
2) 소유자의 쓰기 권한 제거: (r--r--r--)
444$ chmod 444 test2.txt ; ls -l test2.txt
3) 그룹에 쓰기와 실행 권한 부여:(r--rwxr--)
474$ chmod 474 test2.txt ; ls -l test2.txt
- 기본 접근 권한
- 파일이나 디렉터리를 생성할 때 기본 접근 권한이 자동적 설정됨
- 일반파일의 경우
rw-rw-r--
(664)로 기본 접근 권한이 설정됨 - 디렉터리의 경우
rwxrwxr-x
(775)로 기본 접근 권한이 설정됨
마스크 값은 파일이나 디렉터리 생성 시 부여하지 않을 권한을 지정해 놓은 것을 의미함
- 마스크(mask) 값을 이용하여 기본 접근 권한을 설정할 수 있음
- 마스크 값이 002일 경우 이는
--- --- -w-
로 기타 사용자에게 쓰기 권한을 부여하지 않는의미 - 현재 기본 마스크 값 출력 명령 (부여하지 않는 권한을 숫자로 출력)
$ umask
- 현재 기본 마스크 값 출력 명령 (부여하는 권한을 문자로 출력)
$ umask -S
(결과)u=rwx, g=rx, o=rx
마스크 값의 적용을 통한 기본 접근 권한 설정
- 실행파일이 아닌 일반파일의 최대 접근 권한은 666 이며, 디렉터리의 최대 접근 권한은 777 임
마스크 값 변경하기
- 마스크 값을 바꾸면 파일이나 디렉터리를 생성할 때 적용되는 기본 접근 권한이 변경
$ umask 077
- 일반파일의 경우 사용자, 그룹, 기타 사용자에게 600의 기본 접근 권한 부여
- 디렉터리의 경우 사용자, 그룹, 기타 사용자에게 700의 기본 접근 권한 부여
특수 접근 권한
- 접근 권한은 원래 4자리이나 맨 앞자리는 특수 접근 권한으로 일반적으로 생략
- 맨 앞자리 숫자가 1, 2, 4이면 특수 접근 권한이 설정된 것을 의미함
- 맨 앞자리가 4일 때,
SetUID
가 설정됨 - 맨 앞자리가 2일 때,
SetUID
가 설정됨 - 맨 앞자리가 1일 때,
스티키비트
가 설정됨
- 맨 앞자리가 4일 때,
SetUID
(맨 앞자리 권한 4)
- 해당 파일이 실행되는 동안 파일이 실행한 사용자의 권한이 아니라 파일 소유자의 권한으로 실행
- 파일에
SetUID
설정 :SetUID
는 접근 권한에서 맨 앞자리에 4를 설정
$ touch set # 임의의 공백의 set 파일 생성
$ chmod 755 set # 모두에게 실행권한 부여
$ ls -l set # set 권한 확인
$ chmod 4755 set # SetUID 권한 부여
$ ls -l set # set 권한 다시 확인
-rwsr-xr-x 1 user1 user1 - 10월 29일 18:50 set
SetUID
가 설정되면 소유자의 실행 권한에s
가 표시set
파일을 실행하면, 항상 이 파일의 소유자인user1
권한을 가지고 실행된다는 의미
SetUID
가 사용된 사례
passwd
명령은 원래,root
사용자만 수행이 가능.- 그러나,
passwd
명령은SetUID
가 설정되어 있기 때문에user1
사용자가 자신의 비밀 번호를 수정할 때,passwd
명령이 소유자인root
권한으로 실행되어 암호 변경이 가능해짐 passwd
명령의 내용 확인
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root - 1월 26일 2018 /usr/bin/passwd
SetUID
를 이용한 해킹도 등장
SetGID
(맨 앞자리 권한 2)
SetGID
가 설정된 파일을 실행하면 해당 파일이 실행되는 동안 파일 소유그룹의 권한으로 실행SetGID
는 2755와 같이 접근 권한에서 맨 앞자리에 2를 설정SetGID
가 설정되면 소유 그룹의 실행 권한에s
가 표시
스티키 비트 (맨 앞자리 권한 1)
- 스티키 비트는 디렉터리에 설정되며 이 디렉터리에 누구나 파일을 생성할 수 있음
- 스티키 비트가 설정되면 기타 사용자의 실행 권한에
t
가 표시 /tmp
디렉터리가 대표적으로 스티키 비트가 설정된 디렉터리$ ls -ld /tmp
(tmp
디렉터리 확인)$ ls -ld /tmp drwxrwxrwt 21 root root 4096 11월 17 13:36 /tmp
요약
- 파일의 속성
-rw-r--r-- 1 root root 223 11월 8 23:13 /etc/hosts
- 파일의 접근 권한
- 읽기, 쓰기 실행하기 :
rwx
- 읽기, 쓰기 실행하기 :
- 파일의 접근 권한 변경
chmod a+rwx test.txt, chmod 777 test.txt
- 기본 접근 권한
- 일반파일과 디렉터리의 최대 권한,
mask
- 일반파일과 디렉터리의 최대 권한,
- 특수 접근 권한
SetUID
,SetGID
,스티키비트
댓글남기기