Linux
了解 getlogin()
我認為這個問題的前一次迭代有點像問題的地毯炸彈,所以這可能已經讓人們對它失去了興趣(幾乎被標記為刪除)所以我將開始一個新的希望人們可以有一個更輕鬆的時間。
基本上,我的總體興趣在於理解
logname
以及getlogin()
與審計跟踪相關的內容。它像這樣分解:1)我的理解是,
logname
兩者getlogin()
都顯示auid
將/將最終顯示在會話審計日誌中的內容。那是對的嗎?我知道這auid
是一個不可變的過程屬性,但我很想知道這兩者是否必然相同或通常相同。這將幫助我編寫腳本/幫助程序,這些腳本/幫助程序可以根據使用者的原始身份做出訪問控制決策,而不僅僅是他們目前的身份或可變的環境變數。
- 我仍然不明白CVE 2003-0388的漏洞利用應該如何工作。如果有人可以向我解釋,那就太好了。
不過,我的主要興趣是第 1 點。
getlogin()
並且logname
(它只是呼叫getlogin()
)通過查找目前的 ttyutmp
並報告在該utmp
記錄中找到的登錄名來獲取登錄的使用者名。他們這樣做的原因是,它們被設計為在多個使用者名可能映射到同一個 uid 的系統上工作(這種做法通常不受歡迎,但有時用於創建多個 root 帳戶或啟動自定義 shell 但都映射到相同的底層 uid)。與此類帳戶一起使用時,getpwuid(getuid())
只會報告來自 passwd 數據庫的第一個匹配項,而getlogin()
會找到實際用於登錄的那個。但是,由於該函式依賴於可寫文件的內容,因此不值得像
getpwuid(getuid())
. 確實,只有特權程序才能編寫utmp
,但有一些“額外”程序通常被配置為能夠編寫它(通常通過 setgid-utmp
),如 GNU screen ,你可能不想相信那些。我知道從歷史上看,在我曾經管理的一些 SysV 系統上,utmp
偶爾會容易損壞。