Tôi cần chạy tập lệnh bash dưới dạng root (mật khẩu sudo hoặc su không khả thi) và vì bạn không thể thiết lập tập lệnh trong Linux, tôi đã nghĩ đến việc gọi nó từ một thực thi và làm nó setuid:Gọi một tập lệnh từ chương trình C gốc setuid - tập lệnh không chạy dưới dạng root
$ cat wrapper.c
int main(void)
{
system("/bin/bash ./should_run_as_root.sh");
}
$ gcc -o wrapper wrapper.c
$ sudo chown root wrapper
$ sudo chmod ug+s wrapper
$ ll wrapper
-rwsr-sr-x 1 root users 6667 2009-02-17 11:11 wrapper
$
này hoạt động - như trong kịch bản chạy một cách chính xác - nhưng kịch bản chạy như những người dùng thực hiện "./wrapper".
Tại sao? Và làm thế nào để thực hiện chính xác điều này?
Cảm ơn!
Vì lý do đằng sau các câu trả lời bên dưới, hãy xem 'hệ thống người dùng' và http://stackoverflow.com/questions/1051370/why-do-i-need-setuid0-within-a-setuid-root-c- program-that-calls-an-administrati –