Bir betiği yaz ve çalıştır


Yanıtlar:


51

Dikkatli

Senaryoyu çalıştırmadan önce, yazan kişiye güveniyor musunuz?

Örneğin, betiğin bunu içermesini bekliyor muydunuz?

echo "brain1" > /etc/hostname

Bu, ana bilgisayar adınızı değiştirmeye çalışır.


Gelecekte başvurmak için, komut dosyasının doğru olduğunu ve kötü niyetli olmadığını doğruladıktan sonra, aşağıdaki gibi bir satırda çalıştırabilirsiniz:

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

Ancak, ayrı olarak indirin ve ilk kez çalıştırmadan önce okuyun.

Ayrıca, indirilen betiğin içindeki etkileşimli istemlerin bu yöntemi kullanarak düzgün çalışmayabileceğini unutmayın.


9
Bununla ilgili (önemli) güvenlik kaygılarını belirtmek için +1. Kaynağa güvendiğinizden emin olun. Bu echo "brain1" > /etc/hostnamekadar kolay olabilir rm -rf /.
Christopher Cashell

2
+1 Teşekkürler çocuklar, bu senaryo benden, güvenli ... Tek astarı sevdim, ama akmayan bazı etkileşimli çizgiler var .. neden olmasın?
Fabiano Soriani

1
Sizin apt-get installçizgiler? Herhangi apt-getbir ekstra bağımlılık kurarsanız, size soracak ve eğer yapamazsa güvenli olması için çıkacaktır. Tüm bağımlı paketleri komut satırı argümanlarına ekleyin ya da eklemeyi düşünün -y, örn.apt-get -y install...
Mikel

Sorun bağımlılıklarla ilgili değil, apt flushing stdin ile ilgili.
Zoredache

1
Orta saldırılardaki adam nedeniyle “kaynağa güven” bile yapsanız bile kaynağa güvenemezsiniz. Bununla birlikte, bash betiği olan rastgele özel URL'ler, onu kaldırabilecek hiç kimsenin bunu yapması için umursamadığı kadar dar bir saldırı vektörü olmalıdır.
SpamapS

9

Etkileşimli Olmayan Komut Dosyaları

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

Bu yöntemi kullanırken, etkileşimli komut dosyalarının çalışmayacağını unutmayın.


İnteraktif Scriptler

Etkileşimli komut dosyalarının çalışmasını sağlamak için bunu kullanabilirsiniz:

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

Kök olarak çalıştırılması gereken Etkileşimli Komut Dosyaları

Uyarı: Bu son derece tehlikelidir. Tavsiye edilmez.

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

sudo bashKullanmanın <(...)sanal bir dosya oluşturacağından ve bunun dosya tanımlayıcısına kök bash örneğinden erişilemeyeceğinden, kullanımı basit yapamayacağınızı unutmayın . Sanal dosyayı okuması gereken aynı kullanıcı üzerinde yürütülmesi gerekir, bu nedenle kök kullanıcı kabuğuna kendi komutu olarak gönderilmesi gerekir.


1
Bu en iyi cevap. Etkileşimli ve etkileşimli olmayan etkileşimli rakip ayrıcalıklı yürütmenin önemli yönlerini kapsar.
Leonid Makarov

5

Bu senaryo benden, güvenli .. Bir liner'ı çok sevdim, ama, yayınlanmayan bazı etkileşimli çizgiler var .. neden olmasın?

Dpkg çalıştığında apt-get adındaki stdin'i temizler. Eğer böyle bir komut kullanıyorsanız curl blah | bash, o zaman temel olarak STDIN üzerinden bash sayfasına sayfanın içeriğini gönderiyorsunuzdur. Komutlarınızdan biri apt-get ise, o zaman çalışır, diğer her şey silinir.

İşin püf noktası, böyle bir komut kullanmaktır apt-get install --yes denyhosts </dev/null. Bu, apt-get öğesine farklı bir girdi verir ve betiğinizin geri kalan kısmı yerine / dev / null komutunu kullanır.

Uzak bir komut dosyasıyla bir şey yüklemenin tam bir örneğini görmek istiyorsanız, denyhost'ları ayarlamak için bu komut dosyasına bakmak isteyebilirsiniz.

Kayıt için, bunun için wget üzerinde kıvrılmayı tercih ediyorum, ama wget da iyi olmalı.


Bazı interaktif kukla bir senaryo ile çalıştım, işe yaradı dostum .. Anlamadım
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

Bu örneklerin hepsinde oldukça önemli bir nokta eksik. URL'yi kullanıyorsanız, http://dl.dropbox.com/u/11210438/flockonus-stack.shbetiği her indirdiğinizde denetlemeniz gerekir, çünkü siz ve dropbox arasındaki ağ yolundaki herhangi biri tarafından değiştirilebilir. Eğer geçerseniz http ler : //dl.dropbox.com/u/11210438/flockonus-stack.sh , sen güvensizlik bu kaynağı olmayacaktır.

(Dropbox, http URL’yi https’ye yönlendirmeye çalışır, ancak bir ağ saldırısı durumunda wget hiçbir zaman gerçek dropbox’la konuşamaz ve yönlendirmeyi asla görmez.)


2
Bu muhtemelen, soruya tam olarak cevap vermediğinden, soruya bir yorum olarak bırakılmalıdır. Yine de kesin olarak işaret etmeye değer!
Bill Weiss,

2

Wget ile belirttiğiniz gibi indirmeyi ve sonra doğrudan çalıştırmayı deneyin. Fantezi ve indirmek istediğiniz komut dosyası vb değişkenleri kullanabilirsiniz, ancak bu hile yapacak

Örneğin:

!#/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

Sistemime bunu başlangıçta yapmasını nasıl söylerim?
Metallkiller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.