パスワード設定のちょいネタ

今日はパスワード設定のちょいネタで。

その1:mkpasswdを使ってランダムなパスワードを生成する

パスワードを考えるのは結構面倒なものです。


mkpasswdを使うとあまり考えずにパスワードを生成できます。
もしmkpasswdがいなければ、expectパッケージをインストール。


以下オプション。


-l オプションでパスワード長(デフォルト9文字)
-d オプションでパスワードに含まれる数字の数(デフォルト2文字)
-s オプションでパスワードに含まれる記号の数(デフォルト1文字)
-c オプションでパスワードに含まれるアルファベット小文字の数(デフォルト2文字)
-C オプションでパスワードに含まれるアルファベット大文字の数(デフォルト2文字)


※詳細は man mkpasswdで。

その2:シェルスクリプトからpasswdを使ってパスワードを設定する

passwd コマンドに --stdin オプションを付けると標準入力を読み込めるので、
パイプを使ってパスワードを設定することもできます。


こんな感じに。

# echo "test" | passwd --stdin testuser
Changing password for user testuser.
passwd: all authentication tokens updated successfully.


これを使えばシェルスクリプトからでもOK。

おまけ:ユーザーをまとめて作成するスクリプトを書いてみる

上のTIPS使って、ランダムな初期パスワード設定しながら
まとめてユーザーを作成するスクリプトを書いてみました。

「user_list.txt」に作成したいユーザーの情報を設定。
左から順にユーザー名,uid,gid,ホームディレクトリ,シェル。

こんな感じ。

user1,2000,2000,/home/user1,/bin/bash
user2,2001,2001,/home/user2,/bin/bash
user3,2002,2002,/home/user3,/bin/bash
user4,2003,2003,/home/user4,/bin/bash
user5,2004,2004,/home/user5,/bin/bash

で、スクリプトの本体です。
パスワード長を8文字、記号なし、後はデフォルトのルールでパスワードを自動生成。

#!/bin/sh

USER_LIST="/home/hogehoge/user_list.txt"
USER_PASS="/home/hogehoge/user_pass.txt"
MKPASSWD="mkpasswd -l 8 -s 0"

while read LINE
do
    USER_NAME=`echo ${LINE} | cut -d, -f 1`
    USER_UID=`echo ${LINE} | cut -d, -f 2`
    USER_GID=`echo ${LINE} | cut -d, -f 3`
    USER_HOME=`echo ${LINE} | cut -d, -f 4`
    USER_SHELL=`echo ${LINE} | cut -d, -f 5`
    FIRST_PASS=`${MKPASSWD}`

    groupadd -g ${USER_GID} ${USER_NAME}
    useradd -u ${USER_UID} -g ${USER_GID} -d ${USER_HOME} -s ${USER_SHELL} ${USER_NAME}

    echo "${FIRST_PASS}" | passwd --stdin ${USER_NAME}
    echo "${USER_NAME},${FIRST_PASS}" >> ${USER_PASS}
done < ${USER_LIST}

実行すると、「user_pass.txt」に設定したパスワードをユーザー名と共に出力。
左から順にユーザー名,パスワード。

こんな感じ。

user1,76lJNzin
user2,9xq9PFpl
user3,3vaiNTi4
user4,4uUIllf5
user5,isqYF42c

パスワードの一覧をファイルにしちゃってるのと、
実はエラー処理が全然ないのはご愛敬。
まだまだ改良する余地あるから、気が向いたら直すかも。

今日はこんなところで。