我以 root 身份運行 php-cli 7.3.19(在 Debian 10 Buster、linux 內核 4.19.0-8-amd64 上),在使用 posix_seteuid() 更改我的 euid 后,子進程應該繼承我的 euid ?我以為答案是肯定的,但是測試了一下,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)"看起來 whoami 繼承了我的uid因為它是euid,而不是繼承我的euid因為它是euid,這是預期的行為嗎?換句話說,我得到了bool(true) root bool(true) www-data,但我預料到了bool(true) www-data bool(true) www-data,是我的期望錯了,還是有其他事情發生?
1 回答

qq_笑_17
TA貢獻1818條經驗 獲得超7個贊
看起來 whoami 繼承了我的 uid 因為它是 euid,而不是繼承了我的 euid 因為它是 euid,這是預期的行為嗎?
我對 PHP 不是 100% 確定,但在直接調用 Linux 系統調用的編程語言(例如 C 或 C++)中,這種行為是正常的。
這種行為的一個眾所周知的副作用是,將位設置set-euid
為 shell 腳本是沒有意義的(只要使用“正?!眘hell - 例如 bash -):
shell(例如/bin/sh
)將在設置為不同的 UID 的情況下啟動euid
,但由 shell 啟動的程序將同時具有euid
和uid
設置為uid
shell 的值,即啟動腳本的用戶的 UID...
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消