출처 :http://ttongfly.net

############################################################################
# Create by NOP_0x90
# E-mail : naneker@hanmail.net
# 프로그램 상에 문제가 있다면 메일 주세요 ^__^
# insert 부분을 자신의 mysql버전의 필드수에 맞게 수정해주세요
############################################################################
#!/bin/bash

if [ $2 ]; then
        echo "insert into user values ("localhost","$1",Password("$2"),"N
","N","N","N","N","N","N","N","N","N","N","N","N","N"
,"N","N","N","N","N","N","N","","","","","0","0","0"
);" > /root/.dbadd.sql
        echo "insert into db values ("localhost","$1","$1","Y","Y","Y
","Y","Y","Y","Y","Y","Y","Y","Y","Y");" >> /root/.dbadd.sql
        echo "create database $1;" >> /root/.dbadd.sql
        echo "flush privileges;" >> /root/.dbadd.sql
        echo "Mysql password input..."
        mysql -u mysql -p mysql < /root/.dbadd.sql
elif [ $1 ]; then
        echo "delete from user where User='$1';" > /root/.dbadd.sql
        echo "delete from db where Db='$1';" >> /root/.dbadd.sql
        echo "drop database $1;" >> /root/.dbadd.sql
        echo "flush privileges;" >> /root/.dbadd.sql
        echo "Mysql password input..."
        mysql -u mysql -p mysql < /root/.dbadd.sql
else
        echo "$0 Userid Password"
fi
rm -rf /root/.dbadd.sql    
Posted by [czar]
,
#!/bin/sh
##
## This file name is "weeklydump.cron".
## for /etc/cron.daily/weeklydump.cron
##
## [crond 데몬을 이용한 설정파일 백업-매주]
##
## 작성자 김칠봉<san2(at)linuxchannel.net>
## 작성일 : 2001.03.16
##
## *** 다른 백업툴을 사용하지 않은 방법입니다. ***
##
######################################################
##
## [사용법]
##
## cp weeklydump.cron /etc/cron.weekly/
## chmod 700 /etc/cron.weekly/weeklydump.cron
##
## 설정후, 설정파일의 문법이 맞나 확인하는 방법(디버깅)
##
## # sh -xv dailydump.cron
##
######################################################
##
## [백업하는 자료]
##
## [0] 기본 백업 디렉토리 지정
## [1] 압축 여부
## [2] /etc 디렉토리의 각종 설정파일(서버 데몬 설정파일 제외)
## [3] 서버 데몬 설정 파일
## [4] 사용자 정의 설정파일 지정
##
######################################################
##
## [백업할 자료 설정하기]
##
## *** 설정시 주의사항 ***
## 1. '='의 양 사이에 공백을 두면 안됩니다.
## 2. 백업하고자 하는 설정파일을 수정하거나,
## 3. 주석(#)으로 처리하면 그 항목을 백업하지 않습니다.
## 4. 또한 주석으로 처리되어 있지 않더라고 해당 파일이 0 bytes 이면
## 백업하지 않습니다.
##

## [0] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음)
##
backupdir="/var/backup"

## [1] 날짜별로 압축할까요
## 1 = yes(예: xxxx-20010314-04.tar.gz)
## 0 = no (예: xxxx-20010314-04)
##
conf_compress="1"

## [2] /etc 디렉토리를 통째로 백업할까요?
## 1 = yes(/etc/ 전체를 백업합니다..)
## 0 = no (하나하나 필요한 것 만 백업합니다.)
##
## *주의) 만약 여기에 주석(#)을 추가하면 $E, $EADD 설정파일은 백업하지 않습니다.
##
etc_all="0"

## 다음의 $E, $EADD 변수는 [2]에서 '0'으로 답한 경우에 만 해당됩니다.
##
## 설정시 주의사항
## - 변수 지정시 인용부호("") 안쪽에는 공백이 있어도 상관없으나,
## - (공백으로 각 설정파일 구분),
## - 인용부호로 감싸이지 않은 설정파일은 변수로 지정할 수 없음. 본쉘의 변수지정 참조
##
## for 문에 사용될 구문자(지우지 마세요)
##
B=" $ "
##
## 직접 설정파일 지정
##
E="/etc/passwd $"
E="/etc/shadow $$$"
E="/etc/group $$$"
E="/etc/gshadow $$$"
E="/etc/my.cnf $$$"
E="/etc/bashrc $$$"
E="/etc/hosts $$$"
E="/etc/hosts.allow $$$"
E="/etc/hosts.deny $$$"
E="/etc/modules.conf $$$"
E="/etc/conf.modules $$$" ## 확인 요망
E="/etc/fstab $$$"
E="/etc/resolv.conf $$$"
E="/etc/lilo.conf $$$"
E="/etc/ftpusers $$$"
E="/etc/host.conf $$$"
E="/etc/services $$$"
E="/etc/rc.d/rc.local $$$"
E="/etc/login.defs $$$"
E="/etc/crontab $$$"
E="/etc/profile $$$"
E="/etc/sysconfig/network $$$"
E="/etc/sysconfig/network-scripts/ifcfg-eth0 $$$"

