Hãy thực sự cẩn thận: các kịch bản kết hợp với setuid rất nguy hiểm!
Trước tiên, xin vui lòng xem câu hỏi / câu trả lời này , đặc biệt là câu trả lời và cảnh báo bảo mật này .
Nếu bạn vẫn muốn thực thi tập lệnh của mình bằng setuid
set, thì bạn có thể viết chương trình C ngắn làm trình bao bọc và đặt setuid
bit trên tệp nhị phân đã biên dịch.
Ví dụ trình bao bọc:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Một giải pháp khác sử dụng sudo
(được đề cập ở đây ):
Với quyền root, ngăn không cho quyền ghi (và có thể khác) vào tập lệnh của bạn:
gốc chown /absolute/path/to/your/script.sh
chmod 700 /absolute/path/to/your/script.sh
Xác minh rằng không ai ngoại trừ root có thể thay thế tập lệnh , ví dụ: bằng cách sửa đổi quyền truy cập của thư mục mẹ:
gốc chown / tuyệt đối / đường dẫn / đến / của bạn /
chmod 755 / tuyệt đối / đường dẫn / đến / của bạn /
Sửa sudo quyền truy cập vào /etc/sudoers
với visudo
:
TẤT CẢ TẤT CẢ = (root) NOPASSWD: /absolute/path/to/your/script.sh
Thông tin chi tiết về các cài đặt (ví dụ: hạn chế quyền truy cập vào người dùng hoặc nhóm cụ thể) có thể được tìm thấy trong trang web của sudoers.
Sau đó, tất cả người dùng có thể chạy tập lệnh dưới dạng root mà không cần mật khẩu:
sudo /absolute/path/to/your/script.sh
Điều này tương tự với việc sử dụng giải pháp bao bọc / setuid ở trên.