« PreviousNext »

システムユーザーとMySQLユーザーを自動で登録

6 9 月 2008



システムユーザーとMySQLユーザーを自動で登録

ユーザーを登録するときに行うことは

① useraddコマンドを実行する。
② passwdコマンドを実行する。

MySQLユーザーを登録するときに行うことは、

① rootユーザーでMySQLにログインする。
② MySQLユーザーを登録する。
③ MySQLユーザー用のデータベースを登録する。

こんな感じでしょうか?

システムユーザーの登録方法は覚えているとしても
MySQLユーザーを登録す作業は結構忘れることがあるのではないでしょうか
これを、何回もしている人であれば、コマンドも覚えているでしょうけど、
たまに追加をするときとかは、忘れていることとかがありますよね?

僕だけでしょうか?

まぁ~、その一連の行為を自動でできるようにしたら、楽かなと思いますので、
そういうスクリプトを作っちゃいます。

まず、必要なものをインストールする

# yum -y install expect

登録用スクリプトを新規で作成
# vi sysuser.sh

-------------------- ここから --------------------
#!/bin/bash

# ログファイル名
LOG="sysuser.sh.log"
# 自ドメイン名
DOMAIN="deai.name"
# MySQLサーバー名
HOST="localhost"
# ユーザー登録時のオプションを指定
OPT=" -s /sbin/nologin"

while :
do
  case "$1" in
    "-i" )
      if [ "$2" = "" ] ; then
        echo -e "\n  Usage: ./sysuser.sh [option] [username] [password] [rootpass] "
        echo -e "\n  ユーザー名を指定してください。\n"
        exit 1
      elif [ "$3" = "" ] ; then
        echo -e "\n  Usage: ./sysuser.sh [option] [username] [password] [rootpass] "
        echo -e "\n  パスワードを指定してください。\n"
        exit 1
      fi
      echo "システムもMySQLユーザーも作成する場合       a";
      echo "システムユーザーのみ作成する場合           s";
      echo "MySQLユーザーのみ作成する場合              m";
      echo -e "どちらも作成しない場合                     n\n\n";
      while [ 1 ]; do
        echo "[All/System/MySQL/No]: "
        read line
        case $line in
        [aA]*)
	    echo "" >> $LOG
	    echo `date` >> $LOG
	    expect -c "
	    spawn useradd$OPT $2
	    expect \"#\"
	    spawn passwd $2
	    expect \"Password:\"
	    send \"$3\\r\"
	    expect \"Password:\"
	    send \"$3\\r\"
	    expect \"#\"
	    spawn chmod 711 /home/$2
	    interact
	    " >> $LOG
	    expect -c "
	    spawn mysql -u root -p
	    expect \"Password: \"
	    send \"$4\\r\"
	    expect \"mysql>\"
	    send \"grant all privileges on $2.* to $2@$HOST identified by '$3';\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    expect \"#\"
	    spawn mysql -u $2 -p
	    expect \"Password: \"
	    send \"$3\\r\"
	    expect \"mysql>\"
	    send \"create database $2;\\r\"
	    expect \"mysql>\"
	    send \"show databases;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    interact
	    " >> $LOG
	    date=`date`
            echo "INS DATE = $date" >> $2.txt
	    echo "User ID  = $2" >> $2.txt
            echo "PASSWORD = $3" >> $2.txt
            echo "HTTP = http://$2.$DOMAIN/" >> $2.txt
            echo " " >> $2.txt
            echo "MySQL ID = $2" >> $2.txt
            echo "MySQL PASS = $3" >> $2.txt
	    cat $2.txt | nkf -s > mailnkf.txt
	    cat mailnkf.txt | mail -s "Thanks $2" $2@$DOMAIN
          break
          ;;
        [sS]*)
            echo "" >> $LOG
            echo `date` >> $LOG
	    expect -c "
	    spawn useradd$OPT $2
	    expect \"#\"
	    spawn passwd $2
	    expect \"Password:\"
	    send \"$3\\r\"
	    expect \"Password:\"
	    send \"$3\\r\"
	    expect \"#\"
	    spawn chmod 711 /home/$2
	    interact
	    " >> $LOG
          break
          ;;
        [mM]*)
            echo "" >> $LOG
            echo `date` >> $LOG
	    expect -c "
	    spawn mysql -u root -p
	    expect \"Password: \"
	    send \"$4\\r\"
	    expect \"mysql>\"
	    send \"grant all privileges on $2.* to $2@$HOST identified by '$3';\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    expect \"#\"
	    spawn mysql -u $2 -p
	    expect \"Password: \"
	    send \"$3\\r\"
	    expect \"mysql>\"
	    send \"create database $2;\\r\"
	    expect \"mysql>\"
	    send \"show databases;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    interact
	    " >> $LOG
          break
          ;;
        [nN]*)
          break
          ;;
        esac
      done
        break
        ;;
    "-d" )
      if [ "$2" = "" ] ; then
        echo -e "\n  Usage: ./sysuser.sh [option] [username] [password] [rootpass] "
        echo -e "\n  ユーザー名を指定してください。\n"
        exit 1
      elif [ "$3" = "" ] ; then
        echo -e "\n  Usage: ./sysuser.sh [option] [username] [password] [rootpass] "
        echo -e "\n  パスワードを指定してください。\n"
        exit 1
      fi
      echo "システムもMySQLユーザーも削除する場合       a";
      echo "システムユーザーのみ削除する場合           s";
      echo "MySQLユーザーのみ削除する場合              m";
      echo -e "どちらも削除しない場合                     n\n\n";
      while [ 1 ]; do
        echo "[All/System/MySQL/No]: "
        read line
        case $line in
        [aA]*)
            echo "" >> $LOG
            echo `date` >> $LOG
            userdel -r $2 >> $LOG
	    expect -c "
	    spawn mysql -u $2 -p
	    expect \"Password: \"
	    send \"$3\\r\"
	    expect \"mysql>\"
	    send \"drop database $2;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    expect \"#\"
	    spawn mysql -u root -p
	    expect \"Password: \"
	    send \"$4\\r\"
	    expect \"mysql>\"
	    send \"revoke all privileges on *.* from $2@$HOST;\\r\"
	    expect \"mysql>\"
	    send \"delete from mysql.user where user='$2' and host='$HOST';\\r\"
	    expect \"mysql>\"
	    send \"select user from mysql.user where user='$2';\\r\"
	    expect \"mysql>\"
	    send \"flush privileges;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    interact
	    " >> $LOG
          break
          ;;
        [sS]*)
            echo "" >> $LOG
            echo `date` >> $LOG
            userdel -r $2 >> $LOG
          break
          ;;
        [mM]*)
            echo "" >> $LOG
            echo `date` >> $LOG
	    expect -c "
	    spawn mysql -u $2 -p
	    expect \"Password: \"
	    send \"$3\\r\"
	    expect \"mysql>\"
	    send \"drop database $2;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    expect \"#\"
	    spawn mysql -u root -p
	    expect \"Password: \"
	    send \"$4\\r\"
	    expect \"mysql>\"
	    send \"revoke all privileges on *.* from $2@$HOST;\\r\"
	    expect \"mysql>\"
	    send \"delete from mysql.user where user='$2' and host='$HOST';\\r\"
	    expect \"mysql>\"
	    send \"select user from mysql.user where user='$2';\\r\"
	    expect \"mysql>\"
	    send \"flush privileges;\\r\"
	    expect \"mysql>\"
	    send \"exit\\r\"
	    interact
	    " >> $LOG
          break
          ;;
        [nN]*)
          break
          ;;
        esac
      done
	break
	;;
   "-s" )
	grep $2 /etc/passwd
	echo " "
	ls -l /home/$2
	echo " "
	expect -c "
	spawn mysql -u root -p
	expect \"Enter password:\"
	send \"$4\\r\"
	expect \"mysql>\"
	send \"select user from mysql.user where user='$2';\\r\"
	expect \"mysql>\"
	send \"exit\\r\"
	"
	echo ""
	break
	;;
    * )
	echo -e "\nUsage: ./sysuser.sh [option] [username] [password] [rootpass]\n"
	echo -e "  Option: -i:入力 -d:削除 -s:検索\n\n"
	break
	;;
  esac
