스크립트를 가져 와서 실행


답변:


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.