在linux中uid就是你login的那個帳戶,而euid就是目前有效的uid (effective uid),舉例來說如果某一程式有設setuid的話,那麼當你去執行那隻程式當下你的euid就會是該程式的owner id.
------get_euid.c------
#include< unistd.h >
#include< sys/types.h >
#include< stdio.h >
void main()
{
printf (" current euid is %d \n",geteuid());
}
------ Code End ------
#gcc -o get_euid get_euid.c
#chmod 4701 get_euid
-rws-----x 1 root root 11633 2007-08-08 04:20 geteuid
#su abc123
$id
uid=1001(abc123) gid=100(users) groups=100(users)
$who am i
root pts/0 Aug 8 04:04 (192.168.1.1)
$whoami
abc123
$./get_euid
current euid is 0
(因為get_euid這隻程式設定setuid所以執行該程式時你的身份暫時變成root)
Ref:
http://fanqiang.chinaunix.net/a1/b3/20020510/060200218_b.html
http://www.cs.nctu.edu.tw/~yslin/library/linuxc/function/07.html
文章標籤
全站熱搜

http://en.wikipedia.org/wiki/Setuid http://en.wikipedia.org/wiki/Sticky_bit http://www.linuxjournal.com/article/7727
要了解 suid/sgid, 必需先了解 process 及 permission. 我們需知道: 每個 process 都有其 effective uid/gid , 以決定其在傳統 unix filesystem 中獲得的實際 permission . 再, process 是由 binary 產生的, 而 binary 是從 shell / shell script 載入執行. 在正常的情況下, process 的 effective uid/gid 是從 parent 繼承, 或簡單說是與 shell 的 uid/gid 一樣. shell 的 uid/gid 則是跟據 /etc/passwd 的第 3 與 第 4 欄位決定. 當我們有了以上的概念之後, 再來看 suid 對 effective uid/gid 的影響: 若 binary file 帶有 suid/sgid 的時候, 其 effective id 就不是從 parent 那邊繼承, 而是以 binary file 本身的 user/group 為準. 舉例而言, 若一個 prog1 的 user/group 都是 root , 但沒設 suid/sgid , 那當一個 uid(500)/gid(500) 的 parent process 執行這個 prog1 的話, 那 effective uid/gid 就是 500 ... 但若 prog1 設了 suid/sgid 後, 那其 effective uid/gid 就是 root ! 一旦這個 process effective 是 root 的話, 那它對 file system 的 permission 就如脫繮野馬般任意奔騰而不受限制了. 因此我才在前面提到木馬程式與病毒的例子... 試想一下: 若病毒的 user/group 被設為 root, 然後被一般 user 執行時, suid/sgid 的有與無將導致甚麼不同結果? 好了, 由於 suid/sgid 在系統上有其存在的必要性(舉 /usr/bin/passwd 與 /etc/shadow 為例), 但同時又有極大的殺傷力, 在應用上要異常小心! 因此, bash shell script 在先天上不支援 suid/sgid . perl 亦如此, 除非額外再安裝 suid-perl .... 而/bin/zsh是支援suid和sgid的 碰到安全問題, 每一個系統使用者(尤其是管理員)都應小心慎重對待. 或以一句話來總結的話, 就是: --- 勿以善小而不為, 勿以惡小而為之! p.s. 以上, 我還沒提到 suid/sgid 對 directory 的作用. 有空再補充吧.
謝謝你的文章說明
希望有幫助到您,我也是對自己的學習做紀錄^^