/var/lgo/mudatisiki.log

人によってはムダ知識でも自分にとっては有用かもしれない情報を書き込みたいですね。Linuxを仕事で使っているので、それに関してが多いかもです。

Linuxで一括でユーザーのパスワード設定を行う方法

Linuxでユーザー登録を行うことは度々あると思います。

煩わしいパスワード設定を一括で行う方法を覚えたので、備忘録として残しておきます。

結論:chpasswdコマンドを使用する

#ユーザを追加
#本件に直接関係ないですがadduserとuseraddは同じコマンドです
#(useraddにシンボリックリンクが貼ってあります)
[root@centos53 ~]# adduser test1
[root@centos53 ~]# adduser test2
[root@centos53 ~]# adduser test3

#登録されたか確認
[root@centos53 ~]# grep test /etc/passwd
test1:x:501:501::/home/test1:/bin/bash
test2:x:502:502::/home/test2:/bin/bash
test3:x:503:503::/home/test3:/bin/bash

#shadowも確認 (2フィールドが !! なのでパスワード未設定)
[root@centos53 ~]# grep test /etc/shadow
test1:!!:17008:0:99999:7:::
test2:!!:17008:0:99999:7:::
test3:!!:17008:0:99999:7:::

#スイッチしようとしてもパスワードを求められてしまう
[root@centos53 ~]# su - iuser
パスワード:
[iuser@centos53 ~]$ su - test1
パスワード:
su: パスワードが違います

#chpasswdに渡す設定用ファイルを作成します
#user:password形式で記載します
[root@centos53 ~]# cat << EOF > /tmp/pass_settei
test1:pass1
test2:pass2
test3:pass3
EOF


#chpasswdコマンドを実行(エラーがでなければOK)
[root@centos53 ~]# chpasswd < /tmp/pass_settei
[root@centos53 ~]#

#shadowを確認(2フィールド目が暗号化されたパスワード)
[root@centos53 ~]# grep test /etc/shadow
test1:$1$QdNQr/lH$I2/tzWz0yWLzhBSa9rc.U0:17008:0:99999:7:::
test2:$1$QdNQr/lH$ndjHlIjvNEkmieengVLaT0:17008:0:99999:7:::
test3:$1$QdNQr/lH$yNrzfvP7t0RC.1pDlBfuN1:17008:0:99999:7:::

#ログイン確認
[iuser@centos53 ~]$ su - test1
パスワード:
[test1@centos53 ~]$ su - test2
パスワード:
[test2@centos53 ~]$ su - test3
パスワード:
[test3@centos53 ~]$



#余談 /etc/shadow のハッシュ値と比較してパスワードが合っているか確認する

#必要な文字列 /etc/shadowから抜き出す
[root@centos53 ~]# grep test1 /etc/shadow | gawk -F'$' '{print "$"$2"$"$3"$" }'
$1$QdNQr/lH$

#perlでハッシュ値を作成し、/etc/shadowの値と合致したらパスワードも合致
[root@centos53 ~]# perl -e 'print crypt("pass1","\$1\$QdNQr/lH\$"),"\n"' ; grep
test1 /etc/shadow | cut -d':' -f2
$1$QdNQr/lH$I2/tzWz0yWLzhBSa9rc.U0
$1$QdNQr/lH$I2/tzWz0yWLzhBSa9rc.U0

今まではrootユーザーからいちいちスイッチしてpasswdコマンドを使用していました。ユーザー数も少ない環境だったのでどうにかなていましたが大量のユーザー登録を行う時は手間でした。

chpasswdコマンドを使えば設定ファイルさえ用意してあげればコマンド一つで設定完了です。

サーバー構築関係の方には常識かも知れませんが私には目から鱗でした。