看板 Linux 關於我們 聯絡資訊
我有兩個用戶tenghaooo和user1 首先用戶tenghaooo在自家目錄新創一個文字檔file 並將其權限改為640 -rw-r----- 1 tenghaooo tenghaooo 9 Feb 5 19:45 file 然後再編譯一個C檔 test.c,源碼如下 #include <stdlib.h> int main(void) { system("/bin/cat file"); return 0; } 編譯後的a.out改其權限為4755 -rwsr-xr-x 1 tenghaooo tenghaooo 8304 Feb 5 20:04 a.out 最後切換用戶成user1,到tenghaooo家目錄裡執行a.out 結果無法成功看見file內容 /bin/cat: file: Permission denied 我以為由於a.out setuid bit的緣故,當user1執行a.out時,權限會變成tenghaooo 進而能夠看見file內容 但似乎不是如此 希望各位大大解說一下setuid bit的運作方式 謝謝,新年快樂 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.30.88 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1549370242.A.024.html
lantw44: 有些 shell 在啟動時會主動把 setuid bit 拿掉以免意外 02/05 23:20
lantw44: 可以試試看不要用 system 以避開 shell 02/05 23:21
kenduest: 若是還要用 system(), 一般土炮方式 setuid(0) 補上 02/08 23:09
Ryu3y3s: setreuid() 02/09 10:31
bamchisu: 三樓方法也許可以硬解,但是不太安全會變成root... 02/13 00:13
kenduest: 抱歉因為我測試是 chown root 方式達成,所以要改改 02/13 01:54
kenduest: 不用 system() 是比較單純的 02/13 01:55