Как мне найти ID пользователя по логину (Python под * NIX)

StackOverflow https://stackoverflow.com/questions/294470

Вопрос

Мне нужно настроить мой процесс для запуска под именем nobody, я обнаружил os.setuid (), но как мне найти uid , если у меня есть login

Я обнаружил, что uid находится в / etc / passwd, но, возможно, есть и более питонический способ, чем сканирование / etc / passwd. Кто-нибудь?

Это было полезно?

Решение

Возможно, вы захотите взглянуть на модуль pwd в stthon-файле python, например:

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

он использует / etc / passwd (ну, технически он использует API posix C, так что я предполагаю, что он может работать в ОС, если он не использует / etc / passwd, но предоставляет необходимые функции), но он чище парсинга это вручную

Другие советы

Никогда не сканируйте напрямую / etc / passwd .

Например, в администрируемой мной системе Linux учетные записи пользователей находятся не в / etc / passwd , а на сервере LDAP.

Правильный способ - использовать getpwent / getgrent и связанные с ними функции C (как в ответе @ TFKyle), которые будут получать информацию о правильном пути для каждой системы (в Linux glibc он читает /etc/nsswitch.conf , чтобы узнать, какие динамические библиотеки NSS загружать для получения информации).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top