웹마스터 팁

아래 스크립트는 제가 개인서버를 운영하면서 계정 등록시 사용목적으로 작성했습니다.
레드햇 7.3 에서 작동확인 했으며 정상 작동했습니다.
이번 스크립트에는 logrotate 설정 내용이 추가되어 있습니다.
네임기반 가상 호스트 설정에서 기존에는 ip 주소를 넣어야 했지만 도메인을 넣어도 정상 작동합니다.

#!/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

# 사용자 계정 생성
# public_html 은 /etc/skel/ 에 위치해서 계정생성시 자동으로 생성
# public_html 퍼미션은 /etc/skel 생성 후 퍼미션 지정 해주면 지정해준 퍼미션으로 생성됨
# user 추가시 해당 유저 디렉토리 퍼미션은 /etc/login.defs 에 UMASK    076 을 추가해 퍼미션이701 로 생성됨
        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  #<-- mod_throttle 없다면 라인삭제
         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

# 안내페이지 생성
# 안내페이지의 일부분 내용은 /etc/skel/public_html/index.html 에 포함되어 있음
# 아래 내용이 첨부되어 완전한 페이지 완성
        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

# 계정 발급 완료 메일 보내기 (sendmail 이용)
        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
제목 글쓴이 날짜
초보자도 쉽게 이해할수있도록 주석을 자세히 달아놓은 APM 메뉴얼 (3 of 3) [2] Dopesoul 2002.12.21
초보자도 쉽게 이해할수있도록 주석을 자세히 달아놓은 APM 메뉴얼 (2 of 4) [4] Dopesoul 2002.12.18
초보자도 쉽게 이해할수있도록 주석을 자세히 달아놓은 APM 메뉴얼 (1 of 4) [3] Dopesoul 2002.12.18
PHP 4.2.3 파워 설치 테크닉 (에러 0%에 도전) [2] 밍밍이 2002.12.17
리눅스 rpm 명령어 활용(1): MRTG 설치 정인배 2002.12.14
DeX 님의 시간 동기화 스크립트를 편하고 안정적으로 변경한 리눅스용! [4] Dopesoul 2002.12.13
SetEnvIf 와 SetEnvIfNocase 의 차이 [7] Dopesoul 2002.12.13
[re] 저의 최종의견 입니다. [5] Dopesoul 2002.12.17
누군가 우리서버를 공격하고 있을때 응급처치! [13] Dopesoul 2002.12.13
srpms, alpha, i386 , i686 이 의미하는 것은? [1] Dopesoul 2002.12.12
레드햇(redhat)리눅스에서 rpm 관리 명령어 정인배 2002.12.09
[FreeBSD] Proftp + MySQL 연동 설치하기 [2] file DeX™ 2002.12.09
apache2 + mod_jk 100번의 닭질 끝에 찾아가는 사이트 DukeEYS 2002.12.09
mod_gzip 적용시 php 인클루드를 실패해서 포기하신분 보세요 [2] DukeEYS 2002.12.08
Zend Optimizer Full Pass Setup [3] DukeEYS 2002.12.08
오래간만에 찾아뵙는군요^^ [2] Dopesoul 2002.12.08
계정 등록 스크립트 [8] 편리 2002.12.05
[FreeBSD] 자동으로 시간 맞추기.. [1] DeX™ 2002.12.04
[계정삭제 스크립터] 편리님이 만드신 계정추가랑 연동됩니다. [4] file 김동현 2002.12.04
FTP 를 이용한 원격 백업 받기 [5] 최종우 2002.12.04