쉘 스크립트를 "샌드박스"하는 방법은 무엇입니까?

쉘 스크립트를 "샌드박스"하는 방법은 무엇입니까?

다음과 같은 쉘 스크립트가 있습니다.

#/bin/sh
#do some stuff

그러나 통역사는 다른 디렉토리에 sh없습니다 . /bin/다시 말하지만, 스크립트는 쓰기 권한이 없는 디렉터리에 폴더를 만듭니다. 나는 sed를 사용하여 디렉터리를 교체했지만 sh많은 스크립트가 서로 의존하기 때문에 그들이 생성할 수 있는 모든 디렉터리를 변경할 수는 없습니다.

Windows에서 Sandboxie가 수행하는 것과 유사하게 스크립트를 샌드박싱하여 원하는 작업을 수행할 수 있도록 파일 시스템/읽기/쓰기를 시뮬레이션할 수 있는 방법이 있습니까?

답변1

당신이 찾고 있는 것은 적어도,chroot즉, 시스템 디렉터리 트리의 하위 트리에만 액세스할 수 있는 프로그램을 실행하는 환경입니다. chroot는 파일 시스템 액세스에만 적용되며 다른 방식으로 프로세스를 제한하지 않습니다. chroot의 프로세스는 계속 네트워크에 액세스하고 chroot 외부 프로그램을 디버그할 수 있습니다.

chroot는 심볼릭 링크를 통한 파일 시스템 액세스도 제한합니다. chroot 외부를 가리키는 심볼릭 링크가 있는 경우 chroot 프로세스에서 액세스하면 절대 심볼릭 링크는 chroot의 루트에서 시작되지만 상대 심볼릭 링크는 ..chroot의 루트에서 시작되지 않습니다. 더 높습니다. 따라서 다른 위치에 있는 파일을 포함하는 chroot를 조합하려면 심볼릭 링크를 사용할 수 없습니다. 당신은 그것을 사용할 수 있습니다바인드 마운트, 파일 복사(그러나 공간을 차지하며 자동으로 업데이트되지 않음) 또는 하드 링크를 사용합니다(그러나 설정이 번거롭고 파일 시스템 전체에서 수행할 수 없음).

chroot시스템 호출은 루트에서만 호출할 수 있습니다. 루트가 아닌 사용자로서 다음을 사용할 수 있습니다.가근성대신에. 이는 동적으로 링크된 프로그램(대부분)에서만 작동합니다. Fakechroot는 여러 위치에서 디렉터리 트리를 조합할 수 있으므로 일반적으로 바인드 마운트를 사용할 필요가 없습니다(그러나 바인드 마운트가 필요한 경우 bindfs루트 권한 없이 사용할 수 있습니다).

답변2

작업 bin 디렉터리를 만들고 여기에 스크립트를 복사한 다음 디렉터리 이름을 서로게이트로 바꾸세요.

귀하의 .profile에

ORIGINAL_PATH=${ORIGINAL_PATH:=$PATH}
PATH=$HOME/bin:${ORIGINAL_PATH}
export ORIGINAL_PATH

항상 일관된 PATH가 있는지 확인하세요.

그런 다음 명령줄에서 다음을 수행합니다.

$ mkdir $HOME/bin
$ cp {the script you need} $HOME/bin
$ pushd $HOME/bin
$ vi {the script} 

쓰기 불가능한 디렉토리의 이름을 액세스할 수 있는 이름으로 변경하십시오. 따라서 다음을 수행할 수 있습니다.

$ pushd      # might take you HOME, if not cd $HOME
$ mkdir sbox # your "sandbox"
$ pushd sbox 
$ mkdir -p a/path/to/a/previously/unwriteable/ ...

후자는 디렉토리를 생성합니다.

 $HOME/sbox/a/path/to/a/previously/unwriteable/

긴 파일 경로를 잘라내어 붙여넣는 것보다 위치 매개변수를 사용하는 것이 더 유용하다고 생각합니다. 이름을 재사용하려면 다음을 수행하십시오.

$ set /DIR/Whichheld $HOME/sbox a/path/to/a/previously/unwriteable filename
$ echo $# $*

그러면 이

$ cp $1/$3/$4 $2/$3/$4 

파일 처리를 담당합니다. 많은 수의 복사본이 필요한 경우:

$ from=$1/$3
$ to=$2/$3
$ pushd $from
$ cp * $to
$ popd 
$ pushd $to

FROM의 모든 파일이 TO로 복사됩니다...

행운을 빕니다.

답변3

사용ns. 그게 다야 sed.

예를 들어 디렉토리를 숨기는 방법을 보여줍니다.

mkdir /tmp/dir && {
    rm "$_" && cd /dev/fd/3
} 3</tmp/dir

제쳐두고 - 죄송합니다. 저는 수년 동안 계속된 매우 교묘한 사기에 빠졌거나 신성에 빠져 컴퓨터에 로그인하고 유지하는 데 문제가 있습니다.

어쨌든 조심하세요!

관련 정보