我以 root 身份運(yùn)行 php-cli 7.3.19(在 Debian 10 Buster、linux 內(nèi)核 4.19.0-8-amd64 上),在使用 posix_seteuid() 更改我的 euid 后,子進(jìn)程應(yīng)該繼承我的 euid ?我以為答案是肯定的,但是測(cè)試了一下,root@devdb:/srv/http/easyad_branches# whoamirootroot@devdb:/srv/http/easyad_branches# iduid=0(root) gid=0(root) groups=0(root)root@devdb:/srv/http/easyad_branches# php -r ' \var_dump(posix_seteuid(posix_getpwnam("www-data")["uid"])); \var_dump(shell_exec("whoami;id")); \ posix_seteuid(0); \var_dump(posix_setuid(posix_getpwnam("www-data")["uid"])); \ var_dump(shell_exec("whoami;id"));'bool(true)string(44) "rootuid=0(root) gid=0(root) groups=0(root)"bool(true)string(53) "www-datauid=33(www-data) gid=0(root) groups=0(root)"看起來(lái) whoami 繼承了我的uid因?yàn)樗莈uid,而不是繼承我的euid因?yàn)樗莈uid,這是預(yù)期的行為嗎?換句話說(shuō),我得到了bool(true) root bool(true) www-data,但我預(yù)料到了bool(true) www-data bool(true) www-data,是我的期望錯(cuò)了,還是有其他事情發(fā)生?
1 回答

qq_笑_17
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
看起來(lái) whoami 繼承了我的 uid 因?yàn)樗?euid,而不是繼承了我的 euid 因?yàn)樗?euid,這是預(yù)期的行為嗎?
我對(duì) PHP 不是 100% 確定,但在直接調(diào)用 Linux 系統(tǒng)調(diào)用的編程語(yǔ)言(例如 C 或 C++)中,這種行為是正常的。
這種行為的一個(gè)眾所周知的副作用是,將位設(shè)置set-euid
為 shell 腳本是沒(méi)有意義的(只要使用“正?!眘hell - 例如 bash -):
shell(例如/bin/sh
)將在設(shè)置為不同的 UID 的情況下啟動(dòng)euid
,但由 shell 啟動(dòng)的程序?qū)⑼瑫r(shí)具有euid
和uid
設(shè)置為uid
shell 的值,即啟動(dòng)腳本的用戶(hù)的 UID...
- 1 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報(bào)
0/150
提交
取消