Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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 コマンドを呼び出す方法を検討してください。

  1. Accessデータベースにパスワードを設定・解除する方法をわかりやすく解説

    データベースへの不正利用や不正アクセスを防ぎたい場合、Microsoft Accessではデータベースにパスワードを設定して保護することができます。パスワードを覚えていれば、いつでも暗号化を解除してデータベースを利用できますが、万一路忘れてしまうとデータベース自体が使用できなくなるため、注意が必要です。 Accessデータベースにパスワードを設定する方法 ここからは、実際の設定手順を順番に見ていきましょう。 Accessデータベースをパスワードで暗号化する手順 まず、「ファイル」タブをクリックします。 次に、バックステージビューで「開く」をクリックします。 「参照」をクリックし、保護したいファ

  2. Pythonデバッガー(pdb)の使い方を徹底解説!基本コマンドからブレークポイントまで

    Pythonデバッガー(pdb)とはソフトウェア開発の分野では、プログラム内のエラー(バグ)を発見し修正するプロセスを「デバッグ」と呼びます。Pythonの標準ライブラリにはpdbモジュールが含まれており、これはPythonプログラムをデバッグするための一連のユーティリティを提供します。デバッグ機能はPdbクラスとして定義されており、このモジュールは内部的にbdbおよびcmdモジュールを利用しています。コマンドラインからの起動方法pdbモジュールには非常に便利なコマンドラインインターフェースが用意されています。Pythonスクリプトの実行時に-mスイッチを使ってインポートすることで、デバッガー