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

Pythonのpwdモジュールでパスワードデータベースにアクセスする方法

LinuxなどのUNIX系システムでは、ユーザーアカウント情報が「パスワードデータベース」(/etc/passwd)として管理されています。Pythonからこのデータベースにアクセスするには、標準ライブラリのpwdモジュールを使用します。このモジュールを利用すると、ユーザーアカウントやパスワードデータベースのエントリを取得でき、各エントリはタプルのようなオブジェクトとして扱われます。

なお、pwdモジュールはUNIX系プラットフォーム専用であり、Windows環境では利用できない点に注意してください。

pwdモジュールを使用するには、まず次のようにインポートします。

import pwd

パスワードデータベースの主な属性

インデックス属性と説明
0pw_name
ログイン名(ユーザー名)
1pw_passwd
暗号化されたパスワード
2pw_uid
ユーザーの数値ID(ユーザーID)
3pw_gid
ユーザーが属するグループの数値ID(グループID)
4pw_gecos
ユーザーの氏名やコメントフィールド(GECOSフィールド)
5pw_dir
ユーザーのホームディレクトリ
6pw_shell
ユーザーのログインシェル(コマンドインタプリタ)

注意: 通常、pw_passwdには暗号化されたパスワードが格納されます。しかし、近年のシステムではセキュリティ強化のためシャドウパスワード(shadow password)方式が採用されており、実際にはpw_passwdには「*」や「x」といった記号しか入っていません。暗号化されたパスワード本体は/etc/shadowに分離して管理されています。

pwdモジュールの主なメソッド

pwd.getpwuid(uid)

指定した数値のユーザーID(uid)に対応するパスワードデータベースのエントリを返します。

pwd.getpwnam(name)

指定したユーザー名(name)に対応するパスワードデータベースのエントリを返します。

pwd.getpwall()

パスワードデータベースの全エントリをリストとして返します。

サンプルコード

import pwd

# rootユーザーの詳細情報を取得して表示
print("Root: " + str(pwd.getpwnam('root')) + '\n')

# 全ユーザーの名前とシェルを一覧表示
for entry in pwd.getpwall():
    print("Name: " + entry[0] + "\t\tShell: " + entry.pw_shell)

実行結果

$ python3 example.py
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')

Name: root        Shell: /bin/bash
Name: daemon      Shell: /usr/sbin/nologin
Name: bin         Shell: /usr/sbin/nologin
Name: sys         Shell: /usr/sbin/nologin
Name: sync        Shell: /bin/sync
Name: games       Shell: /usr/sbin/nologin
Name: man         Shell: /usr/sbin/nologin
……
……
……

このように、エントリはインデックス番号(entry[0])でも属性名(entry.pw_shell)でもアクセスできるため、目的に応じて読みやすい方法を選択できます。ユーザー管理ツールやシステム監視スクリプトを作成する際に、pwdモジュールは非常に便利です。

  1. iPhoneアプリでSQLiteデータベースにアクセスする方法をSwiftで解説

    はじめに:データ保存はアプリ開発の重要要素アプリケーションを設計するうえで、データの保存は最も重要な要素の一つです。データを保存する方法は数多くありますが、その中でも広く使われているのがSQLiteデータベースです。iPhone上でSQLiteデータベースへアクセスする方法は複数ありますが、本記事ではSwiftを使った最もシンプルな方法を紹介します。なお、SQLiteとはC言語のライブラリとして実装されたリレーショナルデータベース管理システム(RDBMS)であり、アプリケーションに組み込んで動作させる軽量データベースです。サーバーが不要で、モバイルアプリのローカルデータ保存に最適です。このチュ

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

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