done

exit 0

-------------------- ここまで --------------------
※1 このスクリプトで作成されるホームページアドレスは

例) http://server.lunq.net/

もし下記のようなら、

http://www.lunq.net/~server/

72行目の、 http://$2.$DOMAIN/

の部分を http://www.$DOMAIN/~$2/

もしくは http://$DOMAIN/~$2/

に変更してください。

# chmod +x sysuser.sh
これで、システムユーザーと、MySQLユーザーを一括で追加できる。

使い方は、
下記コマンドでヘルプを参照

# ./sysuser.sh

Usage: ./sysuser.sh [option] [username] [password] [rootpass]

  Option: -i:入力 -d:削除 -s:検索

説明 )

[option] は上記参照

[username] 追加、または削除したいユーザー名を記述

[password] 追加、または削除したいユーザーのパスワードを記述

[rootpass] MySQLのrootユーザーのパスワードを記述

例 )

① 新規作成
# ./sysuser.sh -i server himitu roothimitu

② ユーザー削除
# ./sysuser.sh -d server himitu roothimitu

③ ユーザー検索
# ./sysuser.sh -s server himitu roothimitu

その後で、追加と削除の場合は、下記メッセージがでる。

① 新規作成
# ./sysuser.sh -i server himitu roothimitu

システムもMySQLユーザーも作成する場合       a
システムユーザーのみ作成する場合           s
MySQLユーザーのみ作成する場合              m
どちらも作成しない場合                     n

[All/System/MySQL/No]: 

② ユーザー削除
# ./sysuser.sh -d server himitu roothimitu

システムもMySQLユーザーも削除する場合       a
システムユーザーのみ削除する場合           s
MySQLユーザーのみ削除する場合              m
どちらも削除しない場合                     n

[All/System/MySQL/No]: 

という感じで、4つから選べるようにしました。

両方登録したいときは、a を入力して Enter
システムのみは s を入力して Enter
MySQLのみは m を入力して Enter
キャンセルするときは n を入力して Enter

これで、どちらか片方だけ登録ということもできます。

これで完了ですが、登録するときや削除のときは時間がかかります。
固まったかな?と思ってももう少しお待ちを。
だいたい、10秒 ~ 30秒かかることもありますので。

Posted in Fedora 9 | Trackback | del.icio.us | Top Of Page

Comments are closed.