Dường như không ai khác đã giải quyết mối quan tâm rõ ràng ở đây. Đặt sudo
trong tập lệnh của bạn mà sau đó bạn phân phối sẽ thúc đẩy thói quen xấu của người dùng . (Tôi cho rằng bạn đang phân phối nó vì bạn đề cập "từ quan điểm của người dùng.")
Sự thật là có một hướng dẫn trong việc sử dụng các ứng dụng và tập lệnh tương tự như nguyên tắc bảo mật trong ngân hàng: Không bao giờ cung cấp thông tin cá nhân của bạn cho ai đó gọi cho bạn và nói rằng họ đang gọi "từ ngân hàng của bạn" và tồn tại vì những lý do tương tự.
Quy tắc cho các ứng dụng là:
Không bao giờ nhập mật khẩu của bạn khi được nhắc trừ khi bạn chắc chắn những gì đang được thực hiện với nó. Điều này áp dụng ba lần cho bất cứ ai có sudo
quyền truy cập.
Nếu bạn đang nhập mật khẩu của mình vì bạn đã chạy sudo
trên dòng lệnh, thật tuyệt. Nếu bạn đang gõ nó vì bạn đã chạy lệnh SSH, tốt thôi. Nếu bạn đang gõ nó khi bạn đăng nhập vào máy tính, tất nhiên rồi.
Nếu bạn chỉ chạy một tập lệnh nước ngoài hoặc có thể thực thi và nhập mật khẩu của bạn khi được nhắc cho nó, bạn không biết kịch bản đang làm gì với nó. Nó có thể được lưu trữ trong một tệp tạm thời trong bản rõ, cho tất cả những gì bạn biết, và thậm chí có thể không tự dọn sạch.
Rõ ràng có những mối quan tâm riêng biệt và bổ sung về việc chạy một nhóm lệnh không xác định như root
, nhưng điều tôi đang nói ở đây là duy trì bảo mật trên chính mật khẩu . Ngay cả khi giả sử ứng dụng / tập lệnh không độc hại, bạn vẫn muốn mật khẩu của mình được xử lý an toàn để ngăn các ứng dụng khác giữ nó và sử dụng nó một cách độc hại.
Vì vậy, phản ứng cá nhân của riêng tôi về vấn đề này là, điều tốt nhất để đưa vào tập lệnh của bạn nếu nó cần đặc quyền gốc, là:
#!/bin/bash
[ "$UID" -eq 0 ] || { echo "This script must be run as root."; exit 1;}
# do privileged stuff, etc.
exec
- gọi chính nó nhưng đồng thời thay thế quá trình, vì vậy chúng tôi không sinh ra nhiều phiên bản của kịch bản