server-memo.net

ユーザのパスワード設定・変更方法

   

ユーザのパスワードを設定・変更する「passwd」コマンドの使い方です。

passwdコマンドの使い方

「passwd」コマンドでユーザのパスワードを設定・変更する際、ユーザを指定せずにを実行すると自分のパスワードを変更することができます。
rootユーザであればユーザ名を指定することで、対象ユーザのパスワードを変更することが可能です。

passwd [オプション] [ユーザ名]

オプション

「passwd」コマンドのオプションについて解説していきますが、「-k」オプション以外は「root」ユーザのみ実行可能となっています。

オプション 説明
-k
--keep
有効な認証トークンを維持する
-l
--lock
アカウントをロックする
-u
--unlock
アカウントのロックを解除する
-d
--delete
アカウントのパスワードを消去する(パスワード未設定状態にする)
-e
--expire
次回ログイン時にパスワードを変更を促す
-f
--force
強制的にパスワードを変更
-n 日数
--minimum 日数
パスワード変更後に再度パスワードの変更を可能にするまでの日数を指定
-x 日数
--maximum 日数
パスワード有効期限を設定
-w 日数
--warinng 日数
パスワード失効前にユーザに警告を通知する日数を指定
-i日数
--inactive 日数
パスワード有効期限経過後にパスワードを無効化するまでの日数を指定
-S --status パスワードの状態を簡易的に出力
--stdin 標準入力からパスワードを読み込む

使用例

パスワードの設定・変更

自分のパスワードとユーザを指定していパスワードを変更する方法です。
ユーザを指定する場合は「root」ユーザのみ実行可能となっています。

自分のパスワードを設定・変更

ユーザを指定せずに「passwd」コマンドを実行すると、自分のパスワードを変更することが出来ます。

パスワードの変更は現在のパスワードを入力後、新しいパスワードを入力することでパスワードを変更という流れになっています。

passwd

「test」というユーザで自分のパスワードを変更した際のログとなります。

$ passwd
ユーザー test のパスワードを変更。
test 用にパスワードを変更中
現在の UNIX パスワード:
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

指定したユーザのパスワードを変更

「root」ユーザはユーザを指定してパスワードを変更することが出来ます。
この場合はユーザのパスワードを知らなくても変更することが可能となっています。

passwd ユーザ名

「root」ユーザで「test」ユーザのパスワードを変更してみます。

この場合「root」ユーザがパスワードを変更する場合は、現在ユーザに設定されているパスワードを入力するひつようはありません。

# passwd test
ユーザー test のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

アカウントをロック

「-l」または「--lock」オプションを使用することで、指定したユーザのアカウントをロック(ログイン不可)することが出来ます。

passwd -l ユーザ名
passwd --lock ユーザ名

「test」というユーザのアカウントをロックしてみます。

# passwd -u test
ユーザー test 用のパスワードをロック解除。
passwd: 成功

別のユーザから「test」ユーザに「su」を行ってみると、認証失敗となり「su」出来なくなっています。

$ su - test
パスワード:
認証失敗

アカウントをロックすると、「/etc/shadow」ファイルの対象アカウントのパスワードフィールド先頭に「!!」が追加されます。

ロックされていない状態
test:$6$qMaKE5R/$7i4r/1D0xwdvVmVEEXDzCAWWi9ustYKVt292Tj5meloSfmIKf3ecB0g3P.6w/XbaqMH8FH/nMn7NVoCrjaU5w/:17324:0:99999:7:::
ロック状態
test:!!$6$qMaKE5R/$7i4r/1D0xwdvVmVEEXDzCAWWi9ustYKVt292Tj5meloSfmIKf3ecB0g3P.6w/XbaqMH8FH/nMn7NVoCrjaU5w/:17324:0:99999:7:::

ロックを解除するには後述する「-d」オプションを使用する以外にも、この「!!」を削除することでロックを解除するという方法もあります。

アカウントのロック解除

ロックしたアカウントは「-u」または「--unlock」オプションを使用することで、ロックの解除をすることが出来ます。

passwd -u ユーザ名
passwd --unlock ユーザ名

ユーザのロック状態を解除してみます。

# passwd -u test 
ユーザー test 用のパスワードをロック解除。
passwd: 成功

ロックが解除された旨のメッセージが表示され、ロックが解除されました。

パスワードの消去

「-d」または「--delete」オプションを使用することで、パスワードを消去することが出来ます。

passwd -d ユーザ名
passwd --delete ユーザ名

「test」ユーザのパスワードを消去して、パスワードが設定されていない状態にしてみます。

# passwd -d test
ユーザー test のパスワードを削除。
passwd: 成功

別ユーザから「su」をしてみると、パスワードの入力を行わなくても該当ユーザになることができました。

$ su - test
最終ログイン: 2017/06/03 (土) 23:55:28 JST日時 pts/3

次回ログイン時にパスワードを変更を促す

「-e」または「--expire」オプションを使用することで、指定したユーザのパスワードを失効させて次回ログインした際に、パスワードを変更するように促すことができます。

passwd -e ユーザ名
passwd --expire ユーザ名

実際にパスワードを失効させてみます。

