Câu hỏi này hoàn toàn chung chung và không chỉ áp dụng cho trường hợp của tôi, nhưng ... Tôi có một thiết bị hộp bận nhỏ nơi tôi muốn một người dùng không phải root có thể thực thi một tập lệnh cụ thể với quyền riêng tư gốc. Ví dụ: một cái gì đó giống như tập lệnh nhỏ này để kích hoạt DHCP, trong đó biến duy nhất ( $1
) để gửi trên cmdline (!!) là tên máy chủ cần gửi:
#!/bin/bash
udhcpc -b -i eth0 -h $1
chạy udhcpc như thế này đòi hỏi quyền truy cập root, vì vậy để làm điều này tôi có kế hoạch sửa đổi /etc/sudoers
để chứa dòng này:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
sẽ kích hoạt "joe" để dễ dàng chạy tập lệnh đó với quyền root bằng cách chạy đơn giản:
sudo /path/to/enable_dhcp.sh
và không được yêu cầu nhập mật khẩu (đó là những gì tôi muốn, vì tôi muốn joe có thể viết kịch bản này).
Bây giờ .. tôi biết (hoặc ít nhất là nghĩ rằng tôi làm) rằng sử dụng $1
trong một tập lệnh có thể dễ dàng chạy với quyền root là một ý tưởng HORRIBLE vì bạn có thể tiêm bất cứ thứ gì bạn muốn vào đó.
Vậy ... cách tốt nhất để giải quyết vấn đề này là gì? Làm cách nào để joe thực hiện những gì tôi muốn với quyền root, cho phép anh ta chuyển vào một biến (hoặc thực sự làm như vậy với biến môi trường), trong khi không mở rộng cho các cuộc tấn công tiêm chích?