Một ứng dụng khổng lồ cần, tại một thời điểm cụ thể, để thực hiện một số lượng nhỏ ghi vào một tệp yêu cầu quyền root. Nó không thực sự là một tệp mà là một giao diện phần cứng được hiển thị với Linux dưới dạng một tệp.
Để tránh đưa ra các đặc quyền gốc cho toàn bộ ứng dụng, tôi đã viết một tập lệnh bash thực hiện các tác vụ quan trọng. Ví dụ: tập lệnh sau sẽ cho phép cổng 17 của giao diện phần cứng làm đầu ra:
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
Tuy nhiên, như suid
bị vô hiệu hóa cho các tập lệnh bash trên hệ thống của tôi, tôi tự hỏi đâu là cách tốt nhất để đạt được điều này.
Sử dụng một số cách giải quyết được trình bày ở đây
Gọi tập lệnh với
sudo
từ ứng dụng chính và chỉnh sửa danh sách sudoers cho phù hợp, để tránh yêu cầu mật khẩu khi gọi tập lệnh. Tôi hơi khó chịu khi trao đặc quyền cho sudoecho
.Chỉ cần viết một chương trình C, với
fprintf
và đặt nó thành root gốc. Hardcode chuỗi và tên tệp và đảm bảo chỉ root mới có thể chỉnh sửa nó. Hoặc đọc các chuỗi từ một tệp văn bản, tương tự đảm bảo rằng không ai có thể chỉnh sửa tệp.Một số giải pháp khác không xảy ra với tôi và an toàn hơn hay đơn giản hơn những giải pháp được trình bày ở trên?