IT/리눅스마스터1급

root shell

알콩달콩아빠 2022. 5. 19. 19:13
반응형

안녕하세요

 

뚱보 프로그래머 입니다.

 

root shell 이란 !

 

 

root shell

 

1.  SetUID의 위험성

 

어떤 사람이든 suid가 설정된 파일을 실행하면 그 파일의 소유자의 계정(ID)으로 그 프로그램이 실행된다.

 

 

 

1] cat

 

이 프로그램은 파일을 읽거나, 쓸수 있는 기능을 가지고 있다. 

 

예를 들면,

 

$cat /etc/passwd 라고 하면 /etc/passwd 파일을 읽는다.

 

만약 nadream이라는 사람이 만든 file이 있는데 permission이 일반 사용자들에게는 허가되지 않는다.

 

-rw-------   1 nadream     admin        45147  8 19  15:45 /tmp/passwd

 

$ whoami

 

guest

 

$ls -al /tmp/passwd

 

-rw-------   1 nadream     admin        45147  8 19  15:45 /tmp/passwd

 

$ls -al /bin/cat

 

-r-xr-xr-x   1 bin      bin         9388 Jul 16  1997 /bin/cat

 

$cat /tmp/passwd

 

cat: cannot open /tmp/passwd

 

/tmp/passwd 파일은 있지만 cat 으로 파일을 열수 없다.

 

guest에게는 permission이 허가되지 않는다.

 

 

 

이번에는 /tmp/passwd 파일을 읽을 수 있다.

 

$ whoami

 

guest

 

$ls -al /tmp/passwd

 

-rw-------   1 nadream     admin        45147  8 19  15:45 /tmp/passwd

 

$ls -al /bin/cat

 

-r-sr-xr-x   1 nadream      bin         9388 Jul 16  1997 /bin/cat

 

$ cat /tmp/passwd

 

해답은 바로 /bin/cat 라는 file permission을 보면 된다.

 

cat의 소유자는 nadream이고 setuid 가 설정되어 있다.

 

, 현재의 guest사용자 계정이 cat이라는 프로그램을 실행하는 순간만큼은 nadream이라는 아이디로

 

실행한 것이다.

 

2] /bin/more

 

more라는 프로그램도 cat과 같이 파일을 읽을 수 있는 기능을 가지고 있다. 하지만 cat 명령과 다른 점은 한 페이지가 넘는 문서 파일일 경우 아무 키나 누르도록 하고 화면을 정지 시킨다. 도스의 dir /p 명령과 같이 p 옵션을 줘서 화면을 멈추게 하는 것이다.

 

cat 대신 more 라는 파일에 setuid 를 주고 다시 한번 /tmp/passwd 파일을 보자.

 

$ whoami

 

guest

 

$ls -al /tmp/passwd

 

-rw-------   1 nadream     admin        45147  8 19  15:45 /tmp/passwd

 

$ls -al /bin/cat

 

-r-sr-xr-x   1 nadream      bin         21418 Jul 16  1997 /bin/more

 

$ more /tmp/passwd

 

....

 

....

 

....

 

--More--(2%)

 

 

 

cat 명령과 비슷하다.

 

다만 --More--(2%) 라는 것이 나와서 페이지 별로 내용을 볼 수 있을 뿐..

 

 

 

more 의 내부 명령

 

! (느낌표) 명령은 그 뒤에 붙인 file을 실행하라는 명령

 

!cat /tmp/passwd라고 명령을 내리면 현재의 권한으로 cat /tmp/passwd 명령과 같다.

 

 

 

2.  /bin/sh

 

/bin/sh는 자주 사용자들이 실행시키고, 무의식적으로 넘어가는 부분이다.  /etc/passwd 파일에 해당 쉘이 지정되어 있다. /bin/sh(:SHELL) 파일의 쓰임은 흔히 사용하는 도스의 command.com 파일과 같다. "명령어 해석기"라 한다. unix 시스템에 로그인을 하게 되면 /etc/passwd 파일의 마지막에 붙어있는 /bin/sh가 실행되면서 prompt가 뜨게 된다.

 

$ 혹은 #  -> 쉘이 실행된 것을 의미한다.

 

쉘이 실행되면 그때부터 유닉스의 모든 명령을 내릴 수가 있다. /bin/sh파일에 손상이 가거나 삭제되면 로그인을 못하게 되는 결과를 낳게 된다.

 

 

 

참고

 

more를 사용하는 과정에서 !/bin/sh라고 입력한다.

 

쉘을 실행했으니 $화면이 나올 것이다. 또한 현재 실행되는 suid는 유효할 것이다. 이때부터 내리는 명령마다 nadream으로 실행할 수 있을 것이다. setuid는 아직까지도 유효하기 때문이다. 아직 more 프로그램은 종료된게 아니라 more  ! 라는 내부 명령어 안에 있는 것이기 때문이다.

 

 

 

다음은 사용자들이 계정에 접속한 후 more를 실행해 !로 쉘로 빠진 경우를 보여준다.

 

login -> /bin/sh -> more -> ! -> /bin/sh -> ls , cat, vi, telnet , ftp .. 등등

 

 

 

3.  RootShell

 

setuid  root 로 설정되어 있는 쉘을 말한다.

 

실행할 파일이 /bin/sh 이고 그 소유자가 root인 경우 :

 

-r-sr-xr-x   3 root         88620 Jul 16  1997 /bin/sh

 

 

 

일반적인 /bin/sh :

 

-r-xr-xr-x   3 root         88620 Jul 16  1997 /bin/sh

 

 

 

/bin/sh를 실행하는 순간 setuid가 설정되기 때문에 root가 된다.

 

shell 자체를 root로 실행하는 것이다.

 

 

 

[ 예제 ]

 

[linux @edu00 linux]$ whoami

 

guest

 

[linux @edu00 linux]$ ls -al /bin/sh

 

-r-sr-xr-x   3 root         88620 Jul 16  1997 /bin/sh

 

[linux @edu00 linux]$ /bin/sh

 

[linux @edu00 linux]# whoami

 

root

 

[linux @edu00 linux]# exit

 

[linux @edu00 linux]$ whoami

 

guest

 

shell 자체가 종료될 때까지는 setuid가 유효 하다.

 

LIST

'IT > 리눅스마스터1급' 카테고리의 다른 글

접근제어  (0) 2022.05.19
kernel 관리  (0) 2022.05.19
쉘 스크립트  (0) 2022.05.19
shell이란  (0) 2022.05.19
에디터  (0) 2022.05.19