# passwd -e test
ユーザー test のパスワードを失効。
passwd: 成功

「su」で該当ユーザになってみると、パスワードの変更を促されることが確認できます。

$ su - test
パスワード:
パスワードを直ちに変更する必要があります(強制されたルート)
test 用にパスワードを変更中
現在の UNIX パスワード:
新しいパスワード:
新しいパスワードを再入力してください:

パスワード再設定可能日数の指定

「-n 日数」または「--minimum日数」オプションを使用することで、ユーザがパスワード変更後に再度パスワード変更可能までの日数を指定することが出来ます。(日数に「0」を指定すると、パスワードはすぐに変更できるようになります。)

passwd -n 日数 ユーザ名
passwd --minimum 日数 ユーザ名

「test」ユーザのパスワードを一度変更した場合、7日間経過しなければ再度パスワードを変更することが出来ないように設定します。

# passwd -n 7 test
ユーザー test のエージングデータを調節。
passwd: 成功

一度パスワードを変更した後に再度パスワードを変更してみると、パスワードの変更が行えないことが確認できます。

$ passwd
ユーザー test のパスワードを変更。
test 用にパスワードを変更中
現在の UNIX パスワード:
パスワードを変更するには長く待つ必要があります
passwd: 認証トークン操作エラー

※このオプションはどの様な場合使用するのかが想像できません…

パスワード有効期限を設定

「-x 日数」または「--maximum 日数」オプションを使用することで、指定したユーザのパスワード有効期限を設定することが出来ます。(99999を指定すると有効期限は無期限となります)

passwd -x 日数 ユーザ名
passwd --maximum 日数 ユーザ名

パスワードの有効期限を1日に設定してみます。

# passwd -x 1 test
ユーザー test のエージングデータを調節。
passwd: 成功

パスワードの有効期限を設定したユーザに「su」してみると、パスワードの有効期限が切れる旨のメッセージが表示され有効期限が設定されていることが確認できました。

$ su - test
パスワード:
警告: パスワードは1日で有効期限が切れます。

ちなみに、パスワードの有効期限が切れた場合はパスワードの変更が促されます。

$ su - test
パスワード:
パスワードを直ちに変更する必要があります(古いパスワード)
test 用にパスワードを変更中

パスワード有効期限切れの注意を通知する日数を指定

「-w 日数」または「--warning 日数」オプションを使用することで、パスワードの有効期限が切れる前に注意メッセージを通知する日数を指定することが出来ます。

passwd -w 日数 ユーザ名
passwd --warning 日数 ユーザ名

パスワードの有効期限が切れる6日前に注意メッセージを通知するように設定します。

# passwd -w 6 test
ユーザー test のエージングデータを調節。
passwd: 成功

有効期限が近付くと、パスワードの有効期限切れを注意するメッセージが表示されました。

$ su - test
パスワード:
警告: パスワードは6日で有効期限が切れます。
最終ログイン: 2017/06/06 (火) 00:35:39 JST日時 pts/5

パスワード有効期限切れ後のアカウントを無効化するまでの日数限設定

「-i」または「--inactive」オプションを使用することで、パスワードの有効期限が切れた際にユーザのログインを禁止するまでの猶予期間を設定することが出来ます。

passwd -i 日数 ユーザ名
passwd --inactive 日数 ユーザ名

パスワードの有効期限経過後、1日経過するとログインできないように設定します。

# passwd -i 1 test
ユーザー test のエージングデータを調節。
passwd: 成功

猶予期間が過ぎてしまった場合は、ユーザはログインすることが出来なくなってしまいます。

$ su - test
パスワード:
アカウントの有効期限が切れました。システム管理者にお問い合わせください。
su: 認証トークンの有効期限切れです

再度ユーザをログイン出来るようにするには、「root」ユーザで該当ユーザのパスワードを再設定してあげる必要があります。

パスワードの設定情報を簡易的に表示

「-S」または「--status」オプションを使用することで、パスワードの有効期限などの情報を簡易的に表示させることが出来ます。

passwd -S ユーザ名
passwd --status ユーザ名

実際に設定情報を表示させてみます。

# passwd -S test
test PS 2017-06-07 0 99999 7 -1 (パスワード設定済み、SHA512 暗号化。)

表示される内容は下記の順番で表示されています。

  • ユーザ名
  • パスワードの状態 (PSパスワード設定済み NPパスワード未設定 LKアカウントロック状態)
  • 最終パスワード変更日
  • パスワードの再変更が可能となる日数 (0は制限なし)
  • パスワードの有効期限 (99999は無期限)
  • パスワード有効期限前に警告通知する日数
  • 有効期限後にアカウントを無効にするまでの日数 (-1は無期限)

標準入力からパスワード設定

「--stdin」オプションを使用することで、標準入力からパスワードを読み込ませて設定することができます。

# echo [パスワード] | passwd --stdin [ユーザ名]

「test」ユーザのパスワードを「Passw0rd」に設定してみます。

# echo Passw0rd | passwd --stdin test
ユーザー test のパスワードを変更。
passwd: すべての認証トークンが正しく更新できました。

 - システム設定