사이트 내 전체검색
[linux] 호스팅에서 사용자 계정 추가 스크립트
로빈아빠
https://cmd.kr/server/297 URL이 복사되었습니다.

본문

호스팅에서 사용자 계정 추가 스크립트

너무 여러가지 기능을 추가 하여 점 복잡하군요..
나름대루 고쳐서 쓰면 유용할듯 합니다.

# addon 1.
#!/bin/bash # 사용시 버그나, 추가할 사항이 있으시면 언제든지 연락바랍니다. ^^; # http://byus.net 에 오신후, 질답게시판 혹은 자유게시판에 글 남겨주세요 ^^; # 자동 생성 index.html -> index.htm 으로 이름 변경 ( 초보자 혼동 방지 ) # htdocs(public_html) 폴더가 없을 경우 자동 추가 8월 27일 ( /etc/skel ) # asf,wma 미디어 파일 재생 접근 차단 여부 추가 8월 16일 ( $streaming ) # 제로보드 링크 주소 일부 변경 admin.php 로 연결 8월 13일 # 디폴트 도메인 에서 계정 중복 여부 체크 8월 8일 (다중 서버 관리시 최소 필터링) # 도메인 메일 셋팅시 센드메일 재시작하여 메일주소 활성화 수정 7월 16일 # $1 값이 있으면 데몬을 리스타트 하지 않도록 수정 (대량 계정 등록시 이용) 7월 1일 # 텔넷으로 타회원 디렉토리 검색하는 보안 버그 처리 6월 16일 # whois 정보보기 추가 6월 10일 # 1차 서버의 제외한 서버에서 셋팅시 네임서버를 자동으로 건너뛰도록 설정 6월 5일 # index.html 파일 생성 지원 6월 3일 # 제로보드 설치 지원추가 6월 3일 # 메일 포워딩 수정 5월 31일 ##################### # 환경 설정 변수들 ##################### starttime=$(date +%s) user="tina" # multi server admin's setting if [ "$user" = "tina" ]; then device=eth0 # internet ethernet device's point ip1="210.118.169.13" # first server's ip ip2="210.118.169.42" # second server's ip ip3="210.118.169.118" # 3rd ip4="210.118.169.140" # 4th ip5="210.118.169.165" # 5th ip6="61.111.254.202" # 6th ip7="61.111.254.204" # 7th ip8="61.111.254.205" # 8th ip9="61.111.254.206" # 9th ip10="61.111.254.207" # 10th ip11="61.111.254.208" # 10th ip12="61.111.254.209" # 10th ip13="61.111.254.210" # 10th ip14="61.111.254.211" # 10th acckinddefault="pro" # account kind default level homediris="/home" # default homedir htdocs="public_html" # html documents dir dbnametail="" # abc 's DBNAME system ns="ns.byus.net." # first name server domain. ns2="ns2.byus.net." # second name server domain. nsip="210.118.169.13" # first name server ip ns2ip="210.118.169.42" # second name server ip domain="byus.net" # default domain name mail="mail.byus.net" # default mail server name mail2="mail2.byus.net" mail3="mail3.byus.net" mail4="mail4.byus.net" mail5="mail5.byus.net" mail6="mail6.byus.net" mail7="mail7.byus.net" mail8="mail8.byus.net" mail9="mail9.byus.net" mail10="mail10.byus.net" mail11="mail11.byus.net" mail12="mail12.byus.net" mail13="mail13.byus.net" mail14="mail14.byus.net" sendmaild="/etc/init.d/sendmail" # sendmail daemon conf="/etc/httpd/conf/httpd.conf" # httpd configuration file's point seconf="/etc/httpd/conf/httpd.conf" # httpd configuration file's point (second server) conf3=$conf conf4=$conf conf5=$conf conf6=$conf conf7=$conf conf8=$conf conf9=$conf conf10=$conf conf11=$conf conf12=$conf conf13=$conf conf14=$conf namedconf="/etc/named.conf" # named configuration file's point default_zonefile="/var/named/byus.zone" # default zone file's point zonedir="/var/named/" # zone directory named="/etc/init.d/named" # named daemon file's point httpd="/etc/init.d/httpd" # httpd daemon's point sehttpd="/etc/init.d/httpd" # second server's httpd point httpd3=$httpd httpd4=$httpd httpd5=$httpd httpd6=$httpd httpd7=$httpd httpd8=$httpd httpd9=$httpd httpd10=$httpd httpd11=$httpd httpd12=$httpd httpd13=$httpd httpd14=$httpd httpdowner="apache" # 웹 데몬 소유자 sehttpdowner="apache" httpdowner3="apache" httpdowner4="apache" httpdowner5="apache" httpdowner6="apache" httpdowner7="apache" httpdowner8="apache" httpdowner9="apache" httpdowner10="apache" httpdowner11="apache" httpdowner12="apache" httpdowner13="apache" httpdowner14="apache" throttleset="y" # throttle setting y/n 모듈로 올라와 있어야 오류가 없음 vfree="Volume 50M 1d" # throttle polocy traffic limit volume vpro="Volume 500M 1d" vpro1="Volume 1000M 1d" vpro2="Volume 1500M 1d" vdevperson="Volume 2000M 1d" vdevcast="Volume 2000M 1d" vdevfan="Volume 1500M 1d" vserver="None" virtusertable="/etc/mail/virtusertable" # virtusertables file's point localhostnames="/etc/mail/local-host-names" # local-host-names file's point webalizeradddefault="y" # Webalizer Site-on Logfile setting accountsubmitmailfile1="/script/submitted1.html" # 1차 서버 개통메일 위치 accountsubmitmailfile2="/script/submitted2.html" # 2차 서버 개통메일 위치 accountsubmitmailfile3="/script/submitted3.html" # 3차 서버 개통메일 위치 accountsubmitmailfile4="/script/submitted4.html" # 4차 서버 개통메일 위치 accountsubmitmailfile5="/script/submitted5.html" # 5차 서버 개통메일 위치 accountsubmitmailfile6="/script/submitted6.html" # 6차 서버 개통메일 위치 accountsubmitmailfile7="/script/submitted7.html" # 7차 서버 개통메일 위치 accountsubmitmailfile8="/script/submitted8.html" # 8차 서버 개통메일 위치 accountsubmitmailfile9="/script/submitted9.html" # 9차 서버 개통메일 위치 accountsubmitmailfile10="/script/submitted10.html" # 10차 서버 개통메일 위치 accountsubmitmailfile11="/script/submitted11.html" # 11차 서버 개통메일 위치 accountsubmitmailfile12="/script/submitted12.html" # 12차 서버 개통메일 위치 accountsubmitmailfile13="/script/submitted13.html" # 13차 서버 개통메일 위치 accountsubmitmailfile14="/script/submitted14.html" # 14차 서버 개통메일 위치 submitmailsenddefault="y" # submitted account mailsend sysopmailaddress="sontina@chollian.net" # sysop's mail address sysopmailaddress2="" # sysop's mail address zeroinstdefault="y" # 제로보드 설치 디폴트값 zeroinstdir="/script/zboard" # 제로보드 소스위치 zerodirname="zboard" # 제로보드 설치디렉이름 indexfiledefault="y" # 회원 index.html 파일 추가 streaming="y" # 셋팅중 asf,wma 미디어 지원여부 선택 else echo ">>> 환경 설정 후 사용요망 " exit fi ### 일반적인 공통 셋팅 부분 dat=$(date +%Y%m%d) # Current date call - Don't touch serial="$dat""01" # zone file serial # check sum value (no edit) checkupacc="n" checkupname="n" ### 현재 서버 추적 currentip=`/sbin/ifconfig $device | grep "inet " | awk '{print $2}' | cut -c6-` case "$currentip" in "$ip1" ) currentserver=1 ;httpdown=$httpdowner;mailfile="$accountsubmitmailfile1";; "$ip2" ) currentserver=2 ;mail=$mail2;conf=$seconf;httpd=$sehttpd;httpdown=$sehttpdowner;mailfile="$accountsubmitmailfile2";; "$ip3" ) currentserver=3 ;mail=$mail3;conf=$conf3;httpd=$httpd3;httpdown=$httpdowner3;mailfile="$accountsubmitmailfile3";; "$ip4" ) currentserver=4 ;mail=$mail4;conf=$conf4;httpd=$httpd4;httpdown=$httpdowner4;mailfile="$accountsubmitmailfile4";; "$ip5" ) currentserver=5 ;mail=$mail5;conf=$conf5;httpd=$httpd5;httpdown=$httpdowner5;mailfile="$accountsubmitmailfile5";; "$ip6" ) currentserver=6 ;mail=$mail6;conf=$conf6;httpd=$httpd6;httpdown=$httpdowner6;mailfile="$accountsubmitmailfile6";; "$ip7" ) currentserver=7 ;mail=$mail7;conf=$conf7;httpd=$httpd7;httpdown=$httpdowner7;mailfile="$accountsubmitmailfile7";; "$ip8" ) currentserver=8 ;mail=$mail8;conf=$conf8;httpd=$httpd8;httpdown=$httpdowner8;mailfile="$accountsubmitmailfile8";; "$ip9" ) currentserver=9 ;mail=$mail9;conf=$conf9;httpd=$httpd9;httpdown=$httpdowner9;mailfile="$accountsubmitmailfile9";; "$ip10" ) currentserver=10 ;mail=$mail10;conf=$conf10;httpd=$httpd10;httpdown=$httpdowner10;mailfile="$accountsubmitmailfile10";; "$ip11" ) currentserver=11 ;mail=$mail11;conf=$conf11;httpd=$httpd11;httpdown=$httpdowner11;mailfile="$accountsubmitmailfile11";; "$ip12" ) currentserver=12 ;mail=$mail12;conf=$conf12;httpd=$httpd12;httpdown=$httpdowner12;mailfile="$accountsubmitmailfile12";; "$ip13" ) currentserver=13 ;mail=$mail13;conf=$conf13;httpd=$httpd13;httpdown=$httpdowner13;mailfile="$accountsubmitmailfile13";; "$ip14" ) currentserver=14 ;mail=$mail14;conf=$conf14;httpd=$httpd14;httpdown=$httpdowner14;mailfile="$accountsubmitmailfile14";; * ) echo "환경 변수 설정을 하시고 사용하시기 바랍니다";exit;; esac ######################### # 계정 등록설정 ######################### clear echo echo "=======================================================================" echo " * 사용자 계정 및 각종 설정 자동화 스크립트 작성자: 손희태(풀비누) " echo "=======================================================================" echo "=======================================================================" echo " * 작성일 : 2002.3.6 " echo " * 수정일 : 2002.8.30 " echo " * 갱신버젼 : 0.85 " echo " * 홈페이지 : http://byus.net " echo "=======================================================================" echo "=======================================================================" echo " * 서버 셋팅변수 : $user " echo " * 기본 도메인 : $domain " echo echo " * 1차 네임서버 : $ns ( $nsip )" echo " * 2차 네임서버 : $ns2 ( $ns2ip )" echo "=======================================================================" echo echo ">>> 서버 아이피 : $currentip " echo ">>> 제 $currentserver 서버로 검색 되었습니다. 현재 3차 서버까지 지원합니다." if [ ! $currentserver = 1 ]; then echo ">>> 1차 서버에서의 네임 서버 설정을 마쳤다는 가정하에, 셋팅이 들어가니, 주의 하시기 바랍니다" fi echo echo -n "### 계정등록을 할 서버를 선택하세요. ( Default : $currentserver ) : " read where if [ ! $where ]; then where=$currentserver fi # 셋업할 서버의 ip 획득 case "$where" in "1" ) ipsetup=$ip1 ;; "2" ) ipsetup=$ip2 ;; "3" ) ipsetup=$ip3 ;; "4" ) ipsetup=$ip4 ;; "5" ) ipsetup=$ip5 ;; "6" ) ipsetup=$ip6 ;; "7" ) ipsetup=$ip7 ;; "8" ) ipsetup=$ip8 ;; "9" ) ipsetup=$ip9 ;; "10" ) ipsetup=$ip10 ;; "11" ) ipsetup=$ip11 ;; "12" ) ipsetup=$ip12 ;; "13" ) ipsetup=$ip13 ;; "14" ) ipsetup=$ip14 ;; * ) echo ">>> 서버 번호를 정확히 입력 바랍니다";exit;; esac echo echo ">>> 셋업할 서버의 아이피 정보 : $ipsetup ( $where 차 서버 ) " funcacc () { echo echo -n "### 계정을 입력하세요 : " read account if [ ! $account ]; then echo ">>> 계정명을 넣어 주시기 바랍니다." funcacc elif (( $(cat /etc/passwd |grep -c "^$account:") > 0 )) ;then echo ">>> 계정이 이미 존재합니다. 다시 입력바랍니다 " funcacc fi ### 계정 중복 여부 필터링 ( 디폴트 존파일 검색 - 도메인 등록자는 필터링 못함 ) if [ $currentserver = 1 ] && (( $(cat $default_zonefile | grep -c "\<$account\>") > 0 )) ; then echo ">>> 계정이 존파일에 이미 존재합니다. 다시 입력 바랍니다 " funcacc fi } ### 현재의 서버가 셋업할 서버와 동일한 경우 (계정설정 과 디비설정에 적용) if [ $where = $currentserver ]; then funcuseradd () { funcacc echo echo ">>> 홈디렉이 다음과 같이 검색되었습니다" if (( $(df -h | grep -v "common" | grep -c "home") > 0 )); then df -h | egrep "Mount|home" | grep -v "common" else ls -al / | grep "home" fi echo echo -n "### 계정 홈 디렉의 위치를 설정해 주세요 => /home" read homedir2 homedir=$homediris$homedir2 echo echo ">>> 계정 종류 : (free, pro), pro1, pro2, devperson, devcast, devfan, server " echo -n "### 계정 종류를 설정하세요 ( Default : $acckinddefault ) : " read acckind if [ ! $acckind ];then acckind="$acckinddefault" fi if [ -d "$homedir" ] ; then # 계정 종류에 따라 쉘 사용여부 & 사용자 정보 등록 (/etc/passwd) case "$acckind" in "free" ) userad=$(useradd $account -c $acckind -s "/bin/false" -d "$homedir/$account") ;; "pro" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;;   "pro1" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; "pro2" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; "devperson" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; "devcast" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; "devfan" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; "server" ) userad=$(useradd $account -c $acckind -s "/bin/bash" -d "$homedir/$account") ;; * ) echo ">>> 계정 종류가 정확하지 않습니다." ; funcuseradd ;; esac if $userad ; then passwordinput () { echo echo -n "### 비밀 번호를 입력하여 주세요 : " read passaccount if [ ! $passaccount ];then passwordinput fi } passwordinput echo $passaccount | passwd $account --stdin chown "$account"."$httpdown" "$homedir/$account" chmod 710 "$homedir/$account" echo "initdate $(date +%Y-%m-%d\ %H:%M)" >> $homedir/$account/.userinfo # htdocs 확인 if [ $htdocs ] && [ ! -d "$homedir/$account/$htdocs" ] ; then mkdir "$homedir/$account/$htdocs" chown "$account"."$account" "$homedir/$account/$htdocs" chmod 711 "$homedir/$account/$htdocs" fi echo echo "==================================================" echo ">>> 계정 $account 이 생성 되었습니다" echo ">>> 홈 디렉 $homedir 에 대한 정보입니다" echo ls -l $homedir |grep "\<$account\>" echo cat /etc/passwd | grep "^$account:" echo "==================================================" # 정상 계정 등록 체크 시트 checkupacc="y" fi else echo echo ">>> $homedir 디렉이 존재하지 않습니다" homedir=$homediris funcuseradd fi } funcuseradd ########################## # DB 설정 ########################## echo echo -n "### 디비를 설정하시겠습니까? [y/n] ( default : Y ) : " read dbok if [ "$dbok" = "n" ] || [ "$dbok" = "N" ]; then echo echo ">>> 디비설정이 취소 되었습니다" else funcdb () { echo echo -n "### 디비네임을 입력하세요 ( default : $account$dbnametail ) : " read dbname if [ ! $dbname ]; then dbname="$account""$dbnametail" fi if [ $dbname ]; then echo dbname is $dbname echo echo -n "### 디비 암호를 입력하세요 ( default : $passaccount ) : " read pass if [ ! $pass ]; then pass=$passaccount fi echo "dbpasswd is $pass" echo "create database $dbname;" > /tmp/dbadd.sql echo "grant all privileges on $dbname.* to $account@localhost identified by '${pass}';" >> /tmp/dbadd.sql chmod 700 /tmp/dbadd.sql echo echo ">>> 다음 sql 문이 실행됩니다" echo echo "==================================================" cat /tmp/dbadd.sql echo "==================================================" echo echo ">>> 디비가 다음과 같이 추가후 검색되었습니다.(해당디비가 나오면 정상추가)" mysql mysql < /tmp/dbadd.sql mysqlshow -h localhost | grep "\<$dbname\>" rm -rf /tmp/dbadd.sql fi } funcdb fi elif [ ! $where = 1 ] && [ $currentserver = 1 ]; then echo echo ">>> $where 차 서버 셋팅이므로 1차 서버에선 네임서버 와 메일 포워딩 설정만 진행됩니다." echo ">>> $where 차 서버의 계정 생성시엔 $where 차서버에서 addon 스크립을 한번더 실행하셔야 합니다" else echo echo ">>> 1차 에서 타서버 네임서버 셋팅 혹은 현재서버의 계정 셋팅이 아닌경우 취소가 됩니다." exit 0 fi echo echo "------------------------------------------------------------" echo "계정 셋팅 여부 : $checkupacc ( y = 셋팅됨, n = 셋팅안됨 )" echo "------------------------------------------------------------" #################### # 네임서버 설정 #################### echo echo ">>> 네임서버 설정은 1 차 서버에서만 셋팅이 진행 됩니다" if [ $currentserver = 1 ]; then echo -n "### 네임서버를 설정하시겠습니까? [Y/n] ( default : Y ) : " read nameok else echo ">>> 1 차 서버가 아니므로 네임서버 설정은 하지 않습니다." nameok="n" fi if [ "$nameok" = "n" ] || [ "$nameok" = "N" ]; then echo ">>> 설정이 취소 되었습니다" else clear ### 현재 서버가 1차 서버 일 경우 네임서버 설정 if [ $currentserver = 1 ] ;then # 계정 등록을 하지 않고, 네임서버만 설정할 경우 account 정보 취득 if [ ! "$checkupacc" = "y" ]; then funcacc fi # 무단 스크립 종료시 남아있을 수 있는 임시파일 삭제 rm -rf /tmp/zone rm -rf /tmp/hosting rm -rf /tmp/named.conf rm -rf /tmp/virtusertable rm -rf /tmp/localhostnames echo -n "### 개인 도메인이 있습니까? [y/n] ( default : Y ) : " read pdomain ### 개인 도메인이 없을 경우 # 포워딩할 메일서버주소를 취득 case "$ipsetup" in "$ip1" ) mailforwarding=$mail;; "$ip2" ) mailforwarding=$mail2;; "$ip3" ) mailforwarding=$mail3;; "$ip4" ) mailforwarding=$mail4;; "$ip5" ) mailforwarding=$mail5;; "$ip6" ) mailforwarding=$mail6;; "$ip7" ) mailforwarding=$mail7;; "$ip8" ) mailforwarding=$mail8;; "$ip9" ) mailforwarding=$mail9;; "$ip10" ) mailforwarding=$mail10;; "$ip11" ) mailforwarding=$mail11;; "$ip12" ) mailforwarding=$mail12;; "$ip13" ) mailforwarding=$mail13;; "$ip14" ) mailforwarding=$mail14;; * ) ;; esac if [ "$pdomain" = "n" ] || [ "$pdomain" = "N" ]; then echo echo "$account IN A $ipsetup" > /tmp/zone echo echo ">>> 다음 내용이 $default_zonefile 에 등록되었습니다" echo "==================================================" cat /tmp/zone echo "==================================================" cat /tmp/zone >> $default_zonefile echo ">>> 서브 도메인 이므로 virtusertable 에 메일 등록을 하지 않습니다" # 설정할 계정 서버가 1차 서버가 아닌경우 메일 포워딩 if [ ! $ipsetup = 1 ];then echo echo ">>> 메일 주소가 포워딩 됩니다." echo "$account@$domain $account@$mailforwarding" > /tmp/virtusertable echo echo ">>> 다음 내용이 $virtusertable 에 등록되었습니다" echo "==================================================" cat /tmp/virtusertable echo "==================================================" echo cat /tmp/virtusertable >> $virtusertable makemap hash $virtusertable < $virtusertable echo ">>> Mail Daemon's virtusertable DB 가 갱신되었습니다" rm -rf /tmp/virtusertable fi else ### 개인 도메인이 있을 경우 funcdns () { echo echo -n "### 개인 도메인 명을 말하세요. (ex. $account.net) : " read yourdomain if [ ! $yourdomain ]; then funcdns fi } funcdns zone="$yourdomain"".zone" echo echo "\$TTL 86400" > /tmp/zone echo "@ IN SOA $ns master.$domain. (" >> /tmp/zone echo "$serial ;serial">> /tmp/zone echo "10800 ;refresh">> /tmp/zone echo "3600 ;retry">> /tmp/zone echo "604800 ;expire">> /tmp/zone echo "86400 ;minimum">> /tmp/zone echo ")">> /tmp/zone echo " IN NS $ns">> /tmp/zone echo " IN NS $ns2">> /tmp/zone echo "@ IN A $ipsetup">> /tmp/zone echo "ns IN A $nsip">> /tmp/zone echo "ns2 IN A $ns2ip">> /tmp/zone echo "www IN A $ipsetup">> /tmp/zone echo echo ">>> 다음 내용이 $zonedir$zone 에 등록되었습니다" echo "==================================================" cat /tmp/zone echo "==================================================" echo "zone \"$yourdomain\" IN {type master; file \"$zone\"; };" >/tmp/named.conf echo echo ">>> 다음 내용이 $namedconf 에 등록되었습니다" echo "==================================================" cat /tmp/named.conf echo "==================================================" cat /tmp/zone >> $zonedir$zone cat /tmp/named.conf >> $namedconf rm -rf /tmp/zone rm -rf /tmp/named.conf fi if [ ! $1 ]; then # 대량 계정 셋팅시 데몬 재시작 취소 $named restart echo ">>> 네임서버가 재시작 되었습니다" fi # 네임 서버 정상 셋팅 체크 시트 checkupname="y" else echo ">>> 1차 서버가 아니므로 네임서버 설정은 취소 되었습니다" fi # 1차서버에서 타서버 네임서버 셋팅후 스크립 종료 if [ ! $where = $currentserver ] ; then echo ">>> 네임서버 셋팅이 정상적으로 등록되었습니다. 스크립이 종료됩니다." echo exit fi fi echo echo "------------------------------------------------------------" echo " 네임서버 셋팅 여부 : $checkupname ( y = 셋팅됨 , n = 셋팅 안됨 )" echo "------------------------------------------------------------" #################### # 메일 서버 설정 #################### echo # 개인 도메인이 있는 경우 디폴트 값을 변경 if [ $yourdomain ] || [ ! "$currentserver" = "1" ]; then echo ">>> 개인 도메인이 있는 경우는 필히 셋팅을 하셔야 합니다" echo -n "### 메일 서버를 설정하시겠습니까? [Y/n] ( default : Y ) : " read mailok else echo ">>> 개인 도메인이 없는 경우는 메일 서버 셋팅을 하지 않으셔도 됩니다" echo -n "### 메일 서버를 설정하시겠습니까? [y/N] ( default : N ) : " read mailok if [ ! $mailok ] ; then mailok="n" fi fi if [ "$mailok" = "n" ] || [ "$mailok" = "N" ]; then echo ">>> 설정이 취소 되었습니다" else # 네임 서버 설정을 건너뛴경우 나 1차 서버가 아니라서 네임서버 설정을 않했을때 if [ "$nameok" = "n" ] || [ "$nameok" = "N" ]; then echo -n "### 개인 도메인이 있습니까? [y/n] ( default : Y ) : " read pdomain if [ "$pdomain" = "n" ] || [ "$pdomain" = "N" ]; then echo ">>> 개인 도메인이 없는 경우 메일 서버 설정을 하실수 없습니다" else funcdns () { echo echo -n "### 개인 도메인 명을 말하세요. (ex. $account.net) : " read yourdomain if [ ! $yourdomain ]; then funcdns fi } funcdns fi fi if [ "$pdomain" = "n" ] || [ "$pdomain" = "N" ]; then echo else funcemail () { echo echo -n "### 포워딩할 이메일 주소를 적어주세요 ( default : $account@$yourdomain ) : " read email if [ ! $email ]; then email="$account"@$yourdomain fi echo ">>> 메일 주소가 $email 로 지정됩니다" echo "$email $account@$mail" > /tmp/virtusertable echo echo ">>> 다음 내용이 $virtusertable 에 등록되었습니다" echo "==================================================" cat /tmp/virtusertable echo "==================================================" echo echo "$yourdomain" > /tmp/localhostnames echo ">>> 다음 내용이 $localhostnames 에 추가 되었습니다" echo "==================================================" cat /tmp/localhostnames echo "==================================================" echo } funcemail cat /tmp/virtusertable >> $virtusertable cat /tmp/localhostnames >> $localhostnames makemap hash $virtusertable < $virtusertable echo ">>> Mail Daemon's virtusertable DB 가 갱신되었습니다" # sendmail restart (도메인 등록자에 한해 재시작 반영) if [ ! $1 ]; then # 대량 계정 셋팅시 데몬 재시작 취소 $sendmaild restart echo ">>> 센드메일 데몬이 재시작 되었습니다" fi rm -rf /tmp/virtusertable rm -rf /tmp/localhostnames fi fi #################### # 웹 서버 설정 #################### ### httpd.conf 파일 셋팅 echo echo > /tmp/hosting echo "### 등록일: $dat 계정명: $account 계정종류: $acckind ###" >> /tmp/hosting echo "<VirtualHost $currentip>" >> /tmp/hosting # 개인 이메일의 유무 if [ ! $email ] ;then echo " ServerAdmin $account@$domain" >> /tmp/hosting else echo " ServerAdmin $email" >> /tmp/hosting fi echo " DocumentRoot $homedir/$account/$htdocs" >> /tmp/hosting # 개인 도메인의 유무 if [ ! $yourdomain ]; then echo " ServerName $account.$domain" >> /tmp/hosting else echo " ServerName www.$yourdomain" >> /tmp/hosting echo " ServerAlias $yourdomain" >> /tmp/hosting fi # 웹 트래픽 제한 ( throttle policy ) if [ "$throttleset" = "y" ]; then case "$acckind" in "free" ) echo " ThrottlePolicy $vfree " >> /tmp/hosting ;; "pro" ) echo " ThrottlePolicy $vpro " >> /tmp/hosting ;; "pro1" ) echo " ThrottlePolicy $vpro1 " >> /tmp/hosting ;; "pro2" ) echo " ThrottlePolicy $vpro2 " >> /tmp/hosting ;; "devperson" ) echo " ThrottlePolicy $vdevperson " >> /tmp/hosting ;; "devcast" ) echo " ThrottlePolicy $vdevcast " >> /tmp/hosting ;; "devfan" ) echo " ThrottlePolicy $vdevfan " >> /tmp/hosting ;; "server" ) echo " ThrottlePolicy $vserver " >> /tmp/hosting ;; * ) echo ">>> throttle policy 정책이 수립되지 않았습니다" ;; esac fi # asf,wma 파일 플레이 차단 셋팅 여부 if [ "$streaming" = y ] ; then echo -n "### 실시간 파일(asf,wma) 을 지원하시겠습니까? (Default : y) : " read streaming if [ "$streaming" = "n" -o "$streaming" = "N" ] ; then echo " <Directory \"$homedir/$account/\"> " >> /tmp/hosting echo " <Files ~ \"\\.(as.|wm.)$\"> " >> /tmp/hosting echo " Order allow,deny " >> /tmp/hosting echo " Deny from all " >> /tmp/hosting echo " </Files> " >> /tmp/hosting echo " </Directory> " >> /tmp/hosting fi fi # 로그 파일 셋팅 if [ ! $yourdomain ]; then echo " ErrorLog logs/$account.$domain-error_log" >> /tmp/hosting echo " CustomLog logs/$account.$domain-access_log combined" >> /tmp/hosting else echo " ErrorLog logs/$yourdomain-error_log" >> /tmp/hosting echo " CustomLog logs/$yourdomain-access_log combined" >> /tmp/hosting fi echo "</VirtualHost>" >> /tmp/hosting echo ">>> 다음 내용이 $conf 에 등록되었습니다" echo "==================================================" cat /tmp/hosting echo "==================================================" cat /tmp/hosting >> $conf if [ ! $1 ]; then # 대량 계정 셋팅시 데몬 재시작 취소 $httpd restart fi echo echo ">>> httpd 서버가 재시작되었습니다" rm -rf /tmp/zone rm -rf /tmp/hosting ######################### # 제로보드 자동 설치 지원 ########################## if [ "$zeroinstdefault" = "y" ]; then echo echo -n "### 제로보드 설치지원을 하시겠습니까? [Y/n} ( default : $zeroinstdefault ) : " read zeroinst if [ ! $zeroinst ]; then zeroinst=$zeroinstdefault fi if [ "$zeroinst" = "y" ] || [ "$zeroinst" = "Y" ];then if [ -d $zeroinstdir ] ; then cp -a $zeroinstdir $homedir/$account/$htdocs/$zerodirname chmod 707 $homedir/$account/$htdocs/$zerodirname chown $account.$account $homedir/$account/$htdocs/$zerodirname -R echo ">>> $zeroinstdir 의 자료를 홈 디렉으로 복사 성공하였습니다" else echo ">>> $zeroinstdir 이 존재하지 않습니다. 제로보드 설치에 실패했습니다" fi else echo echo ">>> 제로보드 설치지원이 취소되었습니다" fi fi ############################## # 가입자 index.html 파일 생성 ############################## # /etc/skel/ 하위에 존재할수 있는 index.html 파일을 무시하고 새로 파일 생성을 원할경우 # 가입자 정보를 기초로 index.html 파일을 생성 if [ $indexfiledefault = "y" ]; then echo > /tmp/index.html cat >> /tmp/index.html << EOF <html> <body background="http://byus.net/image/bgcheck.gif"> <table align=center width=800> <tr> <td> <pre> $domain 에서 알립니다. $account 회원님의 가입을 축하 드립니다. 현재 이 사이트는 정상적으로 오픈 되었습니다. * 계정 등록일 :$(date +%Y-%m-%d\ %H:%M) * 등록 서버 : $where 차 서버 * 등록 서버 아이피 : $ipsetup * 계정 아이디 : $account * 계정 비번 : 신청하신 비밀번호 * 계정 종류 : $acckind * 홈 디렉토리 : $homedir/$account/$htdocs/ * HOSTNAME : localhost * MYSQL DB NAME : $dbname * MYSQL DB PASSWORD : 계정 비번과 동일 * MYSQL DB USER : $account </pre> EOF # 제로보드 설치링크 바로가기 if [ "$zeroinst" = "y" ] || [ "$zeroinst" = "Y" ];then echo "<span style='font-size:9pt;'>* 제로보드 인스톨 바로가기 <a href=/$zerodirname/admin.php>[ GO ]</a></span><br>">>/tmp/index.html echo "<span style='font-size:9pt;'>* 제로보드 메뉴얼 새창열기 <a href=http://nzeo.com/manual/index.html target=_blank>[ GO ]</a></span><br>">>/tmp/index.html fi cat >> /tmp/index.html << EOF </td> </tr> </table> </body> </html> EOF echo ">>> index.html 파일이 생성되었습니다" mv -f /tmp/index.html $homedir/$account/$htdocs/index.htm chown $account.$account $homedir/$account/$htdocs/index.htm fi ################################## # 가입자에게 메일 보내는 스크립트 ################################## echo echo "### 시스템관리자( $sysopmailaddress )와 가입자에게 동시에 메일이 발송됩니다" echo -n "### 가입자에게 가입완료 메일을 보내시겠습니까? [y/n] ( default : $submitmailsenddefault ) : " read submitmailsend if [ ! $submitmailsend ];then submitmailsend=$submitmailsenddefault fi if [ "$submitmailsend" = "y" -o "$submitmailsend" = "Y" ]; then echo echo -n "### 가입자의 메일주소를 적으세요 : " read usermailaddress else echo echo ">>> 시스템 관리자 에게만 가입정보 메일이 보내집니다" fi title="[ $account ] 회원님 가입처리 현황 - $domain" titleuser="[ $domain ] $account 회원님의 가입처리가 완료 되었습니다" echo > /tmp/submit.txt chmod 700 /tmp/submit.txt #year=$(date +%Y) #month=$(date +%m) #day=$(date +%d) cat >> /tmp/submit.txt << EOF * $domain 에서 계정 셋팅결과를 알립니다. * 이 메일은 가입자와 운영자에게 송신되는 메일 입니다. * 셋팅에 이상한 점이 있으면, 운영진 에게 연락 바랍니다. * 문의 메일 : mailto:$sysopmailaddress =================  :: 회원정보 :: ================= * 계정 등록일 :$(date +%Y-%m-%d\ %H:%M) * 등록 서버 : $where 차 서버 * 등록 서버 아이피 : $ipsetup * 등록 서버 호스트 : $(hostname) * 1차 네임서버 : $ns ( $nsip ) * 2차 네임서버 : $ns2 ( $ns2ip ) -> 도메인 소지분들은 도메인 등록기관에 가신후 위의 네임서버로 정보를 갱신하시기 바랍니다. ( 갱신 반영소요시간 24~48시간 ) * 계정 아이디 : $account * 계정 비번 : $passaccount * 계정 종류 : $acckind * 홈 디렉토리 : $homedir/$account/$htdocs/ =================  :: 디비 정보 :: ================= * HOSTNAME : localhost * MYSQL DB NAME : $dbname * MYSQL DB PASSWORD : $passaccount * MYSQL DB USER : $account EOF if [ $yourdomain ];then echo "* Home Address : http://$yourdomain">> /tmp/submit.txt homeaddress="$yourdomain" else echo "* Home Address : http://$account.$domain">> /tmp/submit.txt homeaddress="$account.$domain" fi if [ $email ];then echo "* Email Address : mailto:$email">> /tmp/submit.txt echo "* User Email : mailto:$usermailaddress">> /tmp/submit.txt else echo "* Email Address : mailto:$account@$domain">> /tmp/submit.txt echo "* User Email : mailto:$usermailaddress">> /tmp/submit.txt fi cat >> /tmp/submit.txt << EOF =================  :: 접속정보 :: ================= EOF if [ $yourdomain ];then echo "* FTP 접속 주소 : FTP://$yourdomain">> /tmp/submit.txt echo "* SSH / TELNET 접속 주소 : $yourdomain">> /tmp/submit.txt echo "* POP/SMTP Server Address : $mail">> /tmp/submit.txt else echo "* FTP 접속 주소 : FTP://$account.$domain">> /tmp/submit.txt echo "* SSH / TELNET 접속 주소 : $account.$domain">> /tmp/submit.txt echo "* POP/SMTP Server Address : $mail">> /tmp/submit.txt fi cat >> /tmp/submit.txt << EOF EOF # 운영진에게 계정 셋팅 메일 송신 mail -s "$title" $usermailaddress $account $sysopmailaddress $sysopmailaddress2 < /tmp/submit.txt echo echo ">>> 메일을 $sysopmailaddress $account $usermailaddress 로 송신하였습니다" rm -rf /tmp/submit.txt # 가입자에게 계정 셋팅 메일 송신 # 유닉스 메일 명령으로 html 파일 송신이 제대로 보이지 않은 현상관련 보류중. #if [ $usermailaddress ]; then # if [ -f $mailfile ]; then # mail -s "$titleuser" $usermailaddress < $mailfile # echo # echo ">>> 가입자에게 등록 완료 메일을 송신하였습니다" # else # echo # echo ">>> 가입자에게 보낼 메일 파일이 존재하지 않습니다" # echo ">>> 가입자에게 계정셋팅처리 메일 송신에 실패했습니다" # fi #fi ############################################### # 가입자 정보 기록 /root/userinfo ############################################### # 초기화 (/root/userinfo 원본) if [ ! -f /root/userinfo ]; then touch /root/userinfo chmod 644 /root/userinfo echo "# 사용자 계정 정보 등록 파일" >> /root/userinfo echo >> /root/userinfo fi # 개인 정보 등록 # 아이디 이메일 홈주소 계정등록일 (tab 으로 구분) if [ /root/userinfo ]; then if [ $(cat /root/userinfo|grep "\<$account\>") ]; then echo echo ">>> 동일 아이디가 /root/userinfo 에 등록되어 있습니다" echo "$account $usermailaddress $homeaddress $(date +%Y-%m-%d)" >> /root/userinfo else echo "$account $usermailaddress $homeaddress $(date +%Y-%m-%d)" >> /root/userinfo fi fi # 초기화 (/bin/userinfo 사본 - 계정 이용자들 참조용) if [ ! -f /bin/userinfo ]; then touch /bin/userinfo chmod 644 /bin/userinfo echo "# 사용자 계정 정보 등록 파일" >> /bin/userinfo echo >> /bin/userinfo fi # 개인 정보 등록 # 아이디 이메일 홈주소 계정등록일 (tab 으로 구분) if [ /bin/userinfo ]; then if [ $(cat /bin/userinfo|grep "\<$account\>") ]; then echo echo ">>> 동일 아이디가 /bin/userinfo 에 등록되어 있습니다" echo "$account $usermailaddress $homeaddress $(date +%Y-%m-%d)" >> /bin/userinfo else echo "$account $usermailaddress $homeaddress $(date +%Y-%m-%d)" >> /bin/userinfo fi fi ################################################# # 외부 웹 얼라이져 설정 파일을 불러오는 스크립트 ################################################# echo echo -n "### 웹 얼라이져 로그 작업을 시작하시겠습니까? [y/n] ( default : $webalizeradddefault ) : " read webalizeradd if [ ! $webalizeradd ] ; then webalizeradd=$webalizeradddefault fi if [ "$webalizeradd" = "n" -o "$webalizeradd" = "N" ]; then echo echo "### 모든 설정이 끝났습니다 ###" echo else if [ -f /root/logsadd ];then /root/logsadd $account else echo ">>> 스크립 파일이 존재하지 않습니다. 로그 얼라이져 스크립 실행이 중단되었습니다" fi echo echo "### 모든 설정이 끝났습니다 ###" echo fi ########################## #도메인의 후이즈 정보 보기 ########################## if [ $yourdomain ]; then echo -n "### $yourdomsin 도메인의 whois 정보를 보시겠습니까? [y/n] ( default : y ) : " read whoisok if [ ! "$whoisok" = "n" -o ! "$whoisok" = "N" ]; then whois $yourdomain echo ping -c3 $yourdomain echo fi fi endtime=$(date +%s) jobtime=`expr $endtime - $starttime` echo "스크립 실행 소요시간 : $jobtime 초"

