강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

5. 레벨 4를 향하여

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle04.gif

기 까지 공부해 오느라고 대단히 수고가 많았다. 여러분들은 열심히 한만큼 자신의 내공이 상승하여 이제는 몸이 어느 정도 땅에서 떠 있을 것이다. 맞는가??? 그러나 자만하면 안된다. 아직도 갈길이 멀다. 특히 이번 문제는 많은 집중력과 이해력을 필요로 한다. 항상 겸손한 자세로 실력을 쌓자.

icon04.gif4. level3 문제 풀이
######### # 문제 # #########
항상 약속을 자주 잊어 버리는 서모씨는 번번히 주위로부터 원망을 산다. 서모씨는 고심하던 중 자신이 매일 아침 리눅스 서버에 로긴한다는 사실을 알고는 매번 로긴할 때마다 오늘의 날짜를 알려주면 편리하겠다는 사실을 알았다. 그래서 date 컴맨드를 이용하여 오늘의 날짜만 YYYY-MM-DD 형식으로 간단히 출력해주는 프로그램을 씨언어를 이용해서 프로그래밍을 하고는 누가 볼까 두려워 특정 디렉토리에 꽁꽁 숨겨 두었다. 이를 찾아서 다음 레벨을 진입하시오. 해커즈랩에 텔넷이나 데이터맨 프로그램으로 접속한다. login:level3 passwd:xxxxxxxx [level3@drill level3]$ id uid=2003(level3) gid=2003(level3) groups=2003(level3), 9999(hackerzone) [level3@drill level3]$ whoami level3 서모씨가 작성한 파일이 문제의 열쇠가 될 것이다. 그리고 그 파일에는 set uid버그가 존재할 것이다. [level3@drill level3]$ find / -user level4 -group level3 -perm -4000 -print /usr/man/pt_BR/man8/today 실행시켜 본다. [level3@drill level3]$ cd /usr/man/pt_BR/man8 [level3@drill man8]$ ./today <-- 상대경로로 명령을 실행하고 있다. 03/15/00 켁!! 아무런 변화도 없고 별 영향도 없는 듯하다. 그리고 파일의 실행도 금방 끝나버려 파일을 조작해서는 어찌할 수도 없을 것 같다. (이럴때가 젤루 난감하다.) 문제를 찬찬히 살펴 볼 수 밖에 없다. 일단 여러분이 염두에 두어야 할 것은 앞에서도 설명을 했지만 PATH라는 것이다. 예를 들어 보자. date라는 명령과 today라는 명령은 둘다 실행파일로 되어있다. 하지만 둘사이에는 명백한 차이가 있다. 아무 디렉토리에서나 date명령을 내려보라. 어떤 디렉토리에서도 date명령은 먹힌다. 하지만 아무 디렉토리에서나 today명령을 내려보라. [level3@drill home]$ today sh: today: command not found 라는 결과가 나올 것이다. 오직 /usr/man/pt_BR/man8/ 디렉토리에서만 실행을 시켜야 명령이 먹힌다. 또는 절대경로로 실행시켜 주어야 한다. [level3@drill man8]$ ./today 왜 이런 차이가 생기는가?? 그 차이는 바로 PATH에 경로가 지정 되었느냐 안되었느냐의 차이이다. 다음과 같이 명령을 내려보자. [level3@drill level3]$ set | less *중략* IFS= *중략* PATH=/usr/local/bin:/bin:/usr/bin:/usr/x11R6/bin 위의 예처럼 PATH에 잡혀진 경로 순서대로 명령어를 찾아 이 경로에 명령어가 존재하면 어느 디렉토리에서나 명령어가 실행되게 되어 있는 것이다. 그러니까 PATH에 /usr/man/pt_BR/man8이라는 경로를 추가해 주면 today라는 명령은 어느 디렉토리에서나 실행되어지는 것이다. 위의 PATH에서 알 수 있듯이 today란 실행파일은 date란 명령어를 사용해서 만들어 졌고 date란 명령어는 /bin 하위에 위치하고 있다. 따라서 우리는 today란 파일을 실행시켰을 때 level4의 권한으로 /bin/date란 명령어를 실행시키고 있는 것이다. 그러니까 date는 /bin하위에 위치해 있는 PATH가 설정된 명령어이고 today는 date라는 명령어를 필요로 하는 PATH가 설정되어 있지 않은외부명령어인 것이다. 그렇다면 /bin/date란 명령어를 level4의 권한으로 실행시키고 있다면, /bin/pass를 level4의 권한으로 실행실킬 수도 있지 않을까?? 어떻게??? 그렇다 /bin/date를 /bin/pass로 바꾸면 되지 않을까? 무슨 말인고 하니 today는 /bin/date를 호출하고 있지만 정작 실행되는 것은 /bin/pass가 되게 하는 것이다. 그런 것이 뭐가 있을까? 바로 쉘스크립트나 프로그램이다. 다시 말해서 bin 이라는 파일명의 쉘 스크립트의 내용을 /bin/pass로 하고 today가 실행되면 /bin/date가 실행되는 것이 아니라 이 bin이라는 쉘스크립트가 실행되게 하는 것이다. 그럼 어떻게 /bin/date 대신에 bin이라는 쉘을 실행하게 할 수가 있을까? 그것이 바로 환경변수 IFS의 조작이다. tip)쉘스크립트라는 것은 도스 사용자들에게는 아주 익숙하게 사용되던 배치 파일의 개념과 동일하다. 리눅스를 더 많이 공부하려면 이 쉘스크립트를 열심히 공부해야 한다. [level3@drill level3]$ set | less *중략* IFS= *중략* PATH=/usr/local/bin:/bin:/usr/bin:/usr/x11R6/bin 위에서 보았던 환경설정 파일의 내용이다. 여기서 IFS부분을 보자 아무것도 없다. 이것은 바로 명령어와 명령어를 구분시켜 주는 것으로 예를 들면 ls -al하고 명령을 내릴 때 ls 와 -al사이를 한 칸 띄우는 것을 말한다. 즉 환경변수 IFS를 IFS=/ 로 바꿔 주면 지금의 ls -al은 ls/-al로 바꿔 명령해야 할 것이다. 자 우선 /bin/date를 /bin/pass로 바꿔 줄 쉘스크립트를 작성해 보자. [level3@drill level3]$cd /tmp 해석)/밑에 tmp로 디렉토리를 옮겨라 [level3@drill tmp]$cat > bin 해석)bin이라는 파일을 만들고 그안에 무언가를 적겠다. #!/bin/sh 해석)사용할 쉘 지정 /bin/pass 해석)명령 내용 지정 ^D 해석)끝(콘트롤 + D) 파일의 퍼미션은 최소한 소유권자에게 실행 권한을 부여한다. [level3@drill tmp]$chmod 755 ./bin 해석)현재 위치의 bin이라는 파일의 소유권한을 755로 바꾸겠다.(chmod) 그 다음은 환경변수를 바꿔주어야 한다. [level3@drill tmp]$IFS=/ [level3@drill tmp]$export IFS <---바뀐 내용을 컴퓨터에게 알려줌 자 이제 today를 실행시켜 보자. today를 실행시키면 /bin/date가 실행되는데 환경변수 IFS가 /로 바뀌었으므로 사실적으로 /bin/date는 bin date라고 인식돼 bin이라는 쉘이 수행될 것이다. [level3@drill tmp]$ /usr/man/pt_BR/man8/today 절대경로로 명령을 내리고 있다. sh: bin: command not found 눈이 번쩍 뜨인다. 분명 우리가 작업을 해놓은 쉘스크립트(bin)의 이름이 보인다. 이것은 today를 실행 하기위해 /bin/date를 실행시키려 했으나 환경변수에 의해서 bin을 수행하게 된다. 그러나 bin은 PATH에 경로가 잡혀 있지 않다. 마지막으로 bin의 경로를 PATH에 걸어 주자. [level3@drill tmp]$PATH=/tmp [level3@drill tmp]$export PATH 이제 today를 실행시켜보자. [level3@drill tmp]$/usr/man/pt_BR/man8/today 정답이 보이는가??? 이번 레벨에서는 상당히 힘들었을 것이라는 생각을 한다. 그러니 여러분 제발 우쭐대지 말기 바란다. 여러분이 공부할 것은 아직도 많다. 혹시 잘 안되신 분들이 있다면 다시 한번 보고 따라하기 바란다. 개념을 잡도록 노력하자 축하한다. 다음 단계로 진입!!!!!
===================================================================================================

이 사이트에서 제공하고 있는 내용은 개인의 경험을 바탕으로 제공되고 있습니다.
그러므로 이용시 예기치 않은 오류가 발생할 수도 있음을 알려드립니다.
여러분이 도움 및 정보를 바라신다면 저에게 메일을 보내 주십시요. 감사합니다.

www.dacker.wo.to copyleft (c) 2000 by park byoung-seo all lefts reserved

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,063 명
  • 현재 강좌수 :  35,955 개
  • 현재 접속자 :  212 명