## 앞에서 설정하지 않은 사용자 정의 추가 설정파일
##
EADD="/etc/hosts.denyck $"
EADD="/etc/cron.daily/dailydump.cron $$$"
EADD="/etc/cron.weekly/weeklydump.cron $$$"
EADD="/etc/rc.d/rc.local.mine $$$"

## [3] 각 서버 데몬 설정파일 지정
## 각 서버데몬의 설정파일이 없으면 백업하지 않으니
## 굳지 주석처리하지 않아도 됩니다.
## 만약 설정파일이 존재하지만 백업하고 싶지 않다면 주석처리

## [3-1] (x)inetd.conf 설정파일
##
inetdconf="/etc/inetd.conf"
xinetdconf="/etc/xinetd.conf" ## redhat 7.x 이상(주석처리할 필요없음)
xinetddir="/etc/xinetd.d" ## redhat 7.x 이상(주석처리할 필요없음)

## [3-2] SMTP 서버 관련 설정파일
## qmail을 사용하는 시스템은 맞게 수정하세요.
##
mailconf="/etc/aliases $"
mailconf="/etc/mail/aliases $$$"
mailconf="/etc/sendmail.cf $$$"
mailconf="/etc/sendmail.cw $$$"
mailconf="/etc/mail/local-host-names $$$"
mailconf="/etc/mail/access $$$"
mailconf="/etc/mail/virtusertable $$$"

## [3-3] FTPd 설정파일
##
ftpdconf="/etc/proftpd.conf"

## [3-4] DNS 설정파일
##
bindconf="/etc/named.conf"
binddbdir="/var/named" ## 다른곳에 DB를 둔다면 수정하세요.

## [3-5] SMBAB 설정파일과 암호
##
#smbconf="/etc/smb.conf $" ## 삼바설정 파일
#smbconf="/etc/smbusers $$$" ## 삼바유저 파일
#smbconf="/etc/smbpasswd $$$" ## 삼바유저 암호파일

## [3-6] HTTPd 설정파일
##
httpdconf="/usr/local/apache/conf/httpd.conf $"
#httpdconf="/etc/httpd/conf/httpd.conf $"
httpdconf="/usr/local/apache/conf/php.ini $$$" ## php 설정파일
#httpdconf=" $$$" ## 기타 httpd 관련

## [3-7] /etc/logrotate.d 디렉토리 백업
##
logrotate_d="/etc/logrotate.d"

## [4] 사용자 정의
## 사용자 정의 설정파일이나 디렉토리 지정

## [4-1] 사용자 정의 설정파일
## 파일명이 각각 틀려야합니다.
## 시스템 계정의 각 설정파일은 아직...T.T
##
userconf="/home/san2/.bashrc $"
userconf="/home/san2/.bash_profile $$$"
userconf="/root/.my.cnf $$$"

## [4-2] 사용자 정의 백업 디렉토리(주로 htdocs)
## 디렉토리 만 설정하세요(이 경우는 압축함).
##
## 주의사항)
## 1. home-san2-wwwhome-20010315-04.tar.gz 형태
## 2. 제일 마지막에 '/'를 넣지 마세요.
## 3. 서브디렉토리는 자동 생성하므로 굳지 서브디렉토리 지정불필요
##
userdirs="/home/san2/wwwhome $"
#userdirs="/usr/local/apache/htdocs $$$"

##
##
## 설정 내용 끝(이하 수정할 필요 없음)
##
######################################################
######################################################
##
## 파일을 구분하기 위해서 날짜-시간으로 설정
##
sysdtime=`date +%Y%m%d-%H`

check_backupdir()
{
KEY="$1"
DIR="$2"
if [ "$KEY" = "1" ] && [ ! -d "$DIR" ] ; then
mkdir -p "$DIR"
fi
}

check_compress()
{
compress_yn="$1"
if [ "$compress_yn" = "1" ] ; then
DKN="$2" ## 각 백업 디렉토리(Dir-Key-Name)
cd "$/$DKN" 2>/dev/null
tar cfpP "$-$.tar" "$-$" >/dev/null 2>&1
gzip -9 "$-$.tar" >/dev/null 2>&1
rm -rf "$-$"
fi
}


each_copy()
{
CONFs="$1" ## 복사할 각각의 설정파일(일종의 배열)
DKN2="$2" ## 복사할 위치의 디렉토리(Dir-Key-Name2)
workdir="$/$/$-$"

for Each_sys_conf in $CONFs ; do
if [ -s "$Each_sys_conf" ] ; then ## 크기가 0kbytes 큰 경우
check_backupdir "1" "$workdir"
cp -af "$Each_sys_conf" "$/" >/dev/null 2>&1
fi
done
if [ -d "$workdir" ] ; then
check_compress "$conf_compress" "$DKN2"
fi
}

## 기본 백업 디렉토리 체크 및 퍼미션 조정
##
check_backupdir "1" "$backupdir"
chmod 700 "$backupdir" 2>/dev/null
chown root.root "$backupdir" 2>/dev/null


## /etc 설정파일들 백업
##
if [ "$etc_all" != "" ] ; then
## /etc 각 설정파일 백업 디렉토리 체크
check_backupdir "1" "$/etc"

