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