(O+P)ut

(O+P)ut

(O+P)ut = Out + Put >> OutPut

【UNIX】passwdとchpasswdの違い

f:id:mtiit:20180920133440j:plain

はじめに

UNIX系のOSでは、パスワードを変更するコマンドが二つあります。
passwdコマンドとchpasswdコマンドです。


どちらもパスワードを変更するコマンドなのですが、違いがあるので簡単に整理しました。

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 "username:password" | chpasswd

test1:testpass1
test2:testpass2
test3:testpass3
といったパスワードの一覧が記載されたmypwdfileというファイルを容易して以下のようにしたり、

cat mypwdfile | chpasswd

できます。



一人のパスワードを変えるだけなら、passwdコマンドで十分ですが、このように一括処理をしたりするときにはchpasswdコマンドが便利だと思います。


以上、ご参考ください。