2008-11-16 4 views
11

Мне нужно настроить мой процесс на «никто», я нашел os.setuid(), но как найти uid, если у меня есть login?Как найти идентификатор пользователя по имени (Python под * NIX)

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

ответ

20

Вы можете взглянуть на pwd модуля в питона STDLIB, например:

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

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

+0

Обратите внимание, что использование pwd.getpwnam работает корректно, даже если/etc/passwd указывает на внешние механизмы (подумайте о линии с одиночным «+» в/etc/passwd), например LDAP. – tzot 2008-11-17 10:41:18

5

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

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

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

Смежные вопросы