PythonのpwdモジュールでUnix/Linuxパスワードデータベースにアクセスする方法
はじめに
Pythonの標準ライブラリに含まれるpwdモジュールは、Unix/Linuxオペレーティングシステム上のユーザーアカウントに関するパスワードデータベース(/etc/passwdなど)へのアクセス機能を提供します。なお、このモジュールはUnix系OS専用であり、Windows環境では利用できない点に注意してください。
パスワードデータベースの各エントリは、タプルのようなオブジェクトとして格納されます。その構造は、CPython APIのpwd.hファイルで定義されているpasswd構造体に対応しています。
passwd構造体のフィールド一覧
| インデックス | 属性 | 意味 |
|---|---|---|
| 0 | pw_name | ログイン名 |
| 1 | pw_passwd | 暗号化されたパスワード(省略可能) |
| 2 | pw_uid | 数値のユーザーID |
| 3 | pw_gid | 数値のグループID |
| 4 | pw_gecos | ユーザー名またはコメント欄 |
| 5 | pw_dir | ユーザーのホームディレクトリ |
| 6 | pw_shell | ユーザーのコマンドインタプリタ(シェル) |
pwdモジュールの主な関数
まず、pwdモジュールが提供している関数を確認してみましょう。
>>> import pwd
>>> dir(pwd)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'getpwall', 'getpwnam', 'getpwuid', 'struct_passwd']
pwdモジュールには、主に以下の3つの関数が定義されています。
getpwnam()
指定したユーザー名に対応するパスワードデータベースのレコードを返します。
>>> pwd.getpwnam('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')getpwuid()
指定したUID(ユーザーID)に対応するパスワードデータベースのレコードを返します。
>>> pwd.getpwuid(0)
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')
getpwall()
システムに登録されている全ユーザーのpasswd構造体情報を含むタプルのリストを返します。構造体内のuidとgidは整数型として取得できます。
エラー処理:KeyError例外
getpwnam()やgetpwuid()に渡した引数に対応するエントリがデータベース内に存在しない場合、KeyError例外が発生します。
>>> pwd.getpwnam('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'getpwnam(): name not found: hello'実運用では、存在しないユーザー名を指定する可能性があるため、try-except文でKeyErrorを捕捉して適切に処理することが推奨されます。
-
UnixとLinuxの違いとは?歴史から現代の活用まで徹底解説
Linuxは今や世界中のあらゆる場所で使われています。その最大の証拠こそ、MicrosoftのWindowsです。「Windows Subsystem for Linux 2(WSL2)」の登場により、Microsoftは自社のOSにLinuxカーネルを同梱するようになりました。ほんの数年前なら、こんな話はエイプリルフールの冗談だと思われていたでしょう。 インターネットの大部分を支えるLinuxですが、実は無から生まれたものではありません。Linux以前に存在したのがUnixであり、Linuxが今日の人気を獲得できたのは、1970年代、さらには1960年代に生まれた革新的なアイデアのおかげなの
-
Linuxでrootパスワードをリセットする2つの方法(GRUB・Live CD)
Linuxでは、一般ユーザーもスーパーユーザーも、パスワード認証によって各種サービスへアクセスできます。一般ユーザーが自分のパスワードを忘れてしまった場合は、スーパーユーザーがターミナルから簡単に再設定できます。しかし、スーパーユーザー(rootユーザー)自身がパスワードを失ってしまったらどうすればよいのでしょうか。その場合、ログイン画面が表示される前にパスワードを復旧する必要があります。なお、この仕組みは、物理的にアクセスできる悪意あるユーザーがLinuxホストの完全な権限を奪えてしまう点にもつながるため注意が必要です。本記事では、Linuxでrootパスワードを紛失した際の復旧方法を、2