...我是在Ubuntu上進行C編程的新手,所以請耐心等待,如果我太過分了。使用u + s權限重新啓動的C程序
我有一個C文件,它在編譯時分配給一個特定的用戶(testUser),並在他們作爲shell登錄時運行。用戶沒有sudo權限的系統有問題。基本上這個shell允許用戶在登錄時更新一個文件(/ var/wwww/testfile),然後重啓系統。當然,重啓會給我一些問題,因爲它們沒有超級用戶權限。
//file: testShell.c
#include <unistd.h>
//#include <linux/reboot.h>
int main(void)
{
execl("/usr/bin/nano", "nano", "/var/www/testfile", NULL);
execl("/usr/bin/shutdown", "shutdown", "-h 0", NULL);
//reboot(LINUX_REBOOT_CMD_RESTART);
return 0;
}
- 該文件編譯蠻好testShell
- 我CHOWN根:根testShell
- 格蘭特的setuid使用CHMODü+ S testShell
- 將文件複製CP testShell/bin
- 更新用戶帳號使用shell CHSH -s /斌/ testShell爲testUser
我讀過關於關閉手冊頁和使用重啓程序本身內進行審判(你可以在的這個特定版本見文件,我已經註釋掉了頭文件和調用),但我仍然無法讓這個用戶重啓系統(目前是Ubuntu 12.04)。我甚至嘗試過發佈的「init 6」系統調用here,但都無濟於事。我也讀過使用system()調用並不是一個特別好的主意:我已經嘗試過它,但仍然沒有快樂。
這是我的理解,如果我正確地分配權限,然後SetUID文件,運行該文件的任何人都會隱式地在所有者權限下運行它,在這種情況下是root。實際上,testUser正在更新的/ var/www/testfile屬於root用戶,所以一切正常。
任何想法我錯了嗎?
(我也意識到了shutdown命令不會重新啓動系統,只需將其關閉。在這個時間點,我這等後一個完整的例子m只是試圖讓某些東西起作用,然後從這一點開始向前推進) – bnoeafk 2014-09-04 15:34:59
我認爲應該不可能這樣做,並且沒有sudo權利的人引用明智的命令。該文件由root擁有沒有任何區別。 – Ashalynd 2014-09-04 15:38:40
所以@Ashalynd,你是說我想要達到的是不可能的?我認爲擁有「提升」權限是爲什麼chmod u + s存在? – bnoeafk 2014-09-04 15:53:00