非特權普通用戶將環境變數傳遞到 /bin/login

非特權普通用戶將環境變數傳遞到 /bin/login

假設在 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_*變數不是很有用...

  1. 這個telnet 能用嗎? 2. 如果它確實有效,它是否能夠將環境變數傳遞到/bin/login?

它可以部分工作,但由於缺少 CAP_NET_BIND_SERVICE 權限,它可能無法綁定到標準 Telnet 連接埠。

是的,它將能夠將環境變數傳遞給login,就像任何其他進程一樣。然而,至少在 Linux 上,載入程式 (ld-linux.so)LD_*在運行 setuid 程式之前會丟棄所有變量,因此 setuid-login不會受到它們的影響。

相關內容