Как найти идентификатор пользователя по имени пользователя (Python под * NIX)
Мне нужно настроить мой процесс на "никто", я нашел os.setuid(), но как найти uid
, если у меня есть login
?
Я выяснил, что uids находятся в /etc/passwd, но, возможно, есть более питонический путь, чем сканирование /etc/passwd. Кто-нибудь?
Ответы
Ответ 1
Возможно, вы захотите посмотреть модуль pwd в python stdlib, например:
import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid
он использует /etc/passwd (ну, технически он использует API posix C, поэтому я полагаю, что он может работать на ОС, если он не использовал /etc/passwd, но отображал необходимые функции), но он чище, чем синтаксический анализ он вручную
Ответ 2
Никогда не просматривайте напрямую /etc/passwd
.
Например, в системе Linux, которую я администрирую, учетные записи пользователей не находятся на /etc/passwd
, а на сервере LDAP.
Правильный способ - использовать getpwent
/getgrent
и связанные с ним функции C (как в ответе @TFKyle), которые будут получать информацию о правильном пути для каждой системы (в Linux glibc она читает /etc/nsswitch.conf
чтобы узнать, какие динамические библиотеки NSS загружаются для получения информации).