Quên một kịch bản và chạy nó


Câu trả lời:


51

Cẩn thận

Trước khi chạy kịch bản, bạn có tin tưởng người đã viết nó không?

Ví dụ, bạn có mong đợi tập lệnh chứa cái này không?

echo "brain1" > /etc/hostname

Điều đó sẽ cố gắng thay đổi tên máy chủ của bạn.


Để tham khảo trong tương lai, nếu, sau khi xác minh tập lệnh là chính xác và không độc hại, bạn có thể chạy nó trong một dòng như thế này:

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

Nhưng tải về riêng và đọc nó trước khi chạy nó lần đầu tiên.

Cũng lưu ý rằng lời nhắc tương tác bên trong tập lệnh được tải xuống có thể không hoạt động đúng bằng phương pháp này.


9
+1 để chỉ ra mối quan tâm bảo mật (đáng kể) với điều này. Hãy chắc chắn rằng bạn tin tưởng nguồn. Điều đó echo "brain1" > /etc/hostnamecó thể dễ dàng như vậy rm -rf /.
Christopher Cashell

2
+1 Cảm ơn các bạn, kịch bản đó là của tôi, nó an toàn .. Yêu thích một-liner, nhưng, nó có một số dòng tương tác không chạy .. dunno tại sao?
Fabiano Soriani

1
Dòng của bạn apt-get install? Nếu apt-getsẽ cài đặt bất kỳ phụ thuộc bổ sung nào, nó sẽ hỏi bạn, và nếu không thể, nó sẽ thoát ra để được an toàn. Hoặc thêm tất cả các gói phụ thuộc vào các đối số dòng lệnh, hoặc xem xét thêm -y, ví dụ nhưapt-get -y install...
Mikel

vấn đề không liên quan đến sự phụ thuộc, nó phải làm với apt tuôn ra apt.
Zoredache

1
Bạn thực sự không thể tin tưởng vào nguồn ngay cả khi bạn "tin vào nguồn" vì con người trong các cuộc tấn công ở giữa. Điều đó nói rằng, các url riêng tư ngẫu nhiên với các tập lệnh bash phải là một vectơ tấn công đủ hẹp để không ai có khả năng kéo nó ra khỏi sự quan tâm đủ để làm điều đó.
SpamapS

9

Tập lệnh không tương tác

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

Lưu ý rằng khi sử dụng phương pháp này, các tập lệnh tương tác sẽ không hoạt động.


Tập lệnh tương tác

Để các kịch bản tương tác hoạt động, bạn có thể sử dụng:

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

Tập lệnh tương tác cần được chạy bằng root

Cảnh báo: Điều này cực kỳ nguy hiểm. Không được khuyến khích.

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

Lưu ý rằng bạn không thể sử dụng đơn giản sudo bashvì việc sử dụng <(...)sẽ tạo một tệp ảo và mô tả tệp của nó sẽ không thể truy cập được từ ví dụ bash gốc. Nó phải được thực thi trên cùng một người dùng cần đọc tệp ảo, vì vậy nó phải được gửi dưới dạng lệnh riêng bên trong vỏ người dùng gốc.


1
Đây là câu trả lời tốt nhất. Nó bao gồm các khía cạnh quan trọng của việc thực hiện tương tác và không tương tác với đặc quyền.
Leonid Makarov

5

Kịch bản đó là của tôi, nó an toàn .. Yêu thích một lớp lót, nhưng, nó có một số dòng tương tác không chạy .. dunno tại sao?

Khi dpkg chạy, được gọi bởi apt-get, nó sẽ xóa stdin. Nếu bạn đang sử dụng một lệnh như thế curl blah | bash, thì về cơ bản bạn đang gửi nội dung của trang để bash thông qua STDIN. Nếu một trong các lệnh của bạn là apt-get, sau đó chạy, mọi thứ khác sẽ bị xóa.

Bí quyết là sử dụng một lệnh như thế này apt-get install --yes denyhosts </dev/null. Điều này mang lại cho apt-get một đầu vào khác và nó chỉ đơn giản là xóa / dev / null thay vì phần còn lại của tập lệnh của bạn.

Nếu bạn muốn xem một ví dụ hoàn chỉnh về việc cài đặt một cái gì đó thông qua một tập lệnh từ xa, bạn có thể muốn xem tập lệnh này để thiết lập denyhosts

Đối với hồ sơ, tôi thích cuộn tròn hơn wget cho điều này, nhưng wget cũng sẽ ổn.


Tôi đã thử với một kịch bản giả với một số tương tác, nó hoạt động rất tốt .. Tôi không hiểu nó 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

Tất cả những ví dụ này đều thiếu một điểm khá quan trọng. Nếu bạn sử dụng url http://dl.dropbox.com/u/11210438/flockonus-stack.sh, bạn cần kiểm tra tập lệnh mỗi khi bạn tải xuống, bởi vì nó có thể được sửa đổi bởi bất kỳ ai trên đường dẫn mạng giữa bạn và dropbox. Nếu bạn chuyển sang http s : //dl.dropbox.com/u/11210438/flockonus-stack.sh , bạn sẽ không có nguồn không an toàn đó.

(Dropbox cố gắng chuyển hướng URL http sang https, nhưng trong trường hợp bị tấn công mạng, wget sẽ không bao giờ nói chuyện với dropbox thực sự và sẽ không bao giờ thấy chuyển hướng)


2
Điều này có lẽ tốt hơn để lại như là một nhận xét cho câu hỏi, không phải là một câu trả lời, vì nó không trả lời chính xác câu hỏi. Vẫn còn giá trị chỉ ra cho chắc chắn!
Bill Weiss

2

Hãy thử tải xuống đơn giản như bạn đã chỉ định với wget và sau đó thực hiện trực tiếp. Bạn có thể nhận được ưa thích và sử dụng các biến cho tập lệnh bạn muốn tải xuống, nhưng điều này sẽ thực hiện thủ thuật

Ví dụ:

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

Làm thế nào tôi có thể nói với hệ thống của tôi thực sự làm điều này khi khởi động?
Metallkiller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.