スクリプトを取得して実行する


回答:


51

慎重に

スクリプトを実行する前に、それを書いた人を信頼していますか?

たとえば、スクリプトにこれが含まれると予想しましたか?

echo "brain1" > /etc/hostname

それはあなたのホスト名を変更しようとします。


将来の参考のために、スクリプトが正しく、悪意のないことを確認した後、次のように1行で実行できます。

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

ただし、個別にダウンロードして、初めて実行する前に読んでください。

また、この方法を使用すると、ダウンロードしたスクリプト内の対話型プロンプトが正しく機能しない可能性があることに注意してください。


9
これに関連する(重要な)セキュリティ上の懸念を指摘した+1。ソースを信頼することを絶対に確認してください。それecho "brain1" > /etc/hostnameは同じくらい簡単にできますrm -rf /
クリストファーキャシェル

2
+1ありがとう、そのスクリプトは私からのもので、安全です..ワンライナーが大好きでしたが、実行されなかったインタラクティブな行がいくつかあります。
ファビアーノソリアーニ

1
あなたのapt-get installライン?apt-get追加の依存関係をインストールする場合は、ユーザーに確認し、インストールできない場合は安全のために終了します。すべての依存パッケージをコマンドライン引数に追加するか、追加を検討してください-y。たとえば、apt-get -y install...
Mikel

この問題は依存関係とは関係ありません。これはapt flushing stdinに関係しています。
ゾレダチェ

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を使用<(...)すると仮想ファイルが作成され、そのファイル記述子はroots bashインスタンスからアクセスできないため、単純な使用はできないことに注意してください。仮想ファイルを読み取る必要のある同じユーザーで実行する必要があるため、ルートユーザーシェル内で独自のコマンドとして送信する必要があります。


1
これが最良の答えです。インタラクティブ実行と非インタラクティブ実行、特権実行の重要な側面をカバーしています。
レオニードマカロフ

5

そのスクリプトは私からです、それは安全です..ワンライナーを愛していましたが、実行されなかったいくつかのインタラクティブな行があります。

dpkgが実行されると、apt-getによって呼び出され、stdinをフラッシュします。のようなコマンドを使用しているcurl blah | bash場合、基本的にはページのコンテンツをSTDIN経由でbashに送信しています。コマンドの1つがapt-getで実行されると、他のすべてがフラッシュされます。

トリックは、このようなコマンドを使用することapt-get install --yes denyhosts </dev/nullです。これにより、apt-getに異なる入力が与えられ、スクリプトの残りの部分ではなく/ dev / nullが単純にフラッシュされます。

リモートスクリプトを介して何かをインストールする完全な例をご覧になりたい場合は、denyhostsセットアップするためにこのスクリプトをご覧ください。

記録のために、私はこのためにwgetよりもcurlを好みますが、wgetも問題ないはずです。


インタラクティブなダミースクリプトを試してみましたが、うまくいきました。xD dl.dropbox.com/u/11210438/lala.sh
Fabiano 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ダウンロードするたびにスクリプトを監査する必要があります。スクリプトは、ユーザーとDropboxの間のネットワークパス上の誰でも変更できるためです。http s://dl.dropbox.com/u/11210438/flockonus-stack.shに切り替えた場合、その不安定なソースはありません。

(Dropboxはhttp URLをhttpsにリダイレクトしようとしますが、ネットワーク攻撃の場合、wgetは実際のDropboxと通信できず、リダイレクトは表示されません)


2
質問に正確に答えるわけではないので、これはおそらく答えではなく質問に対するコメントとして残すほうがよいでしょう。確かに指摘する価値があります!
ビル・ワイス

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.