Модуль pwd
обеспечивает доступ к базе данных пользователей Unix и базе паролей. Он доступен на всех версиях Unix.
Записи базы паролей сообщаются как объект типа кортежа, атрибуты которого соответствуют членам структуры passwd
.
Индекс | Атрибут | Смысл |
0 | pw_name | Логин |
1 | pw_passwd | Дополнительный зашифрованный пароль |
2 | pw_uid | Числовой идентификатор пользователя |
3 | pw_gid | Числовой идентификатор группы |
4 | pw_gecos | User name or comment field |
5 | pw_dir | Домашний каталог пользователя |
6 | pw_shell | Интерпретатор пользовательских команд |
Элементы uid
и gid
являются целыми числами, все остальные являются строками.
Если запрошенная запись не может быть найдена, то поднимается исключение KeyError
.
Примечание. В традиционном Unix поле pw_passwd
обычно содержит пароль, зашифрованный с помощью алгоритма, производного от DES. Однако в большинстве современных систем используется так называемая система теневых паролей. В этих устройствах поле pw_passwd
содержит только звездочку '*'
или символ 'x'
, где зашифрованный пароль хранится в файле /etc/shadow
, который не доступен для чтения всем пользователям. Наличие в поле pw_passwd
чего-либо полезного зависит от системы. Там, где требуется доступ к зашифрованному паролю следует использовать сторонний модуль python-pam
.
pwd.getpwuid(uid)
:Функция pwd.getpwuid()
возвращает запись базы паролей для данного числового идентификатора uid
пользователя.
pwd.getpwnam(name)
:Функция pwd.getpwnam()
возвращает запись базы паролей для данного имени name
пользователя.
pwd.getpwall()
:Функция pwd.getpwall()
возвращает список всех доступных записей базы паролей в произвольном порядке.
>>> import pwd # список всех доступных записей базы паролей >>> list_pwd = pwd.getpwall() >>> list_pwd[:2] # [pwd.struct_passwd(pw_name='root', # pw_passwd='x', # pw_uid=0, # pw_gid=0, # pw_gecos='root', # pw_dir='/root', # pw_shell='/bin/bash' # ), # pwd.struct_passwd(pw_name='daemon', # pw_passwd='x', # pw_uid=1, # pw_gid=1, # pw_gecos='daemon', # pw_dir='/usr/sbin', # pw_shell='/usr/sbin/nologin' # ) # ] # запись базы паролей по `uid` >>> pwd.getpwuid(1000) # pwd.struct_passwd(pw_name='docs-python', # pw_passwd='x', # pw_uid=1000, # pw_gid=1000, # pw_gecos='docs-python,,,', # pw_dir='/home/docs-python', # pw_shell='/bin/bash' # ) # запись базы паролей по имени пользователя >>> pwd.getpwnam('root') # pwd.struct_passwd(pw_name='root', # pw_passwd='x', # pw_uid=0, # pw_gid=0, # pw_gecos='root', # pw_dir='/root', # pw_shell='/bin/bash' # )
.