[bandit] level 23 -> level 24
해설)
프로그램은 cron으로 작동된다. /etc/cron.d/로 이동해 실행되는 명령을 보아라.
NOTE: 이 레벨은 너에게 첫 쉘 스크립트를 창작하는 것을 요구한다. 이것은 매우 큰 일이며 너 자신을 자랑스러워해라!
NOTE2: 너의 쉘 스크립트는 한 번 실행되면 사라진다는 것을 명심하며, 복사하는 것을 명심해라.
역시나 저번과 같다. 이번 단계의 목표인 cronjob_bandit24를 읽어보자.
해당 명령어를 읽어보자.
코드들이 나온다.
해석)
myname = $(whoami) => myname에 "bandit24" 저장
cd /var/spool/$myname => /var/spool/bandit24로 이동.
echo "Executing and deleting all scripts in /var/spool/$myname:" => 해당 문자열 출력
for i in * .*; => 모든 파일에 대해 반복함.
do
if [ "$i" !="." -a "$i" != ".." ]; => 해당 파일이 . (현재 디렉토리)이 아니고 ..(상위 디렉토리)이 아니라면,
then
echo "Handling $i" => Handling [파일이름] 출력
owner="$(stat --format "%U" ./Si)" => 파일의 소유자 이름을 owner에 저장.
if [ "%{owner}" = "bandit23" ]; then => 파일의 소유자가 "bandit23" 이라면,
timeout -s 9 60 ./%i => 60초 후에 해당 파일을 종료한다.
fi
rm -f ./$i => 해당 파일 강제 삭제.
fi
done
요약하자면, /var/spool/bandit24에 존재하는 모든 파일을 실행하고 삭제하는 쉘 스크립트이다.
처음에 파일의 복사본을 만들라고 했던 이유가 이것 때문이였다.
저번처럼, tmp디렉터리 아래에 임의의 gomin디렉터리를 만든다.
gomin으로 이동 후, 아래와 같이 쉘 스크립트를 작성한다.
/etc/bandit_pass/bandit24의 내용을 gomin디렉터리 아래의 bandit_pass라는 파일에다가 복사하는 내용이다.
스크립트의 작성법은 다음과 같다.
- vi 파일이름 을 이용해서 편집모드로 들어간다.
- 첫 번째 줄에 #! /bin/bash 를 작성하고, 이후에 코드를 작성한다.
- 코드 작성이 끝나면 exit 0을 입력하고 esc를 눌러 편집모드를 비활성화 시킨 후에 :wq를 입력해서 저장 후 종료한다.
- 쉘 스크립트 파일은 실행시키기 위해 항상 chmod +x 명령어로 실행 권한을 부여해주어야 한다. 예) $ chmod +x ./test.sh
실행 권한을 임의의 숫자 777로 부여해준다.
cronjob_bandit24.sh에다가 /var/spool/bandit24/의 내용을 복사해준다.
두 번 ls -al을 해주니 bandit_pass파일이 실행된 것을 확인할 수 있다.
bandit_pass파일을 읽어준다.
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