스크립트를 가져 와서 실행


답변:


51

꼼꼼한

스크립트를 실행하기 전에 스크립트를 작성한 사람을 믿습니까?

예를 들어, 스크립트에이 내용이 포함될 것으로 예상 했습니까?

echo "brain1" > /etc/hostname

호스트 이름을 변경하려고 시도합니다.


나중에 참조 할 수 있도록 스크립트가 정확하고 악성이 아닌지 확인한 후 다음과 같이 한 줄로 실행할 수 있습니다.

wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash

그러나 처음으로 실행하기 전에 별도로 다운로드하여 읽으십시오.

또한이 방법을 사용하면 다운로드 한 스크립트 내의 대화식 프롬프트가 제대로 작동하지 않을 수 있습니다.


9
이것으로 (중요한) 보안 문제를 지적하기 위해 +1. 출처를 신뢰해야합니다. 그것은 echo "brain1" > /etc/hostname쉽게 할 수 있습니다 rm -rf /.
— Christopher Cashell

2
+1 고맙습니다. 저 스크립트는 안전합니다 .. 한 줄을 좋아했지만, 실행되지 않은 대화식 라인이 있습니다. 왜 그런가요?
— Fabiano Soriani

1
당신의 apt-get install라인? 경우 apt-get여분의 종속성을 설치합니다, 당신을 물어볼 것, 그리고 그것을 그냥 종료됩니다 수없는 경우 안전을 위해. 명령 행 인수에 모든 종속 패키지를 추가하거나 다음을 추가하십시오 -y.apt-get -y install...
— Mikel

이 문제는 종속성과 관련이 없으며 apt flushing stdin과 관련이 있습니다.
— Zoredache

1
중간 공격의 사람으로 인해 "소스를 신뢰"하더라도 실제로 소스를 신뢰할 수 없습니다. 즉, bash 스크립트가있는 임의의 개인 URL은 그것을 좁힐 수있는 능력을 가진 사람이 아무도 신경 쓰지 않을 정도로 충분히 좁은 공격 경로이어야합니다.
— SpamapS

9

비 대화식 스크립트

wget -O - http://website.com/my-script.sh | bash

이 방법을 사용하면 대화식 스크립트가 작동하지 않습니다.


대화식 스크립트

대화 형 스크립트를 작동 시키려면 다음을 사용할 수 있습니다.

bash <(wget -qO- http://website.com/my-script.sh)

루트로 실행해야하는 대화식 스크립트

경고 : 이것은 매우 위험합니다. 권장하지 않습니다.

sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root

sudo bash사용 <(...)하면 가상 파일이 생성되고 루트 설명 인스턴스에서 파일 디스크립터에 액세스 할 수 없으므로 단순하게 사용할 수 없습니다 . 가상 파일을 읽어야하는 동일한 사용자에서 실행해야하므로 루트 사용자 쉘 내에서 자체 명령으로 전송해야합니다.


1
이것이 가장 좋은 대답입니다. 대화식 대 비 대화식 대 권한 실행의 중요한 측면을 다룹니다.
— Leonid Makarov

5

그 대본은 나에게서 왔고 안전합니다 .. 한 줄짜리를 좋아했지만, 실행되지 않은 대화식 선이 있습니다. 왜 그럴까요?

apt-get에 의해 호출 된 dpkg는 stdin을 플러시합니다. 과 같은 명령을 사용하는 경우 curl blah | bash기본적으로 STDIN을 통해 페이지 내용을 bash로 보냅니다. 명령 중 하나가 apt-get이고 실행되면 다른 모든 항목이 플러시됩니다.

트릭은 이와 같은 명령을 사용하는 것 apt-get install --yes denyhosts </dev/null입니다. 이것은 apt-get에게 다른 입력을 제공하고 나머지 스크립트 대신 / dev / null을 플러시합니다.

원격 스크립트를 통해 무언가를 설치하는 완전한 예를 보려면이 스크립트를보고 거부 호스트 를 설정하십시오

레코드의 경우 wget보다 curl을 선호하지만 wget도 괜찮습니다.


나는 어떤 상호 작용을 가진 더미 스크립트를 시도, 그것은 친구를했다 .. 나는 그것이 XD하지 않는 dl.dropbox.com/u/11210438/lala.sh
— 파비아누 Soriani

4
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
    wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi

sh /tmp/flockonus-stack.sh

4

이 모든 예에는 상당히 중요한 요점이 없습니다. url을 사용하는 경우 사용자 http://dl.dropbox.com/u/11210438/flockonus-stack.sh와 보관 용 계정 사이의 네트워크 경로에있는 모든 사람이 스크립트를 수정할 수 있으므로 다운로드 할 때마다 스크립트를 감사해야합니다. http s dldl.dropbox.com/u/11210438/flockonus-stack.sh로 전환하면 해당 소스가 불안정 해집니다.

(Dropbox는 http URL을 https로 리디렉션하려고 시도하지만 네트워크 공격의 경우 wget은 실제 보관 용 계정과 통신하지 않으며 리디렉션을 볼 수 없습니다)


2
이것은 질문에 정확하게 대답하지 않기 때문에 대답이 아닌 질문에 대한 의견으로 남겨 두는 것이 좋습니다. 아직도 지적 할 가치가 있습니다!
— Bill Weiss

2

wget으로 지정한대로 간단히 다운로드 한 다음 직접 실행하십시오. 다운로드하려는 스크립트에 변수를 사용하고 변수를 사용할 수는 있지만 트릭을 수행합니다.

예를 들면 다음과 같습니다.

!#/bin/bash

#Change to temp directory
cd /tmp

#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh

#Execute the file

sh flockonus-stack.sh

시스템을 시작할 때 시스템에서 실제로이 작업을 수행하도록하려면 어떻게해야합니까?
— Metallkiller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.