오래 못 할 짓 하지 않기

[ 컴퓨터 보안 ] 2. Linux 권한 관련 본문

3학년 2학기/컴퓨터 보안(Computer Security)

[ 컴퓨터 보안 ] 2. Linux 권한 관련

쫑알bot 2024. 9. 3. 19:33
728x90

우선 시작 전에 알아놓으면 이해하기 편한 것

 

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 에 관해서는 허용하지 않는다.

 

 

 

(출처)

한동대학교 고윤민교수님 - 컴퓨터보안