# addon 2.
#!/bin/bash # Usage : ./adduser id password e-mail # 2002/11/3 최초 작성 # 2002/11/4 제로보드 설치지원 추가, # 메일보내기 지원, 안내페이지 변경, 사용자 체크 # 2002/12/5 logrotate 설정 추가 dateis=$(date +%Y/%m/%d) timeis=$(date | awk '{print $4}') # ./adduser.sh 실행시 변수가 있는지 체크 if [ $# = 0 ] then echo "Usage: ./adduser.sh id pass e-mail" exit 1 fi # 사용자 계정 생성 if useradd -g hosting $1 then echo $2 | /usr/bin/passwd --stdin $1 # 제로보드 설치 지원 echo -n "Zeroboard Install? - [Y/N](default N) : " read zero if [ "$zero" = "y" ] || [ "$zero" = "Y" ]; then cp -R /home/chicpro/bbs/ /home/$1/public_html/ chown -R $1.hosting /home/$1/public_html/bbs chmod 707 /home/$1/public_html/bbs chmod 707 /home/$1/public_html/bbs/data chmod 707 /home/$1/public_html/bbs/icon fi # weblogs 디렉토리 생성 mkdir /home/$1/public_html/weblogs # Mysql 에 새로운 DB 를 추가합니다. echo -n "MYSQL DB Create? - [y/n](default n) : " read db if [ "$db" = "y" ] || [ "$db" = "Y" ]; then echo -n "MYSQL root password: " read pass touch /tmp/mysql_dbusersetup_temp echo "create database $1;" >> /tmp/mysql_dbusersetup_temp echo "insert into db values('localhost','$1','$1','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');" >> /tmp/mysql_dbusersetup_temp echo "insert into user values('localhost','$1',password('$2'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N');" >> /tmp/mysql_dbusersetup_temp /usr/bin/mysql -u root -p$pass mysql < /tmp/mysql_dbusersetup_temp rm -f /tmp/mysql_dbusersetup_temp /usr/bin/mysqladmin -u root -p$pass reload fi # quota 설정 # edquota -u $1 # 아파치 vhost.conf 파일에 가상호스트 부분을 추가함 echo " " >> /etc/httpd/conf/vhost.conf echo "<VirtualHost www.cable.websamo.net>" >> /etc/httpd/conf/vhost.conf echo " ServerAdmin $3" >> /etc/httpd/conf/vhost.conf echo " DocumentRoot /home/$1/public_html" >> /etc/httpd/conf/vhost.conf echo " ServerName $1.cable.websamo.net" >> /etc/httpd/conf/vhost.conf echo " ThrottlePolicy Volume 100M 1d" >> /etc/httpd/conf/vhost.conf echo " ErrorLog logs/$1-error_log" >> /etc/httpd/conf/vhost.conf echo " CustomLog logs/$1-access_log combined env=!nosave" >> /etc/httpd/conf/vhost.conf echo "</VirtualHost>" >> /etc/httpd/conf/vhost.conf # 사용자별 Webalizer 설정 echo "LogFile /var/log/httpd/$1-access_log" >> /etc/webalizer/$1-webalizer.conf echo "LogType clf" >> /etc/webalizer/$1-webalizer.conf echo "OutputDir /home/$1/public_html/weblogs" >> /etc/webalizer/$1-webalizer.conf echo "HistoryName webalizer.hist" >> /etc/webalizer/$1-webalizer.conf echo "Incremental yes" >> /etc/webalizer/$1-webalizer.conf echo "IncrementalName webalizer.current" >> /etc/webalizer/$1-webalizer.conf echo "HostName $1.websamo.net" >> /etc/webalizer/$1-webalizer.conf echo "PageType htm*" >> /etc/webalizer/$1-webalizer.conf echo "PageType cgi" >> /etc/webalizer/$1-webalizer.conf echo "PageType php" >> /etc/webalizer/$1-webalizer.conf echo "PageType php3" >> /etc/webalizer/$1-webalizer.conf echo "/usr/local/bin/webalizer -c /etc/webalizer/$1-webalizer.conf" >> /root/cron/webalizer.cron # logrotate 설정 추가 echo " " >> /etc/logrotate.d/apache echo "/var/log/httpd/$1-access_log {" >> /etc/logrotate.d/apache echo " missingok" >> /etc/logrotate.d/apache echo " postrotate" >> /etc/logrotate.d/apache echo " /usr/bin/killall -HUP httpd" >> /etc/logrotate.d/apache echo " endscript" >> /etc/logrotate.d/apache echo "}" >> /etc/logrotate.d/apache echo " " >> /etc/logrotate.d/apache echo "/var/log/httpd/$1-error_log {" >> /etc/logrotate.d/apache echo " missingok" >> /etc/logrotate.d/apache echo " postrotate" >> /etc/logrotate.d/apache echo " /usr/bin/killall -HUP httpd" >> /etc/logrotate.d/apache echo " endscript" >> /etc/logrotate.d/apache echo "}" >> /etc/logrotate.d/apache # 사용자별 사용량 체크 추가 echo "/usr/bin/du -sh /home/$1 >> /home/chicpro/usage.txt" >> /root/cron/usage.cron # 안내페이지 생성 echo " <td><p><b>웹사모의 가족이 되신 것을 진심으로 축하드립니다!!<br>" >> /home/$1/public_html/index.html echo " 현재</b>($dateis $timeis)<b> $1 님의 계정이 발급되었습니다.<br>" >> /home/$1/public_html/index.html echo " 아래 내용은 신청하신 정보입니다.</b><br><br>" >> /home/$1/public_html/index.html echo " ID : $1 / 신청하신 Password / E-mail : $3<br>" >> /home/$1/public_html/index.html echo " 웹주소 : http://$1.websamo.net<br>" >> /home/$1/public_html/index.html echo " FTP : ftp.websamo.net 포트 9585 / SSH : ssh.websamo.net 포트 22<br>" >> /home/$1/public_html/index.html if [ "$zero" = "y" ] || [ "$zero" = "Y" ]; then echo " 제로보드 설치지원 : <a href=http://$1.cable.websamo.net:9000/bbs/install.php target=_blank>제로보드설치</a><br><br>" >> /home/$1/public_html/index.html else echo " <br>" >> /home/$1/public_html/index.html fi echo " <b>기타 문의 사항은 </b><a href=http://websamo.net><b>http://websamo.net</b></a><b> 을 방문해 주시기 바랍니다</b></p>" >> /home/$1/public_html/index.html echo " </td>" >> /home/$1/public_html/index.html echo " </tr>" >> /home/$1/public_html/index.html echo " </table>" >> /home/$1/public_html/index.html echo " </td>" >> /home/$1/public_html/index.html echo " <td bgcolor=#76CBED width=1></td>" >> /home/$1/public_html/index.html echo " </tr>" >> /home/$1/public_html/index.html echo " <tr>" >> /home/$1/public_html/index.html echo " <td colspan=3><img src=title_error02.gif width=586 height=9 border=0></td>" >> /home/$1/public_html/index.html echo " </tr>" >> /home/$1/public_html/index.html echo " </table>" >> /home/$1/public_html/index.html echo " </td>" >> /home/$1/public_html/index.html echo " </tr>" >> /home/$1/public_html/index.html echo "</table>" >> /home/$1/public_html/index.html echo " </td>" >> /home/$1/public_html/index.html echo " </tr>" >> /home/$1/public_html/index.html echo "</table>" >> /home/$1/public_html/index.html echo " </body>" >> /home/$1/public_html/index.html echo "</html>" >> /home/$1/public_html/index.html # 계정 발급 완료 메일 보내기 title="계정 발급 안내 입니다." # 메일 제목 echo " 계정 발급 및 세팅이 완료되었습니다." > /tmp/contents # 보낼 메일 내용 echo " ==================================" >> /tmp/contents # 보낼 메일 내용 echo " 계정 세팅이 완료 되었습니다. ($dateis $timeis)" >> /tmp/contents echo " 아래는 신청하신 정보입니다." >> /tmp/contents echo " 일치하지 않으면 메일 (chicpro@korea.com) 주세요." >> /tmp/contents echo " " >> /tmp/contents echo " ID : $1" >> /tmp/contents echo " PASS : $2" >> /tmp/contents echo " e-mail : $3" >> /tmp/contents echo " " >> /tmp/contents echo " WEB주소 : http://$1.websamo.net" >> /tmp/contents echo " FTP주소 : ftp.websamo.net 포트 9585" >> /tmp/contents echo " SSH주소 : ssh.websamo.net 포트 22" >> /tmp/contents echo " " >> /tmp/contents echo " 웹주소로 접속하면 안내페이지를 보실 수 있습니다." >> /tmp/contents echo " " >> /tmp/contents echo " 기타 궁금하신 점은 http://websamo.net 을 방문해주세요." >> /tmp/contents cat /tmp/contents >> /tmp/data.txt rm -f /tmp/contents mail -s "$title" $3 < /tmp/data.txt rm -f /tmp/data.txt # 아파치 서버 재 구동 /etc/init.d/httpd restart exit 0 else echo " User $1 already exist!!" exit 1 fi

댓글목록

등록된 댓글이 없습니다.

1,139 (13/23P)

Search

Copyright © Cmd 명령어 3.133.146.94