Сообщить об ошибке.

Модуль spwd в Python, теневые пароли Unix

Доступ к базе данных теневых паролей Unix

Модуль spwd обеспечивает прямой доступ к базе данных теневых паролей Unix. Он доступен в различных версиях Unix.

ВНИМАНИЕ! Модуль spwd будет удален из стандартной библиотеки с версии Python 3.13. С версии Python 3.11 будет выдаваться предупреждение об устаревании.

Причина удаления: Модуль spwd обеспечивает использует нестандартный API. В общем, использовать spwd - плохая идея. Он обходит политики безопасности системы, не использует стек PAM и совместим только с локальными учетными записями пользователей, поскольку игнорирует NSS. Использование модуля spwd для контроля доступа следует рассматривать как ошибку безопасности, поскольку он обходит контроль доступа PAM. Более того, модуль spwd использует API-интерфейсы shadow(3). Такие функции, как getspnam(3), напрямую обращаются к файлу /etc/shadow. Это опасно и даже запрещено для ограниченных служб в системах с механизмом безопасности, таким как SELinux или AppArmor.

Чем можно заменить: Сторонним модулем python-pam.

У вас должно быть достаточно прав для доступа к базе данных теневых паролей. Обычно это означает, что вы должны быть пользователем root.

Записи базы данных теневых паролей сообщаются как объект типа кортежа, атрибуты которого соответствуют членам структуры spwd, приведенных в таблице ниже:

ИндексАтрибутСмысл
0sp_nampЛогин
1sp_pwdpЗашифрованный пароль
2sp_lstchgДата последнего изменения
3sp_minМинимальное количество дней между изменениями
4sp_maxМаксимальное количество дней между изменениями
5sp_warnКоличество дней до истечения срока действия пароля, чтобы предупредить пользователя об этом
6sp_inactКоличество дней после истечения срока действия пароля до отключения учетной записи
7sp_expireКоличество дней с 1970-01-01, когда истекает срок действия аккаунта
8sp_flagРезервный

Элементы sp_namp и sp_pwdp являются строками, все остальные являются целыми числами.

Если запрошенная запись не может быть найдена, то поднимается исключение KeyError.

Функции модуля.

spwd.getspnam(name):

Функция spwd.getspnam() возвращает запись базы данных теневых паролей для данного имени пользователя name.

spwd.getspall():

Функция spwd.getspall() возвращает список всех доступных записей базы данных теневых паролей в произвольном порядке.

Примеры:

>>> import spwd
# список всех записей базы теневых паролей
>>> list_pwd = spwd.getspall()
>>> list_pwd[-2:]
# [spwd.struct_spwd(sp_namp='minidlna', 
#                   sp_pwdp='*', 
#                   sp_lstchg=18258, 
#                   sp_min=0, 
#                   sp_max=99999, 
#                   sp_warn=7, 
#                   sp_inact=-1, 
#                   sp_expire=-1, 
#                   sp_flag=-1), 
#  spwd.struct_spwd(sp_namp='home', 
#                   sp_pwdp='$6$uOEL1S3xHo ... NwzqUBj/', 
#                   sp_lstchg=18400, 
#                   sp_min=0, 
#                   sp_max=99999, 
#                   sp_warn=7, 
#                   sp_inact=-1, 
#                   sp_expire=-1, 
#                   sp_flag=-1)]


# запись базы теневых паролей по имени пользователя
>>> spwd.getspnam('home')
#  spwd.struct_spwd(sp_namp='home', 
#                   sp_pwdp='$6$uOEL1S3xHo ... NwzqUBj/', 
#                   sp_lstchg=18400, 
#                   sp_min=0, 
#                   sp_max=99999, 
#                   sp_warn=7, 
#                   sp_inact=-1, 
#                   sp_expire=-1, 
#                   sp_flag=-1)]