我需要設置我的進程在'nobody'下運行,我找到os.setuid(),但是如果我有login
,我怎麼找到uid
?如何通過登錄找到用戶名(Python下* NIX)
我發現uid在/ etc/passwd中,但是可能比掃描/ etc/passwd更麻煩一些。任何人?
我需要設置我的進程在'nobody'下運行,我找到os.setuid(),但是如果我有login
,我怎麼找到uid
?如何通過登錄找到用戶名(Python下* NIX)
我發現uid在/ etc/passwd中,但是可能比掃描/ etc/passwd更麻煩一些。任何人?
你可能想看看在Python STDLIB的pwd模塊,例如:
import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid
它使用/ etc/passwd文件(當然,在技術上它使用POSIX C API,所以我想如果它沒有使用/ etc/passwd但暴露了所需的功能,它可能在OS上工作),但比手動解析它更清潔
永遠不要直接掃描/etc/passwd
。
例如,在我管理的Linux系統上,用戶帳戶不在/etc/passwd
上,而是在LDAP服務器上。
正確的方法是使用getpwent
/getgrent
和相關的C函數(如@ TFKyle的答案),這將得到正確的道路信息對每個系統(在Linux上的glibc,它讀取知道哪些NSS動態加載庫來獲取信息)。
請注意,使用pwd.getpwnam即使在/ etc/passwd指向外部機制(認爲/ etc/passwd中帶有單個「+」的行)(如LDAP)時也能正常工作。 – tzot 2008-11-17 10:41:18