はじめに
UNIX系のOSでは、パスワードを変更するコマンドが二つあります。
passwdコマンドとchpasswdコマンドです。
どちらもパスワードを変更するコマンドなのですが、今回はAIXサーバでのコマンドを例に違いを簡単に整理しました。
passwdとchpasswdの違い
結論から言えば
passwd
は
- 誰でも使用可能
- 対話的にパスワードを変更
し、chpasswd
は
- rootのみ使用可能
- 非対話的にパスワードを変更
という違いがあります。
使用ケースとしては以下です。
passwd | 自分のパスワード変更 |
---|---|
chpasswd | 複数の他人のパスワードを一括で変更 |
以下、深堀して解説します。
権限の違い
権限周りの確認ですが、例えば一般ユーザがコマンドのパスを探す whichコマンドを使うとpasswdコマンドが発見できます。
$ which passwd /usr/bin/passwd
このpasswdコマンドの権限を見てみると
「-r-sr-xr-x」
になってます。
最初の s は特殊なアクセス権を付与するための「SUID(Set User ID}」ですね。
しかし、一般ユーザがwhichコマンドでchpasswdを探そうとすると見つけられません。
$ which chpasswd chpasswdはありません
rootにスイッチしてから行うと
# which chpasswd /usr/bin/chpasswd
passwdコマンドと同じディレクトリに存在していることが確認できます。
chpasswdコマンドの権限を見てみると
「-r-x------」
となっています。
一般ユーザでは見当たらないわけですね。
使用法の違い
passwdコマンドは、対話的に
「新しいパスワードの入力 → 再入力」
を求められたりしますが、
chpasswdコマンドでは標準出力に操作を求められずにパスワード変更が可能です。
echoコマンドを用いて以下のようにしたり
echo "username:password" | chpasswd
test1:testpass1
test2:testpass2
test3:testpass3
といった構造のパスワードの一覧が記載されたmypwdfileというファイルを用意して以下のようにしたり、
cat mypwdfile | chpasswd
することでパスワード変更可能です。
ただし、気をつけるポイントとしては、echoのようにコマンド内にパスワードを記載するのは履歴にパスワードが残る点です。catではそれが残らないです。
以上、2つのコマンドの違いでした。