假設在 FreeBSD(或 Linux)中,有一個非特權普通用戶(非超級用戶)。並且有一個 telnet 獨立程式(我知道 telnet 通常在 inetd 下運行)在該用戶(擁有)下運行。 (假設沒有執行原始的 root 擁有的 telnet。)此 telnet 伺服器經過編程,以便在將其傳遞到已設定 setuid 的 root 擁有的 /bin/login 之前不會檢查 ld_* 環境變數。
問題是: 1. 這個 telnet 可以工作嗎? 2. 如果它確實有效,它是否能夠將環境變數傳遞到/bin/login?
答案1
假設在 FreeBSD(或 Linux)中存在一個非特權超級使用者。
「非特權超級用戶」是一個矛盾的術語; 「超級用戶」一詞本身意味著擁有所有權限的用戶。
該 telnet 伺服器經過編程,因此不會檢查 ld_* 環境變量
我不確定這是否相關。 telnet 伺服器沒有任何特殊權限,因此剝離LD_*
變數不是很有用...
- 這個telnet 能用嗎? 2. 如果它確實有效,它是否能夠將環境變數傳遞到/bin/login?
它可以部分工作,但由於缺少 CAP_NET_BIND_SERVICE 權限,它可能無法綁定到標準 Telnet 連接埠。
是的,它將能夠將環境變數傳遞給login
,就像任何其他進程一樣。然而,至少在 Linux 上,載入程式 (ld-linux.so)LD_*
在運行 setuid 程式之前會丟棄所有變量,因此 setuid-login
不會受到它們的影響。