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

目次

  1. きっかけ
  2. 要件
  3. 作ったスクリプト
  4. なぜ使わなかったのか…

きっかけ


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

要件


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

CentOS7.2で実行しました。

作ったスクリプト


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

ちなみに、DovecotというIMAPサーバーでメールアカウント用に作成する場合は下記スクリプト内のグループの指定は不要(だと思います…)
少なくとも単純にグループ指定して作った場合はメールボックスにアクセスできなかった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh

USER_NAME="user"
GROUP_ID="hoge"
LOGFILE_NAME="adduser.log"

#ログファイル作成
touch ${LOGFILE_NAME}

echo "start." >> ${LOGFILE_NAME}

#グループ存在確認
g=`find /etc/ -type f -name "group" | xargs grep ${GROUP_ID}${i} | wc -l`
if [ $g = "0" ];then
groupadd ${GROUP_ID} &>> ${LOGFILE_NAME}
fi

#作りたい件数
for i in `seq 1 200`
do
#ユーザー存在確認
u=`find /etc/ -type f -name "passwd" | xargs grep ${USER_NAME}${i} | wc -l`

#存在しなかったら作成
if [ $u = "0" ];then
echo ${USER_NAME}${i}" create" >> ${LOGFILE_NAME}

#グループいる場合u
useradd ${USER_NAME}${i} -g ${GROUP_ID} -d /home/${USER_NAME}${i} -m &>> ${LOGFILE_NAME}

#グループいらない場合
useradd ${USER_NAME}${i} -d /home/${USER_NAME}${i} -m &>> ${LOGFILE_NAME}
#useraddでのパスワード設定は平文でしか作成できないので、ここでパスワードはここで作成させる
echo ${USER_NAME}${i}:"p_"${USER_NAME}${i} | chpasswd
else
echo ${USER_NAME}${i}" is already exists." >> ${LOGFILE_NAME}
fi
done

echo "finish." >> ${LOGFILE_NAME}

ついでに削除用も。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh

USER_NAME="user"
LOGFILE_NAME="deluser.log"

touch ${LOGFILE_NAME}
echo "start." >> ${LOGFILE_NAME}

for i in `seq 1 200`
do
#ユーザー存在確認
u=`find /etc/ -type f -name "passwd" | xargs grep ${USER_NAME}${i} | wc -l`

#存在したら削除
if [ $u != "0" ];then
echo ${USER_NAME}${i} >> ${LOGFILE_NAME}
userdel ${USER_NAME}${i} &>> ${LOGFILE_NAME}
rm -rf /home/${USER_NAME}${i} >> ${LOGFILE_NAME}
fi
done

echo "finish." >> ${LOGFILE_NAME}

なぜ使わなかったのか…


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

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

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