##
if [ "$etc_all" = "1" ] ; then
cp -af /etc "$/etc/etc-$" >/dev/null 2>&1
check_compress "$conf_compress" "etc"
else
etc_conf="$$$" ## 일종의 배열로 생각(?)
each_copy "$etc_conf" "etc"
fi
fi

## BIND 설정파일 및 각 DB 파일 백업
##
if [ -d "$binddbdir" ] ; then
binddb=`find $binddbdir ( -type f -o -type l ) -print 2>/dev/null`
fi
bindconf="$$$"

## (X)INETd 설정파일 백업
##
if [ -d "$xinetddir" ] ; then
xinetddirconf=`find $xinetddir -type f -print 2>/dev/null`
fi
inetdconf="$$$$$"

## /etc/logrotate_d 디렉토리 백업
##
if [ -d "$logrotate_d" ] ; then
#check_backupdir "1" "$/logrotate.d"
#cp -af /etc/logrotate.d "$/logrotate.d/logrotate.d-$" >/dev/null 2>&1
#check_compress "$conf_compress" "logrotate.d"
#
logrotate_dconf=`find $logrotate_d -type f -print 2>/dev/null`
fi

each_copy "$bindconf" "bind"

each_copy "$inetdconf" "inetd"

each_copy "$mailconf" "mail"

each_copy "$ftpdconf" "ftpd"

each_copy "$smbconf" "samba"

each_copy "$httpdconf" "httpd"

each_copy "$logrotate_dconf" "logrotate.d"

each_copy "$userconf" "userconf"


## 사용자 정의 디렉토리 백업(압축함)
##

backupdir="$/userdir"

for Each_user_dir in $userdirs ; do
if [ -d "$Each_user_dir" ] ; then

check_backupdir "1" "$backupdir"
##
## $target_dir home-aaa-bbb-ccc와 같은 디렉토리
##
target_dir=`echo "$Each_user_dir" | awk '{print(substr($0,2));}' 2>/dev/null | sed 's///-/g' 2>/dev/null`

user_workdir="$/$"
check_backupdir "1" "$user_workdir"

cp -af "$Each_user_dir" "$/$-$" >/dev/null 2>&1
check_compress "1" "$target_dir"

fi
done

exit 0
Posted by [czar]
,
#!/bin/sh
##
## This file name is "dailydump.cron".
## for /etc/cron.daily/dailydump.cron
##
## [crond 데몬을 이용한 자료 백업-매일]
##
## 작성자 김칠봉<san2(at)linuxchannel.net>
## 작성일 : 2001.03.10
## 수정일 : 2001.03.14
## : 2003.01.08 add mysqldump options
##
######################################################
##
## [사용법]
##
## cp dailydump.cron /etc/cron.daily/
## chmod 700 /etc/cron.daily/dailydump.cron
##
## 설정후, 설정파일의 문법이 맞나 확인하는 방법(디버깅)
##
## # sh -xv dailydump.cron
##
######################################################
##
## [백업하는 자료]
##
## 0. 날짜별로 백업(예: filename-20010310-04.xxx)
## 1. 시스템 날짜 수정(rdate)
## 2. mysql 모든 DB를 .sql 이나 .sql.gz 형태로 백업
## 3. 기타(아직 없음)
##
## * 나머지 설정 파일은 일주일에 한번이나 두번 정도로
## 백업하는 것이 적당.
##
######################################################
##
## [관리자가 꼭 설정해야할 내용 - 11가지]
##

## [0] MySQL DB를 백업할까요?
## 1 = yes(DB를 백업합니다.)
## 0 = no (DB를 백업하지 않습니다.) *** 이하 설정할 필요없음 ***
mysql_dbdump='1'

## [1] MySQL이 어떠한 이유 등으로 가동중이지 않을 경우에 메일을
## 받을 볼 user나 메일 주소 설정.
##
## localhost user인 경우 : san2 또는 san2(at)localhost
## localhost user가 아닌 경우 : san2(at)linuxchannel.net
##
## 만약 메일을 받아 보기를 원치 않는다면 다음 설정을 주석(#)
## 으로 처리하거나 공백으로 설정
##
reportmailto='san2'

## [2] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음)
##
backupdir='/var/backup'

## [3] MySQL DB 서버(클라이언트가 아님)
## localhost인 경우 localhost로 설정하세요.
##
mysql_host='localhost'

## [4] MySQL DB root 암호(시스템 root 암호 아님)
##
## ** 보안 **
## ** 이 파일의 퍼미션에 주의 **
## ** 만약 /root/.my.cnf 파일의 root 암호를 기본적으로 사용하고자
## ** 한다면,
## **
## ** mysql_rootpasswd='/root/.my.cnf'
## **
## ** 으로 설정하기 바랍니다.
## ** ex) /root/.my.cnf
## ** [client]
## ** password = xxxxxx
##
mysql_rootpasswd='/root/.my.cnf'
#mysql_rootpasswd='xxxxxx'

## [5] MySQL DB dump 디렉토리(뒤 부분, 수동으로 디렉토리 만들 필요없음)
##
mysql_backupdir="$/mysqldump"

