タイトルのことをやりたかったのでシェルスクリプトを作成してみました。

きっかけ


メールテスト用にテストメールサーバにメールアカウントを大量に作りたかった。結果的に、このスクリプトは使用しなかった…(スクリプトそのものには問題はないと思います…たぶん)使わなかった事情は最後に記述。

要件


  • user{i} (iは数字)という感じで連番でユーザー作成
  • パスワードはp_ + ユーザー名にする
  • パスワードは平文では作成しない
  • ログを出力する
  • /home/ディレクトリ配下にユーザーごとのディレクトリを作成する

CentOS7.2で実行しました。

作ったスクリプト


シェルスクリプト初心者マンなのでエラー処理とかできてないです。

ちなみに、DovecotというIMAPサーバーでメールアカウント用に作成する場合は下記スクリプト内のグループの指定は不要(だと思います…)

少なくとも単純にグループ指定して作った場合はメールボックスにアクセスできなかった。

1
#!/bin/sh
2
3
USER_NAME="user"
4
GROUP_ID="hoge"
5
LOGFILE_NAME="adduser.log"
6
7
#ログファイル作成
8
touch ${LOGFILE_NAME}
9
10
echo "start." >> ${LOGFILE_NAME}
11
12
#グループ存在確認
13
g=`find /etc/ -type f -name "group" | xargs grep ${GROUP_ID}${i} | wc -l`
14
if [ $g = "0" ];then
15
    groupadd ${GROUP_ID} &>> ${LOGFILE_NAME}
16
fi
17
18
#作りたい件数
19
for i in `seq 1 200`
20
do
21
    #ユーザー存在確認
22
    u=`find /etc/ -type f -name "passwd" | xargs grep ${USER_NAME}${i} | wc -l`
23
24
    #存在しなかったら作成
25
    if [ $u = "0" ];then
26
        echo ${USER_NAME}${i}" create" >> ${LOGFILE_NAME}
27
28
        #グループいる場合u
29
        useradd ${USER_NAME}${i} -g ${GROUP_ID} -d /home/${USER_NAME}${i} -m &>> ${LOGFILE_NAME}
30
    
31
        #グループいらない場合
32
        useradd ${USER_NAME}${i} -d /home/${USER_NAME}${i} -m &>> ${LOGFILE_NAME}
33
        #useraddでのパスワード設定は平文でしか作成できないので、ここでパスワードはここで作成させる
34
        echo ${USER_NAME}${i}:"p_"${USER_NAME}${i} | chpasswd
35
    else
36
        echo ${USER_NAME}${i}" is already exists." >> ${LOGFILE_NAME}
37
    fi
38
done
39
40
echo "finish." >> ${LOGFILE_NAME}

ついでに削除用も。

1
#!/bin/sh
2
3
USER_NAME="user"
4
LOGFILE_NAME="deluser.log"
5
6
touch ${LOGFILE_NAME}
7
echo "start." >> ${LOGFILE_NAME}
8
9
for i in `seq 1 200`
10
do
11
    #ユーザー存在確認
12
    u=`find /etc/ -type f -name "passwd" | xargs grep ${USER_NAME}${i} | wc -l`
13
14
    #存在したら削除
15
    if [ $u != "0" ];then
16
        echo ${USER_NAME}${i} >> ${LOGFILE_NAME}
17
        userdel ${USER_NAME}${i} &>> ${LOGFILE_NAME}
18
        rm -rf /home/${USER_NAME}${i} >> ${LOGFILE_NAME}
19
    fi
20
done
21
22
echo "finish." >> ${LOGFILE_NAME}

なぜ使わなかったのか…


時間がかかりすぎたから…

というのも、万単位のユーザーを作成しようとしました。はじめは良かったのですが、作成済みのユーザー数が増えるにつれ、作成に時間がかかるようになってしまいました。冗談抜きで使い物にならないレベルで…

結局メールアカウントのエイリアスを作成することで解決しました。