[2024.07.28]
[허가권]
> u(user), g(group), o(other), a(all)
> r(read)/읽기, w(write)/쓰기, x(eXecute)/실행
> w(write)/쓰기: 생성/수정/삭제 권한이 모두 부여
-rw-(소유자)r--(그룹)r--(제3자). 1 root root 0 7월 28 14:10 file1
> [특수 허가권] [소유자] [그룹] [제3자]
[파일 권한]
> 허가권: 666
<읽기>
r(4): 읽기 <-- 파일 내용의 읽기 권한
w(2): 쓰기 <-- 파일 내용의 생성/수정/삭제 권한
x(1): 실행 <-- 파일 내용의 실행 권한
[디렉터리 권한]
> 허가권: 777
r(4): 읽기 <-- 디렉터리 내부에서의 파일/디렉터리 목록 출력 권한
w(2): 쓰기 <-- 디렉터리 내부에서의 파일/디렉터리를 생성/수정/삭제 권한
x(1): 실행 <-- 디렉터리 내부로의 진입 권한
=======================================
rwxrwxrwx
r(4)w(2)x(1)r(4)w(2)x(1)r(4)w(2)x(1)
풀 커미션이 들어가면 8진수로 777이 된다
drwxr-xr-x 2 root root 6 7월 28 14:27 dir3
8진수로 표현했을 때 755
-rw-r--r-- 1 root root 0 7월 28 14:10 file1
8진수로 표현했을 때 644
디렉터리 파일과 파일 디렉터리 초기 허가권이 다르다
*특수 허가권이 표기되지 않기 때문에 원래라면 0777이 된다
========================================
[파일]
666
022
----
644
[디렉터리]
777
022
----
755
*umask값이 0022이기 때문에 특수 허가권을 제외한 022를
빼면 파일 및 디렉터리 허가권이 완성된다
> umask 0022(기본값)
rwxr-xr-x
2진수로 나타내면 bit로 111101101
rw-r--r--
2진수로 나타내면 bit로 110100100
========================================
drwx-wx-wx 2 root root 6 7월 28 14:39 dir5
733
-rw--w--w- 1 root root 0 7월 28 14:39 file3
622
777
044
----
733
666
044
----
========================================
[특수 허가권]
> 각 사용자의 실행 권한에 설정
> 기존 실행 권한이 있을 경우에는 소문자로 표시
> 기존 실행 권한이 없었을 경우에는 대문자로 표시
- 타 사용자가 해당 파일을 실행했을 경우 해당 파일의 소유자 권한 획득
> SetUID(4)
> SetGID(2)
- 모든 사용자에게 쓰기 권한이 부여되었는데도 불구하고
파일의 삭제만큼은 해당 파일의 소유자만 가능
> Sticky Bit(1)
7777
rws rws rwt
========================================
01. 허가권 설정(부여/제거)
#chmod [옵션] [허가권] [파일/디렉터리]
#chmod 777 file1
> 권한 부여: +
> 권한 제거: -
> 권한 설정: =
login.defs 파일을 통해 umask를 확인할 수 있다
umask 변경 후 파일 및 디렉터리 생성으로 확인하는 시간을 가졌다
이후 진행할 실습을 위해 umask는 기본값인 022로 다시 설정했다
먼저 user1, user2, user3 생성
user1으로 로그인도 시도해 본다
현재 상태에서는 yrg 디렉터리에 있는 파일이나 디렉터리 확인만 가능한 상태다
이때 허가 거부가 나타나는 이유는
user1이 사용자 root도 아니고 root라는 그룹에 소속되어 있지도 않기 때문이다
그렇기 때문에 user1은 제3자 역할이 되고 x라는 실행 권한이 부여되어 있어
진입은 되지만 dir1의 읽기 권한이 거부되어 불가능하다
그렇기 때문에 그런 상황을 풀기 위해 권한을 부여해야 되는데
o가 제3자, r은 읽기 권한 즉 dir1 디렉터리에 제3자가 읽는 것을 허용한다는 의미이다
채널 모드로 변경시킨 후 다시 시도하면 허가 거부 상태에서
디렉터리 및 파일 목록을 확인할 수 있다
제3자의 읽기 권한을 빼면
당연히 다시 허가 거부 상태가 된다
이번에는 실행 권한을 제거했다
실행 권한을 제거했기 때문에 root도 아니고 root 그룹에 소속하지도 않은
user1의 경우에는 권한이 없기 때문에 확인이 불가능하다
yrg 디렉터리에서 dir1이 있다는 것까지만 확인이 가능한 상태가 된다
다시 실행 권한을 주려면 +를 입력 후 실행 권한을 입력하면 된다
하지만 진입은 되지만 읽기가 불가능하다
허가 거부를 해결하기 위해서 이번에는 읽기 권한을 부여한다
읽기 권한을 부여함과 동시에 현재로써는 읽고 쓰기와 실행 권한이 모두 부여된 상태기 때문에
일반 사용자도 얼마든지 파일을 만들고 디렉터리를 만들 수 있다 물론 삭제도 가능하다
이번에는 dir1에서 제3자에서 쓰기 권한을 제거했다
w의 경우 쓰기 권한이자 삭제 권한도 있기 때문에 삭제가 되지 않는다
다시 777로 채널 모드를 돌려 놓고
dir1 디렉터리 안에 있는 하위 디렉터리와 파일들은 변동이 없다
그럴 때 와일드카드 문자와 -R 옵션을 주면
하위 디렉터리 및 파일까지 모두 채널이 변경된다
7 <-- 제3자에 허가권 부여
77 <-- 그룹, 제3자에 허가권 부여
777 <-- 소유자, 그룹, 제3자에 허가권 부여
7777 <-- 특수 허가권, 소유자, 그룹, 제3자에 허가권 부여
*뒤에서부터 적용되며, 하나만 입력한다고 해서 오류가 발생하지 않는다
하지만 특수 허가권의 경우에는 쉽게 제거되지 않는다
소유자, 그룹, 제3자, sticky bit에서 특수 허가권을 제거한다
그렇게 되면 다시 채널 모드로 권한을 부여했을 때 특수 허가권이 나타나지 않는다
chmod 45 dir1
chmod 745 dir1
chmod u-w,g+w,o-x dir1
외에도 이런 명령어들로 연습을 진행했다
chmod u-x,o+wx dir1
chmod 467 file1
chmod u=r dir1
chmod g=r dir1
'='의 경우는 세팅이다
설명하게 되면 u=r은 사용자에 읽기 권한 세팅
g=r은 그룹에 읽기 권한이 세팅되기 때문에 r을 제외한 모든 게 없어지고 r 권한만 남게 된다
chmod u=rw,g=r,o=r dir1
chmod a=r dir1
chmod a=r file1
chmod 756 dir1
chmod 777 *
a=r의 경우 사용자가 all이 되므로 읽기 권한을 세팅하게 된다
그룹을 추가시킨 후 dir1을 korea 그룹에 소속시킨다
하지만 그럼에도 user1은 dir1의 진입이 불가능하다
진입이 가능해지기 위해서는 user1도 korea 그룹에 넣어 주면 된다
korea 그룹에 user1이 소속된 것을 확인
진입이 가능하며 제3자는 다 빠져 있는 상태에 더불어 그룹 소속이기 때문에
디렉터리 및 파일 생성과 삭제 모두 가능하다
그룹의 읽기 권한을 없앨 경우
생성 및 삭제는 가능하지만 읽기 권한이 없어 허가 거부 상태가 된다
현재 user2의 경우에도 진입조차 불가능하지만,
이 경우에도 user2이 korea라는 그룹에 속해 있게 되면 user1과 마찬가지로 실행 가능해진다
다시 700으로 채널 모드를 변경시키면 아무도 dir1에 진입이 불가능해진다
그렇게 되면 사용자를 user1으로 변경시켜 주면 된다
현재 korea 그룹과 user1의 경우 읽기, 쓰기, 실행 권한이 부여된 상태기 때문에
dir1으로 진입이 가능하고 생성 및 삭제도 가능한 상태가 된다
user1의 경우는 이렇지만 user2의 경우는 사용자가 user1도 아니고,
소속 그룹이 korea도 아니기 때문에 진입부터 불가능한 상태다
대문자와 소문자로 인해 실행 권한이 있었는지 없었는지 확인이 가능하다
여러 가지 예를 들어 실행했을 때 대소문자를 구분하여
실행 권한이 있었는지 없었는지 확인하는 시간을 가졌다
sticky bit를 제외하고 setUID, setGID가 설정이 되어 있다면
제3자의 실행 권한이 다 들어 있을 때 소문자로 표시되어 있다
그렇게 되면 이 파일은 누구나 사용할 수 있는데, user1이 file1을 실행할 때
일시적으로 root 권한을 획득하게 된다
root의 tmp 파일에는 sticky bit가 기본적으로 설정되어 있다
sticky bit가 설정되어 있을 때 생성, 수정은 되나 그 파일의 삭제만큼은 그 파일의 소유자만 가능하다
*root의 경우 모두 가능하지만, 일반 사용자의 경우 그 파일의 소유자만 가능
사용자와 그룹이 user1이지만
현재 제3자의 쓰기 권한이 부여된 상태이기 때문에
user2에서 읽기, 쓰기 및 수정이 모두 가능하다
다시 제3자의 쓰기 권한을 제거한다
그렇게 되면 아까 수정 후 저장이 잘 되었던 user2의 file1 파일을
열어서 확인했을 때 하단에 [읽기 전용]이라는 문구가 나타나게 된다
I로 수정키를 눌렀을 때도 읽기 전용 파일을
고치고 있다는 경고창이 나타나기도 한다
수정은 가능하지만 esc:wq로 저장을 시도했을 때 불가능하다는 메시지가 나온다
:wq!로 강제로 저장하고 나가려고 해도 불가능하고, :q!로 강제 종료를 시도해야 된다
다시 확인했을 때 file1~으로 변경되어 나타난다
원래 사용자와 그룹 모두 user1이었지만, 읽기 전용이라고 메시지를 나타낸 후
소유자와 그룹이 바뀌며 백업 파일까지 생겨났다
파일은 파일 허가권만으로 파일을 보호할 수 없다
dir1에서 파일이 생성되고 소유자와 그룹이 바뀐다면
디렉터리에 쓰기 권한이 있다는 말이다
실질적으로 이 파일에 생성, 수정, 삭제 기능이 없어도
백업 파일이 생겨나게 되는 사태가 발생한다
파일 하나를 보호하기 위해서는 디렉터리와 연관이 있어야 된다
이렇게 디렉터리를 생성했을 때 기본적으로 755가 부여된다
root 디렉터리에 dir2를 생성 후 yrg.txt를 생성한다
yrg.txt의 소유자와 그룹을 모두 user1으로 변경
다시 uesr2의 yrg.txt에서 수정을 시도하지 읽기 전용이라는 경고 메시지가 뜨며,
수정은 가능하지만 :wq!로 강제 저장도 되지 않는 상태로 :q!로 강제 종료를 하게 된다
그렇지만 아까와는 다르게 파일이 텅 비어 있으며, 백업 파일도 생성되지 않았다
이로써 파일 하나를 보호하기 위해서는 디렉터리 권한 부여가 중요한 걸 알 수 있다
이 상태에서도 쓰기 권한을 부여하게 되면
정상적으로 수정, 저장, 삭제도 가능하게 되며
파일의 크기가 나타나며 정상적으로 저장되는 걸 확인할 수 있다
마지막으로 sticky bit에 배워 보기 위해 yrg 디렉터리에서 dir2를 777로 변경한다
이 상태에서는 모든 사용자가 읽기, 쓰기, 실행이 다 가능하다
user2에서 파일을 생성시키고,
user1 소속인 yrg.txt의 경우 삭제시켰다
user1으로 접속 후 실행해도 같은 파일이 보이며,
현재 dir의 상태가 모든 사용자가 읽기, 쓰기, 실행이 다 가능하기 때문에
현재 user1에서도 모두 가능한 상태다
하지만 dir2에서 sticky bit를 설정하게 되면
모든 사용자에게 쓰기 권한이 주어졌는데도 불구하고 삭제가 불가능하다
하지만 user2로 접속 후 삭제를 시도하면 삭제가 가능하다
사용자와 그룹이 uesr2인 건 가능하지만, user1의 파일은 허용하지 않는다
이 상황도 모든 사용자에게 쓰기 권한이 부여되어 있지만,
sticky bit를 사용하게 되면 그 파일의 소유자만 가능하게 된다
============================================
<미션>
01. 사용자 생성
> user1, user2, user3, user4, user5
02. 그룹 생성
> korea1, korea2, korea3, korea4, korea5
*그룹은 사용할 만큼만 사용
03. 디렉터리 생성(기본: /home/*)
> dir1, dir2,dir3, dir4, dir5
04. 파일 생성
> /home/dir1/seoul1.txt, seoul2.txt
> /home/dir2/daejeon1.txt, daejeon2.txt
> /home/dir3/daegu1.txt, daegu2.txt
> /home/dir4/busan1.txt, busan2.txt
> /home/dir5/gwangju1.txt, gwangju2.txt
05. 소유권, 허가권 접근 통제
> user1, user2 사용자만 dir1 디렉터리 진입 허용
> user1 사용자만 seoul1.txt 파일 읽기 허용
> user3, user4 사용자만 daejeon1.txt 파일 읽기/쓰기 허용
> user3, user5 사용자만 daejeon2.txt 파일 쓰기 허용
> user2, user3 사용자는 daejeon1.txt, daegu2.txt 파일 읽기/실행 권한만 허용
> user4, user5 사용자만 dir4 디렉터리 진입 허용
> user5 사용자만 busan1.txt 파일 수정/삭제 허용, busan2.txt 파일 읽기만 허용
> 모든 사용자에게 쓰기 권한 부여했음에도 삭제만큼은 user3 사용자(gwangju1.txt)
> 모든 사용자에게 쓰기 권한 부여했음에도 삭제만큼은 user4 사용자(gwangju2.txt)
============================================
강의 소감
오늘은 허가권에 대한 수업 내용을 진행했다
진행하면서도 어렵기도 하고, 내 선에서 이해가 가지 않는 부분이 많아서
4시간의 강의를 한 번 더 듣게 되었다
강의를 처음 들었을 때는 모르는 내용이 많았지만,
다시 들었을 때 이해가 가는 내용들이었다
하지만 미션은 완수하지 못했기 때문에 차근차근 해 보며 성공시킬 계획이다
오늘 수업은 리눅스 마스터에서 가장 중요한 분이라고 생각한다
사용자 허가권이라고 해서 쉽게만 생각했던 부분들이 단순히 쉽지만은 않았다
그렇기 때문에 보안에 있어서 수업 내용들 중에서도 특히 허가권에 대해서는
꼭 반복 복습을 통해 충분한 습득이 필요하다고 생각한다
'리눅스 마스터' 카테고리의 다른 글
리눅스 마스터 14 (0) | 2024.08.04 |
---|---|
리눅스 마스터 13 (0) | 2024.08.03 |
리눅스 마스터 11 (1) | 2024.07.27 |
리눅스 마스터 10 (5) | 2024.07.21 |
리눅스 마스터 9 (0) | 2024.07.21 |