오래 못 할 짓 하지 않기
[ 컴퓨터 보안 ] 2. Linux 권한 관련 본문
우선 시작 전에 알아놓으면 이해하기 편한 것
User ID나 유저와 관련된 정보는 /etc/passwd 에 저장되어 있다.
User
권한 관련해서 알 수 있는 것은 다음과 같다.
-( Owner ) ( Group ) ( Other )
📌 User에 관한 작업
- adduser/deluser : 유저를 추가/삭제
- su 다른 유저 : 다른 유저로 변경
Group
: 유저들의 집합
한 유저는 여러 그룹에도 속할 수 있음
📌 그룹 정보 확인하는 방법
- seed 그룹에 속한 사람들을 보는 방법 = grep
- 어느 그룹이 있는지 보는 법 = groups
- 지금 로그인한 유저가 어느 그룹에 있는지 보는 법 = id
📌 그룹에 유저 추가하기
- sudo groupadd 팀1 ➡️ 팀1 이라는 그룹 하나를 만든다.
- sudo usermod -a -G 팀1 Eddy ➡️ 팀1에 Eddy를 추가한다.
= usermod -a -G (group name) (user to be added)
‼️ 유저는 유저 그 자체로 그룹이다
전형적인 권한 제어
📌 File 에 대한 Access 종류
- read (r) : 파일을 읽을 수 있다.
- write (w) : 파일의 내용을 수정할 수 있다.
- execute (x) : 파일을 실행시킬 수 있다. ( 파일이 프로그램일 때 )
📌 Directory 에 대한 Access 종류
- read (r) : 디렉토리에 있는 파일들을 조회할 수 있다.
- write (w) : 현재 디렉토리에 새로운 파일이나 Sub-dir를 만들 수 있다.
- execute (x) : 디렉토리에 들어갈 수 있다.
예)
파일에 대한 유저의 권한을 [ chmod ] 를 통해 바꿀 수 있다.
➡️ chmod ### 파일이름
물론 자기가 그 파일의 주인일 때 가능
umask
: 새로 생성되는 파일이나 디렉토리에 대한 권한을 제한하는 역할
앞에 0은 기본으로 들어간다.
나머지 3개를 보고 계산한다.
하나의 숫자 ➡️ 3비트 이진법으로 변환한다.
그리고 모두 NOT을 적용시킨 뒤에
기존 파일과 'umask 를 AND 연산한 결과를 가져오면 된다.
예)
우선 ls -s t1 을 통해
파일의 기존 접근 권한 형태는 110 110 100인 것을 알 수 있다.
t1은 umask 0002를 받는다
t2는 umask 0022를 받는다.
t3는 umask 0777을 받는다.
t1 umask = 000 000 010
umask' = 111 111 101
기존 권한 = 110 110 100
결과 = 110 110 100
t2 umask = 000 010 010
umask' = 111 101 101
기존 권한 = 110 110 100
결과 = 110 100 100
t3 umask = 111. 111. 111
umask' = 000 000 000
기존 권한 = 110 110 100
결과 = 000 000 000
📌 특정 파일에 관한 Access 정보 get/set
- 해당 파일에 대한 access 정보(Access Control List) 가져오기
> getfacl 파일이름
다음과 같은 정보가 나온다.
- 해당 파일에 대한 access 정보(Access Control List) 가져오기
> setfacl {-m , -x } { u , g } : < user name >: [ r,w,x] < file , dir name
이런 과정을 거친 파일엔 하나의 표식이 남는다.
이 파일에 대해서 ls -l 을 하면
권한 관련된 부분 뒤에 +가 붙는다.
Privilege와 명령어를 실행시키기
Privilege를 가지고 명령어를 돌리는 방법엔 3가지가 있다.
- sudo
- Set-UID programs (coverd in next section)
- POSIX capabilites
📌sudo
: super-user do
즉 super user가 되어 명령어를 실행한다.
( 하지만 이렇게 추가적으로 사용하려는 sudo user는 /etc/sudoers 에 등록이 되어있어야 한다. )
( sudo 는 이미 등록이 되어있어서 가능한 거다.)
sudo 그룹에 seed 가 들어있기 때문에
seed 유저가 sudo 명령어를 사용할 수 있다.
root 권한으로 할 수 있는 게 비슷하긴 한데
root 권한으로만 지울 수 있는 파일들이 있다.
그렇게 해서 꼬이는 게 많기 때문에, 그냥 root 대신 sudo를 사용하는 것이 안전하다.
📌POSIX Capabilites
- CAP_DAC_OVERRIDE
= file read,write,execute 권한이 있는지 검사를 하지 않고 넘어간다.
- CAP_DAC_READ_SEARCH
= file read 권한이랑 Directory read,execute 권한이 있는지 검사를 하지 않고 넘어간다.
예)
- Before에서는 읽는 권한이 없었던 상황이어서
cat < /etc/shadow
위 명령어가 fail했다.
- getpcaps $$ = 현재 process id의 capabilites를 받는다.
권한 설정을 한 뒤에는 제대로 cat이 된다.
cat > /zzz는 왜 안되냐?
➡️ CAP_DAC_READ_SEARCH 는 Read 랑 Execute 관련된 권한만 허용하고
Write 에 관해서는 허용하지 않는다.
(출처)
한동대학교 고윤민교수님 - 컴퓨터보안
'3학년 2학기 > 컴퓨터 보안(Computer Security)' 카테고리의 다른 글
[ 컴퓨터 보안 ] 5. Buffer Overflow (0) | 2024.10.05 |
---|---|
[ 컴퓨터 보안 ] 4. Capability Leaking / Environment Variable (0) | 2024.09.10 |
[ 컴퓨터 보안 ] 3. Authentication (인증) + Set-UID 특수권한 (0) | 2024.09.06 |
[ 컴퓨터 보안 ] 1. Security의 개념 (0) | 2024.08.30 |
Buffer Overflow (0) | 2024.08.14 |