如何通过登录找到用户 ID(*NIX 下的 Python)
-
08-07-2019 - |
题
我需要将我的进程设置为在“无人”下运行,我找到了 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动态库来获取信息)。
不隶属于 StackOverflow