我需要将我的进程设置为在“无人”下运行,我找到了 os.setuid(),但是我如何找到 uid 如果我有 login?

我发现 uids 位于 /etc/passwd 中,但也许有比扫描 /etc/passwd 更Pythonic 的方法。有人吗?

有帮助吗?

解决方案

您可能想看看 密码 python stdlib 中的模块,例如:

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

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

其他提示

切勿直接扫描 /etc/passwd.

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top