12

我需要将我的进程设置为在 'nobody' 下运行,我找到了 os.setuid(),但是uid如果我有,我该如何找到login

我发现 uid 在 /etc/passwd 中,但也许有比扫描 /etc/passwd 更 Python 的方式。有人吗?

4

2 回答 2

21

您可能想查看 python stdlib 中的pwd模块,例如:

import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid

它使用 /etc/passwd (好吧,从技术上讲,它使用 posix C API,所以我想如果它不使用 /etc/passwd 但暴露了所需的功能,它可能在操作系统上工作)但比手动解析更干净

于 2008-11-16T22:19:52.550 回答
5

切勿直接扫描/etc/passwd

例如,在我管理的 Linux 系统上,用户帐户不在 LDAP 服务器上/etc/passwd,而是在 LDAP 服务器上。

正确的方法是使用getpwent/getgrent和相关的 C 函数(如@TFKyle 的答案),它将获取每个系统的正确方法的信息(在 Linux glibc 上,它读取/etc/nsswitch.conf以了解要加载哪些 NSS 动态库以获取信息)。

于 2008-11-16T23:10:39.733 回答