## [6] MySQL DB dump 프로그램
## RPM으로 설치했다면 `which mysqldump`의 결과 명시
##
mysql_dump='/usr/local/mysql/bin/mysqldump'

## [7] MySQL mysqldump arguments
##
mysql_dump_args='--add-drop-table --quick --extended-insert'
#mysql_dump_args='--opt'

## [8] MySQL DB show 프로그램
## RPM으로 설치했다면 'which mysqlshow'의 결과 명시
##
mysql_show='/usr/local/mysql/bin/mysqlshow'

## [9] dump한 DB를 압축하시겠습니까?
## 1 = yes(예: dbname-20010310-04.sql.gz)
## 0 = no (예: dbname-20010310-04.sql)
##
db_compress='1'

## [10] 전체 DB 중 포함시키지 않을 DB 설정
## 각 DB의 구분은 "또는 연산자(|)"로 다음과 같이 구분
## 기본 값으로는 test와 test2로 설정되어 있음.
##
not_dump_db='test|test2'

##
## 설정 내용 끝(이하 수정할 필요 없음)
##
######################################################
######################################################
##
## 시스템 시간 설정 조정
##
#/usr/bin/rdate -s time.kriss.re.kr | clock -w >/dev/null 2>&1
#/usr/bin/rdate -s time.kriss.re.kr >/dev/null 2>&1

## 실제로 DB를 dump 하는 함수
##
mysql_dump_work()
{
mysql_each_DB="$1"
mysql_dump_file="$/$-$.sql"
$mysql_dump $mysql_connect $mysql_dump_args $mysql_each_DB > $mysql_dump_file
if [ "$db_compress" = "1" ] ; then
gzip -f9 $mysql_dump_file
fi
}

## MySQL DB를 백업하지 않는다면 종료함.
##
[ "$mysql_dbdump" != "1" ] && exit 0

## 파일을 구분하기 위해서 날짜-시간으로 설정
##
sysdtime=`date +%Y%m%d-%H`

## MySQL DB dump
##
## MySQL 접속 파라미터
##
if [ -s "$mysql_rootpasswd" ] ; then
passwd_opt="--defaults-file=$mysql_rootpasswd"
else
passwd_opt="--password=$mysql_rootpasswd"
fi
mysql_connect="$passwd_opt -h $mysql_host -u root"

