Điều này không có gì để làm với kịch bản của bạn. Trong vỏ Bash, ;
được xem như lệnh kết thúc chuỗi lệnh, rồi ngay sau nó là lệnh phụ. Vì vậy, trên thực tế, cách xử lý nội dung của bạn như sau.
Thực hiện lệnh trước khi ;
:
./copycron.sh /home/apple /home/pie
Thực hiện lệnh thứ hai sau lệnh ;
:
khởi động lại
Bởi vì bạn đã thực hiện có khả năng như nguồn gốc
hoặc siêu người dùng, nó đã khởi động lại thành công.
Tuy nhiên, nếu bạn làm điều gì đó cụ thể hơn và thực hiện một lệnh tùy ý khác sau ;
thay vào đó, bạn sẽ nhận thấy lệnh đó được chạy. Hai đối số của bạn cho kịch bản của bạn sẽ vẫn còn /nhà/quả táo
và /nhà/bánh
tương ứng. Kịch bản không bao giờ nhìn thấy ;khởi động lại
một phần vì điều đó không được phân tích cú pháp dưới dạng đối số. Đây là giới hạn của Bash chứ không phải thứ gì đó trong tập lệnh của bạn.
Bạn có thể kiểm tra điều này bằng tập lệnh sau và sau đó gọi lệnh:
TẬP TIN: argecho.sh
#!/bin/bash
echo "Đối số được phân tách bằng dấu cách: $*"
tiếng vang ""
tiếng vang "------"
tiếng vang ""
LỆNH ĐỂ THỰC HIỆN:
./argecho.sh foo bar baz /tmp/something.txt;echo Tôi đã làm việc khác
ĐẦU RA:
$ ./argecho.sh foo bar baz /tmp/something.txt;echo Tôi đã làm điều gì đó khác bên ngoài tập lệnh, thấy không?
Các đối số được phân tách bằng dấu cách: foo bar baz /tmp/something.txt
------
Tôi đã làm điều gì đó khác ngoài kịch bản, thấy không?
Bạn sẽ nhận thấy 'tiếng vang' và các đối số khác trong đó không được đưa vào các đối số trong tập lệnh của bạn. Đây là hành vi Bash tiêu chuẩn.
Dựa trên các chỉnh sửa của bạn, mối lo ngại của bạn là ai đó sẽ chiếm quyền điều khiển các lệnh trong kho lưu trữ Jenkins của bạn và đưa ra một lệnh độc hại, bằng cách thay đổi tập lệnh từ sh 'copycron "${Workspace}" "${targetdir}"'
đến sh copycron /home /boot; tắt máy
Thật không may cho bạn, điều này hoàn toàn không có gì bạn có thể sửa chữa, điều này sẽ dẫn đến việc bạn không thể kiểm soát đúng cách những người có quyền truy cập vào kho lưu trữ lệnh. Những kẻ đe dọa như vậy sẽ có nhiều quyền truy cập hơn để làm hỏng hệ thống của bạn, không chỉ chạy một lệnh đơn giản như những thay đổi đã nói ở trên. Họ có nhiều khả năng sẽ cài đặt phần mềm độc hại trên hệ thống của bạn hơn bất cứ thứ gì và trừ khi bạn bảo mật đúng cách các kho lưu trữ lệnh của mình để không ai có thể 'chỉnh sửa chúng một cách ngẫu nhiên', nếu không việc bạn không kiểm soát được các kho lưu trữ sẽ khiến bạn gặp rắc rối.
Chúng ta không thể làm gì khó hơn ở đây nếu người dùng jenkins cũng có đặc quyền sudo không giới hạn. Đơn giản là không, bởi vì điều này sẽ phụ thuộc vào việc bạn bảo mật hệ thống của mình đúng cách hay xây dựng một cơ chế triển khai thay thế an toàn hơn và không yêu cầu đầy đủ sudo
để làm việc với mọi thứ.