Linuxのchpasswd完全攻略:複数アカウントの一括パスワード変更と自動化

概要

Linuxサーバーの運用管理において、多数のアカウントに対するパスワード設定や更新を手作業で行うのは非効率的です。本記事では、対話型プロンプトを介さずに標準入力やバッチファイルから一括でパスワードを変更できる標準コマンド chpasswd の実践的な活用法を解説します。Ubuntu環境をベースに、パイプを用いた単一アカウントの即時更新から、リストファイルを用いた大量アカウントの一括処理、セキュアな暗号化アルゴリズムの明示的指定まで、ハンズオン形式で順を追って見ていきましょう。

chpasswdの基本動作と単一アカウントのパスワード設定

まずは動作検証を行うための準備として、システム上に検証用ユーザーを作成します。以下の sudo useradd -m -s /bin/bash testuser1 を実行し、ホームディレクトリを伴う検証アカウントを用意しましょう。

testuser1アカウントの作成

通常、passwd コマンドはユーザーによるインタラクティブな入力を求めますが、chpasswd は標準入力経由で ユーザー名:パスワード のフォーマットを受け取り、バックグラウンドで即座に認証情報を書き換えます。
パイプ(|)と組み合わせれば、シェルスクリプト内でも対話なしにパスワードの更新が完了します。
⚙️ [主要オプション一覧]

-c : パスワードのハッシュ化に用いる暗号化方式(DES、MD5、SHA256、SHA512など)を指定します。
-e : 渡された文字列がプレーンテキストではなく、既に暗号化済みのハッシュ値であることを宣言します。
-m : パスワード暗号化のハッシュ方式としてMD5を適用します。
-s : SHAアルゴリズム利用時、ストレッチングを行うラウンド数(計算反復回数)を設定します。
-R : 処理の対象とするchrootルートディレクトリのパスを指定します。

パイプ経由でのパスワード更新

パスワード更新がシステムへ確実に反映されたか確かめるため、/etc/shadow ファイルの内容を確認します。
実行結果から、平文ではなくセキュアなハッシュ文字列として testuser1 の認証情報が保存されていることが分かります。

/etc/shadowでtestuser1のハッシュ値を確認

リストファイルを用いた複数アカウントの一括更新

続いて、複数のユーザー情報を一括処理するシナリオを検証します。テスト対象として sudo useradd -m -s /bin/bash testuser2 && sudo useradd -m -s /bin/bash testuser3 を実行し、追加の検証アカウントを登録します。

追加のテストアカウント2件を作成

一括更新する認証リストを準備します。各行に ユーザー名:パスワード の形式でアカウント情報を記述し、user_passwords.txt というテキストファイルへ保存します。

ユーザー名とパスワードを記述したテキストファイルを作成

ファイルへの書き込みが完了したら、入力リダイレクト(<)を使用して user_passwords.txt を chpasswd に読み込ませます。
これにより、対話形式の入力を一切挟むことなく、ファイル内に列挙された全アカウントのパスワード更新がバッチ処理として一括実行されます。

リダイレクトによる一括パスワード変更の実行

一括変更が正しく完了したかをチェックするため、sudo grep -E '^(testuser2|testuser3):' /etc/shadow | cut -d: -f1 で対象ユーザーのエントリを抽出します。
実行結果に testuser2 および testuser3 の両アカウントが問題なく確認できれば、バッチ更新は成功です。

更新対象アカウントの反映状況を確認

暗号化アルゴリズムの明示指定(-cオプション)とセキュリティ設定

セキュリティポリシーや要件に応じて特定のハッシュ関数を指定したい場合は、-c フラグを活用します。
ここでは -c SHA512 を指定し、平文パスワードを高強度なSHA512アルゴリズムでハッシュ化して testuser1 へ反映させます。

SHA512アルゴリズムを指定したパスワード更新

パスワードが指定のアルゴリズムで適切に暗号化されたか検証するため、再度 /etc/shadow から testuser1 のフィールドを抽出します。
出力されたハッシュ文字列の先頭部分に $6$ が付与されていることが確認できれば、SHA512による暗号化が正常に施されている証拠です。

シャドウファイル上で$6$プレフィックスの適用を確認

検証環境の後片付けと作成ユーザーの削除

すべての検証手順を終えたら、テスト用にプロビジョニングしたアカウント群をホームディレクトリごとクリーンアップします。sudo userdel -r testuser1 && sudo userdel -r testuser2 && sudo userdel -r testuser3 を実行してシステムを元の状態に戻しましょう。

テスト用アカウントとホームディレクトリの完全削除

続いて、平文パスワードを含んだ一時テキストファイル user_passwords.txt を放置しないよう、rm -f user_passwords.txt で速やかに削除します。

一時パスワードリストファイルの削除

本記事では、chpasswd を活用したアカウント認証情報の一括設定および自動化手順を解説しました。
多数のユーザープロビジョニングや初期パスワード配布が必要なインフラ運用において、スクリプトへ組み込むことで作業コストとヒューマンエラーを大幅に削減できます。ぜひ実務の自動化パイプラインにお役立てください。