Sử dụng sudo với mật khẩu làm tham số [đóng]


83

Tôi muốn chạy sudo với mật khẩu của mình làm tham số để tôi có thể sử dụng nó cho một tập lệnh. Tôi đã thử

sudo -S mypassword execute_command

nhưng không có bất kỳ thành công. Bất kỳ đề xuất?


2
bạn chỉ nên kiểm tra xem script của bạn có được chạy bởi "root" hay không. Nó xấu để lặp lại mật khẩu, nó sẽ được tìm thấy trong lịch sử ...
kbdjockey

4
Tốt hơn hết là bạn nên cấu hình sudođúng cách để nó không hỏi mật khẩu cho một số chương trình / người dùng / nhóm nhất định để tránh những vụ hack bẩn như vậy.
cao điểm

Câu trả lời:


183

Công tắc -S làm cho sudo đọc mật khẩu từ STDIN. Điều này có nghĩa là bạn có thể làm

echo mypassword | sudo -S command

để chuyển mật khẩu cho sudo

Tuy nhiên, các đề xuất của những người khác không liên quan đến việc chuyển mật khẩu như một phần của lệnh, chẳng hạn như kiểm tra xem người dùng có phải là root hay không có lẽ là ý tưởng tốt hơn nhiều vì lý do bảo mật


mà đã làm việc, cảm ơn rất nhiều !!
normalUser

đã lưu ngày của tôi, cảm ơn rất nhiều !!!
AdrianES

Làm thế nào về việc đặt nó trong một thư mục chuyên dụng cấp cho cả nó và thư mục quyền chỉ thực thi sudo chmod -R 0100 myScriptFolder:? Điều đó sẽ không giải quyết được các vấn đề bảo mật (miễn là không ai sử dụng máy tính của bạn làm root ngoài bạn)?
Brōtsyorfuzthrāx

Hay tin tặc từ bên ngoài mạng cục bộ của tôi bằng cách nào đó có thể nhìn thấy văn bản tập lệnh khi nó được thực thi, trong một số trường hợp nhất định?
Brōtsyorfuzthrāx

Điều này đã hoạt động như một nhà vô địch đối với tôi trên hộp OSX của tôi! Cảm ơn rất nhiều vì đã chia sẻ giải pháp!
Wulf

51

Bạn có thể đặt sbit cho tập lệnh của mình để nó không cần sudovà chạy dưới dạng root (và bạn không cần viết mật khẩu gốc của mình trong tập lệnh):

sudo chmod +s myscript

+1. Đây là cách tốt hơn (và an toàn hơn) so với các phương pháp khác.
Burkhard

1
dính bit là thực hành xấu không?
kbdjockey

@kbdjockey - +slà bit setuid. +tlà bit dính.
Robᵩ

@ Rob - cảm ơn bạn đã làm rõ
kbdjockey

4
Lưu ý rằng hầu hết các hệ điều hành bỏ qua cờ này cho các tệp kịch bản được thông dịch. Điều này không hoạt động tốt trên nhị phân tho.
Magnar

26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand

Điều này không hoạt động khi tôi có đối số cho lệnh của mình. ví dụ. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Nó nói sudo: run -x: command not found. Bất kỳ ý tưởng làm thế nào để giải quyết vấn đề này?
Bee

1
@Bhathiya chỉ đơn giản là không sử dụng "dấu ngoặc kép", ví dụ: echo -e "MẬT KHẨU CỦA BẠN \ n" | sudo -S ls -l / root
matteomattei

Tuyệt vời, cảm ơn ...
Bee

3

Một lựa chọn là sử dụng cờ -A để điều khiển. Điều này chạy một chương trình để yêu cầu mật khẩu. Thay vì hỏi, bạn có thể có một tập lệnh chỉ xuất ra mật khẩu để chương trình có thể tiếp tục.


-3
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

4
Điều này không trả lời câu hỏi của OP.
codeforester
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.