我在寫一個setuid root程序。這個程序需要打開一個文件進行寫入,然後寫入一些內容。它只需要euid 0打開文件,然後它可以放棄權限。我能假設沒有人是65534?
要放棄特權,我可以找到當前的uid。但我正在考慮改用nobody:nogroup。
現在,我想知道:我可以假設每個系統上沒有人是65534(而且nogroup也是65534)?它是由一些標準(POSIX,也許)定義的?
我在寫一個setuid root程序。這個程序需要打開一個文件進行寫入,然後寫入一些內容。它只需要euid 0打開文件,然後它可以放棄權限。我能假設沒有人是65534?
要放棄特權,我可以找到當前的uid。但我正在考慮改用nobody:nogroup。
現在,我想知道:我可以假設每個系統上沒有人是65534(而且nogroup也是65534)?它是由一些標準(POSIX,也許)定義的?
你不能。 nobody
has had at least a few different IDs across distros and time:
在歷史上,用戶「無人」被分配UID -2由幾個 操作系統,儘管其他值,例如2 ^(15)-1 = 32767是 也在使用,例如通過OpenBSD的。爲了兼容16位 和32位UID,許多Linux發行版現在將其設置爲2 ^(16)-2 = 65,534;當32位UID不適合調用16位系統 的返回值時,Linux內核默認返回此值。另一種約定分配範圍 的最後一個UID靜態分配給系統使用(0-99)到無人:99
我可以使用getpwnam(「nobody」)嗎?我的意思是:沒有人在任何地方都稱爲「無人」? – Likk
@Likk https://en.wikipedia.org/wiki/Nobody_%28username%29。 –
這的確是65534對我的FreeBSD和Gentoo的機器,但我的Arch Linux機器上的UID對於沒有人是99.所以我會說,這絕對不是你可以在現實世界中做出的假設。 –