2013-02-16 2 views
4

바이너리 "스트림"을 실행할 bash 명령이 있습니까? 인터넷에서 직접 셸 스크립트를로드하고 실행하는 좋은 방법이 있습니다.컬에서 직접 바이너리를 실행

예를 들어 :

curl http://j.mp/spf13-vim3 -L -o - | sh 

은 chmod를 등 파일을 저장하지 않고 바이너리를 실행할 수 있습니까? 같은

뭔가가 :

curl http://example.com/compiled_file | exec_binary 
+0

'curl http://j.mp/spf13-vim3 -L -o - | xargs sh'? 바이너리의 경우 스크립트를 작성하여 임시 파일을 저장하고 chmod를 통해 실행 권한을 추가하여 실행할 수 있습니다. 그러나 이러한 모든 조치는 엄청난 보안 위험을 초래합니다. – harpun

+0

예, 보안상의 위험이 있습니다. 그러나 파일을 알고 있으며 이것이 문제가 아닙니다. 쉘 스크립트가 가능할 수도 있지만 쉘 스크립트가없는 더 나은 솔루션을 찾고 있습니다. – NaN

답변

8

내가 바이너리 실행 파일을 기대 알고있는 유닉스 커널은 디스크에 저장합니다. 이는 임의의 오프셋에 대한 탐색 작업을 수행하고 파일 내용을 메모리에 매핑 할 수 있도록 요구됩니다. 따라서 표준 입력에서 직접 이진 스트림을 실행하는 것은 불가능합니다.

최선의 방법은 데이터를 임시 파일에 저장하여 간접적으로 원하는 스크립트를 작성하는 것입니다.

#!/bin/sh 

# Arrange for the temporary file to be deleted when the script terminates 
trap 'rm -f "/tmp/exec.$$"' 0 
trap 'exit $?' 1 2 3 15 

# Create temporary file from the standard input 
cat >/tmp/exec.$$ 

# Make the temporary file executable 
chmod +x /tmp/exec.$$ 

# Execute the temporary file 
/tmp/exec.$$ 
관련 문제