Bashシェルスクリプトで非インタラクティブにパスワードを設定する
はじめに
Unix 上で ユーザを作成する場合は useradd
コマンド 、 ユーザを変更する場合は usermod
コマンド を利用します。
( adduser
の利用を推奨するような記載を多くの Web ページで拝見しますので、そちらのほうが良いのかもしれません。 moduser
コマンドは有りません。)
アプリケーションのデーモンプロセスで利用されるようなユーザはパスワードは不要ですが、オペレーションユーザの場合には パスワードが必要 となります。
パスワードは chpasswd
コマンドを使って変更できますが、このコマンドを利用するとインタラクティブな操作を要求されるためスクリプトが組みにくいという問題があります。
どうやってパスワードを設定したら良いでしょう?
検証環境
useradd
/ usermod
コマンドの --password
オプションを利用する
useradd
コマンド、 usermod
コマンドのヘルプを引くと使えそうなオプションがすぐに見つかります。
いずれのコマンドにもズバリのオプションが見つかりました。--password
オプションを利用してインタラクティブにパスワードを設定できます。
useradd
コマンドの --password
オプションを利用する際の注意
ただし、注意点があります。
注意点については実際に使ってみてからお話しましょう。
それではパスワード付きでユーザを作成してみます。
ユーザは genzouw 、パスワードは test にしてみます。
作成できたので、ユーザにスイッチしてみます。
ユーザのパスワードが不正とのことでした。
先程のヘルプの説明をよく見ると記載されていますが、パスワードの文字列は暗号化された状態で指定する必要があります。
平分でコマンドをスクリプト内に記述するわけにいきませんからね(^_^;)
平文パスワード文字列から暗号化パスワード文字列を生成する
暗号化済みのパスワード文字列を生成するには、 perl
のスクリプトを実行する方法がありますが、
ここでは openssl
コマンドを利用した方法について取り上げます。
先程も述べたとおり、パスワードは test にしたいと思っています。
以下のコマンドを実行します。
ちなみに openssl
コマンドが無い、というエラーが発生した場合はインストールしてやります。
今回は CentOS だったので、 yum
でインストールしました。
うまく行けは以下のように謎の文字列が表示されます。
これをメモしておきます。
usermod
コマンドの --password
オプションも使ってみる
すでに genzouw
ユーザを作成してしまっているため、 usermod
コマンドを使ってパスワードを変更してみます。
それでは再度、 genzouw
ユーザにスイッチできるか試してみます。
正しく、 test
というパスワードでログインできました!
シェルスクリプトにはどう記述したら良いの?
先程実行したコマンドのをそのまま記述しておけば OK です。
もちろん、上記のコマンドからは正しいパスワードが test であることは全くわからないので、機密性のあるドキュメントなどに残しておく必要があります。
ひとこと
暗号化パスワードを記述してユーザを登録するという仕組みは Kubernetes や Ansible 、 Terraform などのオーケストレーションツールでも利用されている方法なので、覚えておくといいでしょう。
ディスカッション
コメント一覧
まだ、コメントがありません