我需要将我的进程设置为在 'nobody' 下运行,我找到了 os.setuid(),但是uid如果我有,我该如何找到login?
我发现 uid 在 /etc/passwd 中,但也许有比扫描 /etc/passwd 更 Python 的方式。有人吗?
我需要将我的进程设置为在 'nobody' 下运行,我找到了 os.setuid(),但是uid如果我有,我该如何找到login?
我发现 uid 在 /etc/passwd 中,但也许有比扫描 /etc/passwd 更 Python 的方式。有人吗?
您可能想查看 python stdlib 中的pwd模块,例如:
import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid
它使用 /etc/passwd (好吧,从技术上讲,它使用 posix C API,所以我想如果它不使用 /etc/passwd 但暴露了所需的功能,它可能在操作系统上工作)但比手动解析更干净
切勿直接扫描/etc/passwd。
例如,在我管理的 Linux 系统上,用户帐户不在 LDAP 服务器上/etc/passwd,而是在 LDAP 服务器上。
正确的方法是使用getpwent/getgrent和相关的 C 函数(如@TFKyle 的答案),它将获取每个系统的正确方法的信息(在 Linux glibc 上,它读取/etc/nsswitch.conf以了解要加载哪些 NSS 动态库以获取信息)。