Как мне найти ID пользователя по логину (Python под * NIX)
-
08-07-2019 - |
Вопрос
Мне нужно настроить мой процесс для запуска под именем 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 загружать для получения информации).