【Python】spwdモジュールでシャドウパスワードデータベース(/etc/shadow)にアクセスする方法
UNIX系システムのシャドウパスワードデータベース(通常は /etc/shadow ファイル)にアクセスするには、Python標準ライブラリの spwd モジュールを使用します。このファイルには機密性の高い情報が含まれているため、読み取りにはroot権限など十分な特権が必要です。取得できる各エントリは、タプルのようなオブジェクトとして扱えます。
spwdモジュールのインポート
spwd モジュールを使用するには、まず次のようにインポートします。
import spwd
シャドウパスワードデータベースの属性一覧
各エントリには以下の属性が含まれています。インデックス番号でアクセスすることも、属性名でアクセスすることも可能です。
| インデックス | 属性名と説明 |
|---|---|
| 0 | sp_nam ログイン名(ユーザー名) |
| 1 | sp_pwd 暗号化されたパスワード |
| 2 | sp_lstchg 最終変更日(エポックからの日数) |
| 3 | sp_min パスワード変更間隔の最小日数 |
| 4 | sp_max パスワード変更間隔の最大日数(有効期限) |
| 5 | sp_warn パスワード有効期限の何日前から警告を表示するか |
| 6 | sp_inact パスワード失効後、アカウントがロックされるまでの日数 |
| 7 | sp_expire 1970年1月1日から数えてアカウントが無効化されるまでの日数 |
| 8 | sp_flag 予約済みフィールド |
主なメソッド
spwd.getspnam(name)
引数に指定したユーザー名に対応するシャドウパスワードデータベースのエントリを1件返します。該当するユーザーが存在しない場合は KeyError が発生します。
spwd.getspall()
システム上のすべてのシャドウパスワードデータベースエントリをリスト形式で返します。
サンプルコード
import spwd
# rootユーザーのパスワード情報を取得
print("Root: " + str(spwd.getspnam('root')) + '\n')
# 全ユーザーの名前とパスワードハッシュを表示
for entry in spwd.getspall():
print("Name: " + entry[0] + "\t\tPassword: " + entry.sp_pwdp)
実行結果
※ シャドウパスワードデータベースはroot権限でのみ読み取れるため、sudoモードでスクリプトを実行する必要があります。
$ sudo python3 example.py Root: spwd.struct_spwd(sp_namp='root', sp_pwdp='!', sp_lstchg=17778, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1) …….. …….. …….. Name: geoclue Password: * Name: gnome-initial-setup Password: * Name: gdm Password: * Name: unix_user Password: $6$47n9s0Ep$znWkgNtywebHGKq2o6kZKhGOM8ryp8z4/6P6PUE1m.NQ5Erg9aWncNUAGbuNLFNWUO9M9xzKLxRpFGB5md/nu1 Name: mongodb Password: !
注意点:モジュールの非推奨化について
spwd モジュールは Python 3.11 で非推奨となり、Python 3.13 では標準ライブラリから削除されました。新しい環境で同様の処理を行う場合は、/etc/shadow を直接解析するか、subprocess モジュール経由で getent shadow コマンドを呼び出す方法を検討してください。
-
Accessデータベースにパスワードを設定・解除する方法をわかりやすく解説
データベースへの不正利用や不正アクセスを防ぎたい場合、Microsoft Accessではデータベースにパスワードを設定して保護することができます。パスワードを覚えていれば、いつでも暗号化を解除してデータベースを利用できますが、万一路忘れてしまうとデータベース自体が使用できなくなるため、注意が必要です。 Accessデータベースにパスワードを設定する方法 ここからは、実際の設定手順を順番に見ていきましょう。 Accessデータベースをパスワードで暗号化する手順 まず、「ファイル」タブをクリックします。 次に、バックステージビューで「開く」をクリックします。 「参照」をクリックし、保護したいファ
-
Pythonデバッガー(pdb)の使い方を徹底解説!基本コマンドからブレークポイントまで
Pythonデバッガー(pdb)とはソフトウェア開発の分野では、プログラム内のエラー(バグ)を発見し修正するプロセスを「デバッグ」と呼びます。Pythonの標準ライブラリにはpdbモジュールが含まれており、これはPythonプログラムをデバッグするための一連のユーティリティを提供します。デバッグ機能はPdbクラスとして定義されており、このモジュールは内部的にbdbおよびcmdモジュールを利用しています。コマンドラインからの起動方法pdbモジュールには非常に便利なコマンドラインインターフェースが用意されています。Pythonスクリプトの実行時に-mスイッチを使ってインポートすることで、デバッガー