21장. 제한된 쉘(Restricted Shells)

제한된 쉘에서 못 쓰는 명령어들

스크립트나 스크립트의 일부분을 제한된 모드로 동작시키는 것은 제한이 없을 경우에 쓸 수 있는 몇몇 명령어들을 쓰지 못하게 합니다. 보안상의 이유로, 스크립트 사용자의 권한을 제한시키고 스크립트를 돌려서 입을 수 있는 가능한 피해를 최소화해 줍니다.

cd로 작업 디렉토리를 바꾸기.

$PATH나, $SHELL, $BASH_ENV, $ENV 환경 변수의 값을 바꾸기.

쉘 환경 변수 옵션인 $SHELLOPTS을 읽거나 바꾸기.

출력 재지향.

/'s을 포함한 하나 이상의 명령어 실행.

쉘에서 다른 프로세스로 옮겨가기 위해서 exec 부르기.

불순한 목적으로 장난을 칠 수 있거나 스크립트를 뒤집어 엎을 수 있는 다양한 명령어들.

스크립트에서 제한된 모드를 빠져나기는 행위.

예 21-1. 제한된 모드로 스크립트 돌리기

#!/bin/bash
# 스크립트 시작부분을 "#!/bin/bash -r" 로 해 주면
# 전체 스크립트가 제한된 모드에서 동작합니다.

echo

echo "디렉토리를 바꾸겠습니다."
cd /usr/local
echo "지금은 `pwd` 에 있습니다."
echo "집(home)으로 돌아갑니다."
cd
echo "지금은 `pwd` 에 있습니다."
echo

# 여기까지는 특별한 게 없는 제한되지 않은 모드였습니다.

set -r
# set --restricted    도 같은 효과를 가져옵니다.
echo "==> 지금부터는 제한된 모드로 동작합니다. <=="

echo
echo

echo "제한된 모드에서 디렉토리를 바꾸려고 합니다."
cd ..
echo "아직도 `pwd` 에 있군요."

echo
echo

echo "\$SHELL = $SHELL"
echo "제한된 모드에서 쉘을 바꾸려고 합니다."
SHELL="/bin/ash"
echo
echo "\$SHELL= $SHELL"

echo
echo

echo "제한된 모드에서 출력을 재지향 하려고 합니다."
ls -l /usr/bin > bin.files
ls -l bin.files    # 파일이 생성됐는지 어떤지 한 번 봅시다.

echo

exit 0