問題: httpd server是用web用戶執行的,如何才能通過httpd server來做root才能做到事情呢?
我想大概這樣可以:
我們知道linux上到可執行文件到屬主有一個s位,則該文件就可以seteuid到該用戶到權限來做事情,於是寫如下測試腳本:
====== agent.c=========
#include
#include
#include
#include
int main(int ac, char ** av) {
seteuid(0);
printf("%d", geteuid()); // 返回0
// 這裡干活就是root的身份了
return 0;
}
========================
編譯文件:
gcc -o agent agent.c
生成文件:
-rwxr-xr-x 1 root root 7213 2011-06-13 00:02 agent
修改文件屬性:
chmod +s agent
-rwsr-sr-x 1 root root 7213 2011-06-13 00:02 agent
執行agent:
./agent
0
返回結果為0,說明提升權限成功了
------------------------------
問題: 按說如果添加來s位,則非屬主用戶不應該有寫權限,換言之,如果非屬主用戶有來寫權限,則s位應該無效;但事實上, chmod a+w agent 後,提升權限還是成功來,為什麼?