2015年12月10日木曜日

[CentOS6] シェルでOSユーザのパスワードを変更する


OSユーザのパスワードを変更したい場合、以下のように passwd コマンドを使うことが多いです。

[root@node01 ~]# passwd user01
ユーザー user01 のパスワードを変更。
新しいパスワード:
よくないパスワード: 辞書の単語に基づいています
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
[root@node01 ~]#

しかし、これだと大量のサーバのパスワードを変更したい場合に面倒です。

usermod コマンドを使うuto、引数にパスワードを指定して変更できます。
[root@node01 ~]# usermod -p `openssl passwd p@ssw0rd` user01

この例では user01 のパスワードを "p@ssw0rd" に設定しています。

usermod では -p の引数でパスワード指定しますが、crypt 関数で暗号化する必要があります。
そこで、openssl コマンドでパスワードにしたい文字列を暗号化しています。
使用できる暗号化形式は以下のとおり。
[root@node01 ~]# openssl passwd --help
Usage: passwd [options] [passwords]
where options are
-crypt             standard Unix password algorithm (default)
-1                 MD5-based password algorithm
-apr1              MD5-based password algorithm, Apache variant
-salt string       use provided salt
-in file           read passwords from file
-stdin             read passwords from stdin
-noverify          never verify when reading password from terminal
-quiet             no warnings
-table             format output as table
-reverse           switch table columns

OSの暗号化形式は以下のようにして調べます。
[root@node01 ~]# authconfig --test | grep password
 shadow passwords are enabled
 password hashing algorithm is sha512

この例だと sha512 になります。
openssl では対応していないので grub-crypt を使用します。
[root@node01 ~]# grub-crypt --help
Usage: grub-crypt [OPTION]...
Encrypt a password.

  -h, --help              Print this message and exit
  -v, --version           Print the version information and exit
  --md5                   Use MD5 to encrypt the password
  --sha-256               Use SHA-256 to encrypt the password
  --sha-512               Use SHA-512 to encrypt the password (default)

Report bugs to <bug-grub@gnu.org>.
EOF

usermod コマンドでパスワードを変更したい場合は、以下のとおり。getent コマンドで /etc/shadow に登録されたユーザの情報を表示して、暗号化化されたパスワードが設定したものと同じか確認しています。
[root@node01 ~]# grub-crypt
Password: <パスワード>
Retype password: <パスワード>
$6$sR7OHkosbrt01t.R$mJZyMcBDWr0WUpVcMfNX512PPBZ.jVsq7LFUiUu38MKsOXGl4MtyzKs2fOOwklMNKaLwcFc5GWjZ8OS2jSJ4H1
[root@node01 ~]# usermod -p '$6$sR7OHkosbrt01t.R$mJZyMcBDWr0WUpVcMfNX512PPBZ.jVsq7LFUiUu38MKsOXGl4MtyzKs2fOOwklMNKaLwcFc5GWjZ8OS2jSJ4H1' user01
[root@node01 ~]# getent shadow user01
user01:$6$sR7OHkosbrt01t.R$mJZyMcBDWr0WUpVcMfNX512PPBZ.jVsq7LFUiUu38MKsOXGl4MtyzKs2fOOwklMNKaLwcFc5GWjZ8OS2jSJ4H1:16832:0:99999:7:::

passwdやusermod コマンド以外に、chpasswd コマンドでもパスワードを変更できます。
[root@node01 ~]# echo "user01:password" | chpasswd
[root@node01 ~]# getent shadow user01
user01:$6$aN3jC//BhiZ/tPe$.aE8K6SrGmj9BIWbaFX/4/BFjB9Npaa78GCR2NVPFGj.DFLipL2r.SDb3.rGDYeSNOAii3JZcsITMOi172Z.u1:16832:0:99999:7:::

chpasswd コマンドを使うと、ファイルに記載した複数のユーザ名とパスワードを一括して変更できます。
[root@node01 ~]# cat pass.txt
user01:passwd1
user02:passwd2
[root@node01 ~]# chpasswd < ./pass.txt
[root@node01 ~]# getent shadow user01
user01:$6$HaAHA/azO$OrDCCKRav0BByAXzxRF3wygAG52dwzwbNiLVoX2DxDr16JBPfwQTJj1mT3nsMB9Y3oJKOgKDcFF5xmzOLSD3P1:16832:0:99999:7:::
[root@node01 ~]# getent shadow user02
user02:$6$CoOmN/8a$IojLTXxe8AJ/vcbIQEUoztapXPlVKHxgBXDsDiCom4r4F/uSFrlighfZdO36YcE8bauHsECOCckFAbMVtKolV.:16832:0:99999:7:::


OSユーザの管理については下記が参考になります。