## MySQL 모든 DB 축출
## 앞에서 설정한 $not_dump_db는 제외됨
##
mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "($|Databases|+)" | awk '{print $2}'`

if [ X"$mysql_DBs" != "X" ] ; then

if [ ! -d "$mysql_backupdir" ] ; then
mkdir -p "$mysql_backupdir"
chmod 700 "$mysql_backupdir"
fi

## All DB dump to one file(.sql) !!!!
## Verbal advice --> LSN tip board : 'lubzzon'
## --all-databases > all_db.sql
##
for mysql_DB in $mysql_DBs ; do
mysql_dump_work $mysql_DB
done

#chmod 600 $/*
#chown root mysql_backupdir

else
## MySQL이 가동중이지 않을 경우
## 주) 아래에서 $=$IFS HTML에서 <BR>과 같음.
##

if [ X"$reportmailto" != "X" ] ; then
mailsubject="dailydump.cron report [$]"
mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.$MySQL 서버($) 확인하세요!!!"
echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1
fi
fi

exit 0
Posted by [czar]
,
#!/bin/sh

# 일일이 수작업 하기 싫어서 응용해봤습니다.^^ 알아서 쓰시길~
# 보안에 안좋겠지만 전 비번을 설정해서 사용합니다.^^
# 비번을 설정 안하시려면 $mysql_pw를 모두 지우셈!
# Scripted by bando
# Mail : bando(at)bando.org
# MSN : bando(at)bando.org


# mysql_pw에 mysql루트 패스워드를 적으셈! 여기만 바꿔주면 비번설정은 끝!

mysql_pw=1234

echo "========================================================="
echo "우선적으로 디비삭제를 할것인지 디비 생성을 할것인지 선택해주세요"
echo "==========================================="
echo " -----디비 생성은 1번----- "
echo " --------------------------"
echo " -----디비 삭제는 2번-----"
echo " --------------------------"
echo -n " #### 선택 번호 : "
read IP
if [ "1" == "$IP" ];
then
# $db = DB명
# $user = 계정
# $passwd = 비밀번호
echo "디비 생성을 선택하셨습니다"
echo "하이~ 설정을 위해 몇가지 질문에 잘 대답하심 돼요"
echo "========================================"
echo "----자 먼저 생성될 디비이름을 적어주세요----"
echo -n " DBNAME : "
read db
echo "----자 이제 생성될 디비계정을 적어주세요----"
echo -n " DBUSER : "
read user
echo "----자 이제 생성될 디비계정의 비번을 적어주세요----"
echo -n " DBPASSWD : "
read passwd
echo "use mysql;" > useradd.sql
echo "create database $db;" >> useradd.sql
echo "insert into user values('localhost', '$user', password('$passwd'), 'N', 'N', 'N', 'N','N', 'N', 'N', 'N', 'N', 'N', 'N', 'N','N', 'N');" >> useradd.sql
echo "insert into db values ('localhost','$db','$user','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');" >> useradd.sql
echo "flush privileges;" >> useradd.sql

# 패스워드(1234)는 각자 알아서 설정하세요! 보안상 지우시던가요!

mysql -u root -p$mysql_pw < useradd.sql

rm -rf useradd.sql
echo "----------------------" >> dblist.txt
echo "dbname : $db" >> dblist.txt
echo "account : $user" >> dblist.txt
echo "passwd : $passwd" >> dblist.txt
echo "----------------------" >> dblist.txt

# 패스워드(1234)는 각자 알아서 설정하세요! 보안상 지우시던가요!

mysqlshow -p$mysql_pw

echo "생성된 디비의 정보는 dblist.txt에 기록됩니다"

elif [ "2" == "$IP" ];
then
echo "디비 삭제를 선택하셨습니다"
echo "디비의 모든 자료는 삭제됩니다"
echo "하이~ 설정을 위해 몇가지 질문에 잘 대답하심 돼요"
echo "========================================"
echo "----자 먼저 삭제될 디비이름을 적어주세요----"
echo -n " DBNAME : "
read db
echo "----자 이제 삭제될 디비계정을 적어주세요----"
echo -n " DBUSER : "
read user
echo "use mysql;" > userdel.sql
echo "drop database $db;" >> userdel.sql
echo "delete from db where user='$user';" >> userdel.sql
echo "delete from user where user='$user';" >> userdel.sql
echo "flush privileges;" >> userdel.sql

# 패스워드(1234)는 각자 알아서 설정하세요! 보안상 지우시던가요!

mysql -u root -p$mysql_pw < userdel.sql

rm -rf userdel.sql

# 패스워드(1234)는 각자 알아서 설정하세요! 보안상 지우시던가요!

mysqlshow -p$mysql_pw

else
echo "잘못 선택 하셨습니다"
fi
Posted by [czar]
,
#########################
#  hostway kh
#           2003/10/10
#########################
#!/bin/sh

#입력을 편하게 하기위한 코딩
year=$(echo "$1")
case $2 in
        1 | 01) mon=Jan;;
        2 | 02) mon=Feb;;
        3 | 03) mon=Mar;;
        4 | 04) mon=Apr;;
        5 | 05) mon=May;;
        6 | 06) mon=Jun;;
        7 | 07) mon=Jul;;
        8 | 08) mon=Aug;;
        9 | 09) mon=Sep;;
        10) mon=Oct;;
        11) mon=Nov;;
        12) mon=Dec;;
esac
day=$(echo "$3")

date1=$(echo "$day/$mon/$year")

if [ $# -ne 3 ]; then
        echo "Not command syntax!!"
        echo "Use year mon day : example ./weblog-analysis 2003 10 01"
        exit
fi

#접속한 ip갯수 (중복된 ip는 제거)
echo "IP count access at manpage.co.kr"
cat /usr/local/apache/logs/access_log | grep "$date1" | awk '{print $1}' | sort -n | uniq | wc -l | sed s/^[[:space:]]*//

#해당일에 받아간 데이터양
echo "Day Total Web Traffic"
cat /usr/local/apache/logs/access_log | grep "$date1" | awk '{sum += $10} END {print sum/1024000,"MByte"}'
Posted by [czar]
,
# 본프로그램을 사용하기에 앞서 몇가지 수정을 해주셔야 합니다.
# mysql 추가및 삭제 부분에서 비번이라고 적힌곳에 자신의 msyql root 비번을 적어주시기 바랍니다.
# 그리고 본 스크립트는 각 서버의 경로를 /var/named /usr/local/apache /usr/local/mysql 기준으로 작성된 것이므로..
# 경로가 틀릴경우 수정을 해주시기 바랍니다.
# 네임서버 셋팅 부분도 자신의 환경에 맞게 수정해주시기 바랍니다.
#File Name : huser
#!/bin/bash
clear
echo "##########################################################"
echo "#                                                        #"
echo "# Hostuser Shell Script Road Start.                      #"
echo "# Program : HostUserAutoSetting ( Hostuser v.0.9)        #"
echo "# 제작자  : 김병철 ( happymsg@hanmir.com )               #"
echo "#                                                        #"
echo "#========================================================#"
echo "#                                                        #"
echo "# 사용방법 :                                             #"
echo "# ./huser 아이디 비번 도메인                             #"
echo "# Ex) ./huser happymsg 1234 atpple.com                   #"
echo "#                                                        #"
echo "##########################################################"
echo
select var in "계정추가" "용량제어" "계정삭제" "가상호스트추가" "SMTP메일추가" "Mysql계정및DB추가" "MysqlDB삭제" "네임서버셋팅" "끝내기"

    do
      if [ "$var" = "계정추가" ]; then
## 사용자 계정 생성
         echo "$1 라는 계정 사용자를 추가합니다."
         /usr/sbin/useradd $1
         echo "--- 비밀번호를 입력해주세요 ---"
         echo ""
         passwd $1
## 생성된 사용자 디렉토리 소유권및 퍼미션 조정
         mkdir /home/$1/public_html
         mkdir /home/$1/logs
         cp /root/home/index.html /home/$1/public_html
         chown $1:$1 /home/$1/public_html
         chown $1:$1 /home/$1/logs
         chown $1:$1 /home/$1/public_html/index.html
         chmod 701 /home/$1/public_html
         chmod 701 /home/$1/logs
         chmod 701 /home/$1

      elif [ "$var" = "용량제어" ]; then
## quota 설정이 되어있어야만 사용가능한거 아시죠? ㅡㅡ;
         edquota -u $1

      elif [ "$var" = "계정삭제" ]; then
## 계정삭제
         userdel -r $1

      elif [ "$var" = "가상호스트추가" ]; then
## 아파치 httpd.conf 파일에 가상호스트 부분을 추가함
         echo " " >> /etc/httpd/conf/httpd.conf
         echo "<VirtualHost 211.202.1.248>" >> /etc/httpd/conf/httpd.conf
         echo "   DocumentRoot /home/$1/public_html" >> /etc/httpd/conf/httpd.conf
         echo "   ServerName  $3" >> /etc/httpd/conf/httpd.conf
         echo "   ServerAlias $3  www.$3" >> /etc/httpd/conf/httpd.conf
         echo "   ErrorLog /home/$1/logs/error_log" >> /etc/httpd/conf/httpd.conf
         echo "</VirtualHost>" >> /etc/httpd/conf/httpd.conf
## 아파치 서버 재 구동
         /usr/local/apache/bin/apachectl restart

     elif [ "$var" = "SMTP메일추가" ]; then
## 메일설정(SMTP)
         echo $3 >> /etc/sendmail.cw
         echo $3 >> /etc/mail/relay-domains
         echo "$3" >> /etc/mail/local-host-names
         echo "webmaster@$3      $1" >> /etc/mail/virtusertable
## 메일설정 적용을위한 메일관련DB작업
        makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

     elif [ "$var" = "Mysql계정및DB추가" ]; then
## Mysql 계정 및 DB 생성 이부분은 수정이 필요합니다.
## mysqladmin -uroot -p비번 이렇게 되어있는곳에 mysql root 의 비번을 넣어주세요
         /usr/local/mysql/bin/mysqladmin -uroot -p비번 create $1
         echo "아래내용을 카피하여 붙이거나 혹은 타이핑 해주세요"
         echo ""
         echo ""
         echo "INSERT INTO user VALUES('localhost', '$1', password('$2'),'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'); "
         echo "INSERT INTO db VALUES('localhost', '$1', '$1', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N'); "
         echo "exit"
         echo ""
         echo ""
         /usr/local/mysql/bin/mysql -uroot -p비번 mysql
         /usr/local/mysql/bin/mysqladmin -uroot -p비번 reload
## Mysql 데이터를 사용자계정 홈에 쌓이게 합니다.
         mkdir /home/$1/.mysql
         mv /usr/local/mysql/data/$1 /home/$1/.mysql/
         ln -s /home/$1/.mysql/$1 /usr/local/mysql/data/$1

    elif [ "$var" = "MysqlDB삭제" ]; then
## Mysql DB를 삭제합니다. (사용자계정에 옴긴 .mysql 폴더또한 삭제)
         /usr/local/mysql/bin/mysqladmin -uroot -p비번 drop $1
         rm -Rf /home/$1/.mysql

    elif [ "$var" = "네임서버셋팅" ]; then
## 네임서버 셋팅
         named_conf=/etc/named.conf
         echo " " >> $named_conf
         echo "zone "$3" {" >> $named_conf
         echo "       type master;" >> $named_conf
         echo "       file "$3.zone";" >> $named_conf
         echo "};"  >> $named_conf
## /var/named/domain.zone파일 생성
## 아래의 부분은 자신의 서버 환경에 맞게 수정하셔야겠죠?
         touch /var/named/$3.zone
         echo "@       IN      SOA   ns2.atpple.com.  $1.$3.  (" >> /var/named/$3.zone
         echo "                                20000402  ; Serial" >> /var/named/$3.zone
         echo "                                21600   ; Refresh(6h)" >> /var/named/$3.zone
         echo "                                900     ; Retry(15min)" >> /var/named/$3.zone
         echo "                                604800  ; Expire(7d)" >> /var/named/$3.zone
         echo "                                43200)  ; Minimum(12h);" >> /var/named/$3.zone
         echo "                IN      NS      ns2.atpple.com." >> /var/named/$3.zone
         echo ";" >> /var/named/$3.zone
         echo "                IN      A       211.202.1.248" >> /var/named/$3.zone
         echo "                IN      MX      0       $3." >> /var/named/$3.zone
         echo "www             IN      A       211.202.1.248" >> /var/named/$3.zone
         echo "                IN      MX      0       $3." >> /var/named/$3.zone
## 네임서버 재 구동
         killall -HUP named

    elif [ "$var" = "끝내기" ]; then
         clear
         exit 0

    else
         clear
         echo "$var Re Selecte"
    fi
done




출처 :http://ttongfly.net/zbxe/?document_srl=43597
Posted by [czar]
,
#!/usr/bin/perl
# PERL Scripted by bando
# DATE : 20040513
# Mail : bando(at)bando.org
# MSN : bando(at)bando.org
# Mail Server Relay Checker

use Socket;

$NUM = @ARGV;

if ( $NUM != 1 ) {
print "Usage: $0 targethostn";
exit 0;
}

my($host) = $ARGV[0];

my($port) = 25;

&connect($host,$port);

$ip=inet_ntoa($inet_addr);

$buf_size = 1024;

@def_mail = ("bando","bando.org");

%cmd = ("helo"=>"HELO", "rset"=>"RSET" ,"from"=>"MAIL FROM:", "to"=>"RCPT TO:");
@relay_from = ("<>", "<$def_mail[0]>", "<$def_mail[0]@>", "<$def_mail[0]@$def_mail[1]>", "<$def_mail[0]@[$ip]>");
@relay_to = ("<$def_mail[0]@$def_mail[1]>", "<"$def_mail[0]@$def_mail[1]">", "<$def_mail[0]@$def_mail[1]@>", "<$def_mail[0]%$def_mail[1]>", "<"$def_mail[0]%$def_mail[1]">", "<$def_mail[0]@$def_mail[1]@[$ip]>", "<"$def_mail[0]@$def_mail[1]"@[$ip]>", "<@[$ip]:$def_mail[0]@$def_mail[1]>", "<@:$def_mail[0]@$def_mail[1]>", "<$def_mail[1]!$def_mail[0]>", "<$def_mail[1]!$def_mail[0]@>", "<$def_mail[1]!$def_mail[0]@[$ip]>");


$pat_num = $#relay_from + $#relay_to + 1;
$relay_ok = 0;

recv(SOCK,$recv,$buf_size,$flag);
print "<<< $recvn";
print ">>> $cmd{helo} $def_mail[1]n";
defined(send(SOCK,"$cmd{helo} $def_mail[1]rn",$flag)) or die "SEND ERROR : $cmd{helo}n";
recv(SOCK,$recv,$buf_size,$flag);
print "<<< $recvn";

foreach(0..$pat_num) {


print "nRELAY TEST : ",($_ + 1);


if($_ > $#relay_from) {

$relay_from_send=$relay_from[$#relay_from];
$relay_to_send=$relay_to[$_ - $#relay_from - 1];

}

else {

$relay_from_send=$relay_from[$_];
$relay_to_send=$relay_to[0];
}

my($send_from) = $cmd{from} . $relay_from_send;
my($send_to) = $cmd{to} . $relay_to_send;

&send_recv($send_from,$send_to);


}

print "nOK RELAY : $relay_okn";



close(SOCK);


sub connect {

my($host) = $_[0];
my($port) = $_[1];

$flag=0;

my($timeout) = 5;

$inet_addr=inet_aton($host);

$paddr=sockaddr_in($port,$inet_addr);

socket(SOCK,PF_INET,SOCK_STREAM,getprotobyname('tcp'));

eval {
local $SIG{ALRM}= sub { die "timeoutn" };
alarm($timeout);
connect(SOCK,$paddr);
alarm(0);
};

if($@) {

if($@ =~ /timeout/i) {
print "ERROR : CONNECTING TIMEOUT!n";
}
else {
print "ERROR : $@n";
}
exit 1;

}


}


sub send_recv {

$ch_from=$_[0];
$ch_to=$_[1];

print "n>>> $cmd{rset}n";

defined(send(SOCK,"$cmd{rset}rn",$flag)) or die "SEND ERROR : $cmd{rset}n";

recv(SOCK,$recv,$buf_size,$flag);

print "<<< $recv";

$ch_from =~ s/</</g;
$ch_from =~ s/>/>/g;

print ">>> $ch_fromn";

defined(send(SOCK,"$_[0]rn",$flag)) or die "SEND ERROR : $_[0]n";

recv(SOCK,$recv,$buf_size,$flag);

$recv =~ s/</</g;
$recv =~ s/>/>/g;

print "<<< $recv";

if($recv =~ /^250/) {

$ch_to =~ s/</</g;
$ch_to =~ s/>/>/g;

print ">>> $ch_ton";

defined(send(SOCK,"$_[1]rn",$flag)) or die "SEND ERROR : $_[1]n";

recv(SOCK,$recv,$buf_size,$flag);

$recv =~ s/</</g;
$recv =~ s/>/>/g;

print "<<< $recv";

if($recv =~ /^250/) {
print "RESULT : RELAY YESn";
$relay_ok++;
}
else {
print "RESULT : RELAY NOn";
}

}

else {

print "RESULT : RELAY NOn";

}

}

출처 : http://ttongfly.net/zbxe/?mid=script&document_srl=43598

Posted by [czar]
,
출처 : http://ttongfly.net/zbxe/?mid=script&document_srl=43599

계정 대량 발급  

학교와 같은 곳에 계시는 분들이 적게는 몇백에서 몇천까지의 계정을
일괄적으로 발급하길 원하시는 것 같은데, 그 기능을하는 툴이 없는것 같아
오늘 perl 스크립트로 만들어봤습니다.
 
실행방법은 data 파일(ID, PASS)을 작성한 후,
perl 스크립트내의 그룹, 비밀번호파일, 비밀번호지정여부,
홈계정(/home/ID)발급 여부, 사용자 ID와 비밀번호정보 파일명 등의
몇가지 설정을 필요에 따라 고칩니다.
그후 perl 스크립트를 실행하면 됩니다.
 
-- 테스트결과 --
계정 추가, passwd 지정 수량 : 2,000개
사양 : Pentium-75, 32M, Linux kernel 2.2.2
소요시간(time 명령 결과) :
real    13m16.406s
user    6m75.960s
sys    1m17.550s
 
계정 기본파일(/etc/skel)은 0byte 크기의 파일하나만 달랑 넣고 시험했습니다.
# ls -al /etc/skel
total 5
drwxr-xr-x  2 root    root        1024 Mar  3 12:35 ./
drwxr-xr-x  29 root    root        4096 Mar  3 14:29 ../
-rw-r--r--  1 root    root            0 Mar  3 12:35 chek
 
  아래는 data 파일(사용자 ID와 비밀번호정보 파일) 예제입니다.
---------- cut hear (start) ----------
# 파일 규칙
# ID  PASSWORD
# 위치에 상관없이 공백으로 구분하여 앞은 ID, 뒤는 PASS로 보고 처리하며
# 이 줄과 마찬가지로 최좌측이 #으로 시작되면 주석인식하여 skip 함.
 
  st10001  10001
  st10002  10002
  st10003  10003
  st10004  10004
  st10005  10005
  st10006  10006
  st10007  10007
  st10008  10008
  st10009  10009
  st10010  10010
...
... < 하략 >
...
---------- cut hear (end) ----------
 
 
 
스크립트입니다.
---------- cut hear (start) ----------
 
#!/usr/bin/perl
 
#=====================================================#
# 대량 계정 발급 스크립트
#
# lawwal@nownuri.net
#
# 주. password 도 지정할 경우 shadow 시스템이라면
#    pwunconv 명령 등으로 풀어두고 해야함.
#    다시 shadow 시스템으로 바꿀땐 pwconv 명령 사용.
#
 
 
# 그룹
$group_name = "user";
 
# 비밀번호파일
$pass_file ="/etc/passwd";
 
# 비밀번호지정여부
$pass_dif ="Y";
 
# 홈계정(/home/ID)발급 여부
$add_acc ="Y";
 
# 사용자 ID와 비밀번호정보 파일명
$FILE = "add.txt";
 
#--------------------------------------------------#
 
open(FILE, "$FILE") || die "File open error
";
    while() {
      chomp $_;
      if($_ ne "") { &file_read($_); }
      }
close(FILE);
 
if(!@user_info) {
  print "Cancle...

"; }
 
&user_add;
 
if($pass_dif eq "Y") {
  &pass_add; }
 
print "Done...

";
 
exit;
 
#=====================================================#
 
sub file_read {
 
    local($input_line) = @_;
 
    # 라인의 복수 공백 제거
    $input_line =~ s/ +/ /g;
    # 라인의 제일 앞과 뒤 공백 제거
    $input_line =~ s/^ | $//g;
 
    # 주석라인 skip
    if($input_line =~ /^#/) { return; }
     
    ($add_id, $add_pass) = split(/ /, $input_line);
    push(@user_info, "$add_id|$add_pass");  # 배열화
 
  }
 
#=====================================================#
 
sub user_add {
 
    $num = 0;
 
    foreach $data(@user_info) {
    ($add_id, $add_pass) = split(/|/, $data);
 
    if($add_acc eq "Y") { $add_acc_tmp = ""; }
      else { $add_acc_tmp = "-M"; }
 
    system("/usr/sbin/useradd $add_acc_tmp $add_id -g $group_name");
 
    $num ++;
    print "useradd : $num, $add_id
";
    }
   
  }
 
#=====================================================#
 
sub pass_add {
 
    open(FILE, "$pass_file") || die "File open error
";
      while() {
          chomp $_;
          ($p1, $p2, $p3, $p4, $p5, $p6, $p7) = split(/:/, $_);
 
          $found = "";
 
          foreach $data(@user_info) {
            ($add_id, $add_pass) = split(/|/, $data);
            if($p1 eq $add_id) {
                $found = "ok";
                $tmp = substr($add_id, 0, 2);
                # 어차피 임시 비밀번호일 것이므로 간단히...
                $add_pass = crypt($add_pass, $tmp);
                $result .= "$p1:$add_pass:$p3:$p4:$p5:$p6:$p7
";
                last; }
 
          }
        if(!$found) {
                $result .= "$p1:$p2:$p3:$p4:$p5:$p6:$p7
"; }
      }
 
    close(FILE);
 
    print "password define : ...
";
 
    # 종전파일 보존(.ori)
    $pass_file_bak = "$pass_file" . ".ori";
    `cp $pass_file $pass_file_bak`;
 
    open(FILE, ">$pass_file") || die "File open error
";
      print FILE $result;
    close(FILE);
 
  }
 
#=====================================================#
Posted by [czar]
,
Enumeration eHeader = request.getHeaderNames();
   while (eHeader.hasMoreElements()) {
       String hName = (String)eHeader.nextElement();
       String hValue = request.getHeader(hName);
   }
Posted by [czar]
,
Posted by [czar]
,