我需要设置我的进程在'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