레이블이 BSD인 게시물을 표시합니다. 모든 게시물 표시
레이블이 BSD인 게시물을 표시합니다. 모든 게시물 표시

2012-09-16

qmail]FreeBSD + qmail+qmail-smtp_auth+tls+ checkpasswd

FreeBSD + qmail + qmail-smtp_auth+tls

copyleft 2003/08/15 - Powered by chabrothers.com
  update 2005/01/17

최 대한 손쉽게 설치하는데 주안점을 두었으니 문제점이 있다고 생각되시는 분은 san@chabrothers.com 으로 연락주시기 바랍니다.
FreeBSD 4.11-stable 에서 설치운영중입니다.

1. ucspi-tcp
2. qmail
3. qmail-smtp_auth+tls
4. checkpassword

위 의 4가지만 설치하였습니다.
daemontools 를 설치하지 않은 것은 지적받을만 하고요
ports collection 을 이용한 설치는 프비를 사랑하기 때문입니다.

-------------------------------------------------------------------------------

0. 관련패키지 설치

0.1 ucspi-tcp ( UNIX Client-Server Program Interface)

# cd /usr/ports/sysutils/ucspi-tcp/
# make install clean

--------------------------------------------------------------------------------
1. qmail + man page 설치

# cd /usr/ports/mail/qmail/
# make install clean
# make disable-sendmail
# make enable-qmail
# echo "OPTIONAL_MANPATH /var/qmail/man" >> /etc/manpath.config
# makewhatis
# man qmail

1.1 qmail-smtp_auth+tls 설치
tls 부분의 설명이 없는 이유는 제가 이해하지 못하고 있는점과 /usr/ports/mail/qmail-smtp_auth 가 따로없기 때문입니다.

# cd /usr/ports/mail/qmail-smtp_auth+tls
# make install clean

1.2 유저인증을 위해서 checkpassword 설치 - 보내기,받기에 모두 사용

# cd /usr/ports/security/checkpassword
# make install clean

-----------------------------------------------------------------------------------

2. SMTP 에 접근가능한 IP 를 설정하고 cdb 파일을 만들어 줍니다

# echo 127.0.0.1:allow,RELAYCLIENT="" > /etc/tcp.smtp
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp


--------------------------------------------------------------------------------

3. 관련 파일편집

3.1 새로생성되는 유저들은 홈디렉에 Maildir을 만들며 메일이 전달되게한다.

# cd /usr/share/skel

# vi dot.cshrc

  아래의 라인을 찾아 주석처리를 하고
  #set mail = (/var/mail/$USER)

  아래의 라인을 추가한다
  setenv MAIL ~/Mailbox
  setenv MAILDIR ~/Maildir
  setenv MAILTMP ~/Maildir/tmp/tmpfile
  alias mail '/var/qmail/bin/maildir2mbox;/var/qmail/bin/qail'
  alias pine '/var/qmail/bin/maildir2mbox;/var/qmail/bin/pinq'
  alias elm '/var/qmail/bin/maildir2mbox;/var/qmail/bin/elq'

  :wq

# vi dot.shrc

  아래의 라인을 추가한다

  MAIL=~/Mailbox
  MAILDIR=~/Maildir
  MAILTMP=~/Maildir/tmp/tmpfile
  export MAIL MAILDIR MAILTMP
  alias mail='/var/qmail/bin/maildir2mbox;/var/qmail/bin/qail'
  alias pine='/var/qmail/bin/maildir2mbox;/var/qmail/bin/pinq'
  alias elm='/var/qmail/bin/maildir2mbox;/var/qmail/bin/elq'

  :wq

# echo ./Maildir/ > dot.qmail

# /var/qmail/bin/maildirmake /usr/share/skel/Maildir

3.2 이미 존재하는 유저에게 메일전달되게 만들기.

# cp -R /usr/share/skel/Maildir ~USERSNAME/Maildir/
# chown -R USERSNAME ~USERSNAME/Maildir/
# cp /usr/share/skel/dot.qmail ~USERSNAME/.qmail
# chown USERSNAME ~USERSNAME/.qmail

--------------------------------------------------------------------------------

4. /var/qmail/rc 큐메일 작동파일만들기

# vi rc

#!/bin/sh
Q_UID='id -u qmaild'
Q_GID='id -g qmaild'
#
# This script starts and stops the qmail mail functions.
#

# Suck in the configuration variables.
if [ -r /etc/defaults/rc.conf ]; then
        . /etc/defaults/rc.conf
        source_rc_confs
elif [ -r /etc/rc.conf ]; then
        . /etc/rc.conf
fi

case "$1" in
start)
        case ${qmail_smtp_enable} in
        [Yy][Ee][Ss])
                # Start the qmail smtp daemon
                /usr/local/bin/tcpserver -H -R -c 255 -x /etc/tcp.smtp.cdb \
                        -u Q_UID -g Q_GID 0 25 /var/qmail/bin/qmail-smtpd domain.name \
                        /usr/local/bin/checkpassword /usr/bin/true &
                echo -n " qmail-smtp"
                ;;
        esac

        case ${qmail_pop_enable} in
        [Yy][Ee][Ss])
                # Start the qmail pop daemon
                /usr/local/bin/tcpserver -H -R -c 255 0 110 \
                        /var/qmail/bin/qmail-popup domain.name \
                        /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
                echo -n " qmail-pop"
                ;;
        esac

        case ${qmail_enable} in
        [Yy][Ee][Ss])
                # Start qmail
                exec env - PATH="/var/qmail/bin:$PATH" \
                        qmail-start ./Maildir splogger qmail &
                echo -n " qmail"
                ;;
        esac
        ;;
stop)
        # Stop the smtp daemon
        smtppid=`ps -axw | grep tcpserver | grep smtp | grep -v grep | awk '{ print $1 }'`
        if [ "$smtppid" != "" ]; then
                kill $smtppid
                echo -n " qmail-smtp"
        fi

        # Stop the pop daemon
        poppid=`ps -axw | grep tcpserver | grep popup | grep -v grep | awk '{ print $1 }'`
        if [ "$poppid" != "" ]; then
                kill $poppid
                echo -n " qmail-pop"
        fi

        # Stop qmail
        qmailpid=`ps -axw | grep qmail-send | grep -v grep | awk '{ print $1 }'`
        if [ "$qmailpid" != "" ]; then
                kill $qmailpid
                echo -n " qmail"
        fi
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        ;;
esac

exit 0


실 행파일 모드로 바꾸어준다

# chmod 750 /var/qmail/rc

--------------------------------------------------------------------------------

5. control 파일만들기

# echo domain.name > /var/qmail/control/defaultdomain
# echo host > /var/qmail/control/defaulthost

# echo host.domain.name > /var/qmail/control/locals
# echo domain.name >> /var/qmail/control/locals

# echo host.domain.name > /var/qmail/control/me

# echo host > /var/qmail/control/plusdomain

# echo host.domain.name > /var/qmail/control/rcpthosts
# echo domain.name >> /var/qmail/control/rcpthosts

/var/qmail/configure/config-fast 를 이용해서 쉽게 만들수도 있으며 아래의 기본적인 파일들이 만들어졌는지를 확인하여야 한다.

/var/qmail/control/defaultdomain
/var/qmail/control/defaulthost
/var/qmail/control/locals
/var/qmail/control/me
/var/qmail/control/plusdomain
/var/qmail/control/rcpthosts

5.1 alias 파일만들기

# echo your-admin@email.address > /var/qmail/alias/.qmail-root
# echo your-admin@email.address > /var/qmail/alias/.qmail-postmaster
# echo your-admin@email.address > /var/qmail/alias/.qmail-mailer-daemon


--------------------------------------------------------------------------------

6. sendmail 죽이기

# killall sendmail
# rm /var/run/sendmail.pid

# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

--------------------------------------------------------------------------------

7. qmail 가동하기

# /usr/local/etc/rc.d/qmail.sh start


--------------------------------------------------------------------------------

8. 작동여부 확인

# ps -ax | grep tcpserver
# ps -ax | grep qmail


--------------------------------------------------------------------------------

2012-09-15

Mail]FreeBSD 5.4R에서 qmail big-concurrency 패치시 해결방안



 
qmail 에 big-concurrency 패치를 한 후 컴파일을 하면 아래와 같은 오류가
나올경우 아래의 2가지 방법이 제시 되었다...(아직 테스트 못해봤습니다.ㅜㅜ)

   에러내용 :
   Oops. Your system's FD_SET() has a hidden limit of 1024 descriptors.
   This means that the qmail daemons could crash if you set the run-time
   concurrency higher than 509. So I'm going to insist that the concurrency
   limit in conf-spawn be at most 509. Right now it's 1000.


방법 1 :  커널소스를 보면
 sys/sys/select.h
 파 일에
 /*
 * Select uses bit masks of file descriptors in longs. These macros
 * manipulate such bit fields (the filesystem macros use chars).
 * FD_SETSIZE may be defined be the user, but the default here should
 * be enough for most uses.
 */
 #ifndef FD_SETSIZE
 #define FD_SETSIZE 1024U
 #endif
 라는 내용이 있습니다.
 기본값이 1024인데, qmail의 big-concurrency 패치는 동시에 그 이상의 파일을 생성하는 것을 허용하는 것으로 보입니다.
 커널에서 제한이 걸려 qmail이 crash가 일어날 수 있으니 동시에 열 수 있는 파일을 509 이하가 되도록 해야한다는 것입니다.
 대규모의 메일을 주고받는 서버라면 select.h 파일을 수정하고 커널컴파일을 다시 하시거나, qmail의 big-concurrency 설정을 변경하세요.

방법 2 :
         select.h를 수정할 필요 없이 FD_SETSIZE 만 어플리케이션에서
         재정의하고(#define) 빌드하면 FD_SET의 최대 크기가 변경됩니다.

2012-09-14

FreeBSD] 암호없이 ssh/scp사용방법

이 글은 암호없이 scp를 사용하는 방법을 설명한다.


리눅스 시스템 관리자는 자주 컴퓨터간에 파일을 복사하거나 파일을 여러 컴퓨터로 전송한다.
ftp를 사용해도 되지만, scp를 사용하면 많은 이점이 있다.
ftp는 LAN/WAN에 내용(심지어 암호도)을 그대로 전송하지만, scp는 암호화하여 전송하기때문에 ftp보다 안전하다.


scp 의 장점은 쉽게 스크립트에서 사용할 수 있는 점이다. 파일을 리눅스 컴퓨터 100대로 복사한다고 가정한다. 직접 100번 복사 명령어를 실행하는 것보다 스크립트를 작성하고 싶을 것이다.
스크립트에서 ftp를 사용하면 로그인할때마다 암호를 물어보기때문에 힘들다.
(역주; netrc 파일을 사용하여 암호를 자동으로 입력하게 만들 수 있지만 보안상 위험하다).

대 신 scp를 사용하는 경우 원격 리눅스 컴퓨터가 암호를 물어보지 않도록 설정할 수 있다. 믿거나 말거나 이 방법은 ftp보다 훨씬 더 안전하다!


scp의 기본 문법은 다음과 같다.
현재 컴퓨터에 있는 'abc.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사하려면:


scp abc.tgz root@bozo:/tmp


그러나 이 경우 bozo의 root 암호를 물어본다.
암호를 물어본다면 스크립트에서 쉽게 사용할 수 없다.
해결책은 다음과 같다 (한번만 해주면 "암호없이" 무제한 scp로 복사할 수 있다):


1. 나중에 scp를 사용하여 파일을 복사할 사용자를 결정한다.
물론 root가 가장 강력하고, 난 개인적으로 root를 사용한다.
여기서 root를 사용할때 발생할 수 있는 보안상 문제점을 강의할 생각은 없다.
내가 지금 무슨 말을 하는지 모르겠다면 root가 아닌 일반 사용자를 사용하라.
결정했다면 이제 그 사용자로 로그인하여 다음 단계를 진행한다.


2. 컴퓨터에 공개키(public key)와 비밀키(private key)를 만든다.
이 게 뭔가? 공개키 암호화 방식을 모른다면 15초간 설명하겠다.
공개키 암호화 방식은 수학적으로 연관된 공개키와 비밀키를 만든다.
그런 다음 공개키는 누구에게라도 줄 수 있지만, 비밀키는 아무에게도 알려주면 안된다.
키들의 수학적 구성상 신기하게도 누구나 공개키를 가지고 내용을 암호화할 수 있지만,
비밀키를 가진 당신만이 암호화한 결과를 해독할 수 있다. 어쨋든 두 키를 만드는 명령은:


ssh-keygen -t rsa


3. 다음과 같이 출력한다:
"Generating public/private rsa key pair"
"Enter file in which to save the key ... "
그냥 enter를 누른다.


4. 그러면 다음과 같이 출력한다:
"Enter passphrase (empty for no passphrase):"
passphrase 를 사용하지 않기때문에 enter를 두번 누른다.


5. 그러면 마지막으로:
"Your identification has been saved in ... "
"Your public key has been saved in ... "
방금 만든 공개키 파일명과 위치를 기억하라 (항상 파일명이 .pub로 끝난다).


6. 공개키를 파일을 복사할 모든 원격 리눅스 컴퓨터에 복사한다.
scp나 ftp를 사용하여 복사한다. root를 선택했다면 (다시 단계 1의 경고를 주의하라),
키는 /root/.ssh/authorized_keys (철자 조심!)에 있어야 한다. root가 아니고 예를 들어 clyde로 로그인한다면,
/home/clyde/.ssh/authorized_keys 에 있어야 한다. authorized_keys 파일이 다른 컴퓨터의 키를 저장하고 있을 수 있기때문에, 파일에 이미 내용이 있다면 (새파일을 덮어쓰지않고) 공개키 파일 내용을 뒤에 추가해야 한다.


이제 끝이다. 별다른 문제가 없다면 파일을 암호없이 원격컴퓨터로 scp할 수 있다. 다시 한번 테스트해보자.
컴퓨터에 있는 'xyz.tgz' 파일을 'bozo'라는 원격컴퓨터의 /tmp 디렉토리로 복사한다


scp xyz.tgz root@bozo:/tmp


와 !!! 암호를 물어보지 않고 복사가 된다!!


일단 암호 하나로 컴퓨터에 로그인하면 모든 원격컴퓨터에 접근할 수 있기때문에 보안에 대해서 주의하라.
그래서 암호를 더 잘 보호해야 한다.


이제 즐길 차례다.
컴퓨터에 있는 'houdini'란 파일을 10개 도시에 흩어져있는 원격컴퓨터의 /tmp 디렉토리로 복사하는 짧은 스크립트를 (5분 안에)
작성해보자. 물론 원격컴퓨터가 100대거나 1000대라도 마찬가지다.
원격컴퓨터들의 이름은: brooklyn, oshkosh, paris, bejing, winslow, rio, gnome, miami, minsk, tokyo.
스크립트는 다음과 같다:


#!/bin/sh
for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo
do
scp houdini root@$CITY:/tmp
echo $CITY " is copied"
done

신기한 마술같다.
스크립트에서 echo 줄은 현재 진행상황을 알려준다.


혹 시 쉘스크립트가 생소하다면 좋은 투토리얼이 있다:
http://www.freeos.com/guides/lsst/.


알 다시피 scp는 더 강력한 ssh의 일부이다.
위의 6 단계를 마쳤다면 원격컴퓨터에서 명령어를 실행할 수 있다
(물 론 암호없이!). 예를 들어, brooklyn 이라는 원격컴퓨터의 시간을 보려면:


ssh brooklyn "date"


이제 두 개념을 합쳐서 진짜로 멋진 스크립트를 만들어보자. 모든 원격 리눅스 컴퓨터를 백업하기란 쉬운 일이 아니다. 아래 스크립트는 각 컴퓨터의 /home 디렉토리를 백업한다. 상용 백업 소프트웨어와 비교하면 기능은 매우 기본적이지만, 가격면에서는 따라올 수 없다. 대부분의 상용 백업 소프트웨어는 백업할 컴퓨터 대수대로 가격을 매긴다. 이런 패키지를 사용한다면 원격컴퓨터 100대에 대한 비용을 지불하는 대신 원격컴퓨터를 한 컴퓨터로 백업하는 스크립트를 사용한라. 그리고 그 컴퓨터에서만 상용 패키지를 사용하면 99대분 가격을 절약할 수 있다 ! 어쨌던 스크립트를 참고하여 자신의 상황에 알맞는 스크립트를 작성할 수 있다. 이 스크립트를 cron 작업에 걸어둔다 (원격컴퓨터에는 필요없다). 주석을 보면 자세한 내용을 알 수 있다:

#!/bin/sh

# 변 수는 구별하기위해 대문자로 지었다

# 스크립트를 실행하기 전에 원격컴퓨터마다 '/tmp/backups'라는 디렉토리 를
# 만들고, 컴퓨터에는 '/usr/backups'라는 디렉토리를 만들어야 한다


# 컴퓨터에서,
# date 명 령어 결과를 보기 좋게 만들어서 "DATE" 변수를 설정한다
#
DATE=$(date +%b%d)

# 'for 반 복문'은 세가지 작업을 한다

for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo
do

# 1) 원격컴퓨터의 하드디스크가 꽉차지 않도록 저번에 실행한 스크립트가 만든 tarball을 삭제하 고 
# 확인을 위해 echo한다
#
ssh -1 $CITY "rm -f /tmp/backups/*.tgz"
echo $CITY " old tarball removed"

# 2) 원격컴퓨터마다 /home 디렉토리 를 tarball로 만들어서 /tmp/backups에 저장한다
# tarball 파일명은 구별하기위해 도시명과 시간으로 짓 는다
#
ssh $CITY "tar -zcvpf /tmp/backups/$CITY.$DATE.tgz /home/"
echo $CITY " is tarred"

# 3) 원격컴퓨터에 있는 tarball을 /usr/backups 디렉토리로 복사해온다
#
scp root@$CITY:/tmp/backups/$CITY.$DATE.tgz /usr/backups
echo $CITY " is copied"

done


# 나머지 부분은 오류검사용으 로 없어도 된다:

# 파일명에 날짜를 포함한 오류파일을 만든다. 
# 백업이 안된 컴퓨터가 있다면 이 파일 에 기록한다
#
touch /u01/backup/scp_error_$DATE

for CITY in brooklyn oshkosh paris bejing winslow rio gnome miami minsk tokyo

do

# tarball이 복사되었는지 검사한다. 없다면 오류파일에 기록한다
# '||'은 앞 에 있는 부분이 참이 아닐때만 뒤에 있는 부분을 실행한다는 뜻이다
#
ls /u01/backup/$CITY.$DATE.tgz || echo " $CITY did not copy" >> scp_error_$DATE


# tarball을 정상적으로 열 수 있는지 검사한다. 문제가 있다면 오류파일에 기록한다.
tar ztvf /u01/backup/$CITY.$DATE.tgz || echo "tarball of $CITY is No Good" >> scp_error_$DATE

done



출처 : linux gazette

FreeBSD] 아파치 서버과부하 해결책 - lingerd 설치법

작성 : 구자열 by webhost (danda@nate.com)

1. lingerd란 무엇일까?


아파치에서 갑작스런 libhttpd.ep 혹은 httpd가 상승하여 cpu혹은 메모리를 과도하게 점유할 경우, 일정 튜닝으로 이를 막을 순 있지만, Dos상당의공격에서는 데먼은 저절로 죽어버린다.

이때, lingerd라는 엑셀레이트를 설치하면, 아파치는 해당 과부하 프로쎄서를 죽이면서 서버가 죽는 것을 방지할 수 있다.

2. lingerd 구하기


http://www.iagora.com/about/software/lingerd/

3. 설치하기


mkdir -p /var/run/lingerd/
chown nobody.nobody /var/run/lingerd/
chmod 700 /var/run/lingerd/

tar xvzf lingerd-xxx.gz
cd lingerd-xxx
make
이렇게 하면 lingerd란 바이너리가 생긴다.

cp lingerd /usr/local/sbin
cp extra/lingerd.rc /etc/rc.d/init.d/lingerd
chkconfig --level 3 lingerd on
이렇게 해서 부트로더에 올린다.

/etc/rc.d/init.d/lingerd start


    cp apache-1.3/ap_lingerd.c li_config.h $APACHE/src/main/
    patch -p0 -d $APACHE/src/ < apache-1.3/aplinger.diff

이 과정은 아파치를 위한 과정이다.
아파치소스가 있는 폴더가 $APACHE라고 가정해서 입력하라.
즉 $APACHE는 님의 환경에 맞는 절대경로를 입력하면 된다.

이제 패치가 완료되면, APM설치과정과 같이

apache> ./configure --prefix=/usr/local/apache
apache> cd ../php-4.0.24
php> ...설치과정진행
php> cd ../apache
apache> 설치과정진행 ./configure....-> make -> make install

이렇게 하여 설치를 완료한다.

apache 재구동한다.

설치완료
- 이제부터 /var/log/messages 에 로그가 생성된다.
- /var/run/lingerd/에는 프로쎄서가 동작한다.
- /usr/local/apache/logs/error_log에는 문제발생시, 에러로그가 기록된다.

이렇게함으로써 아파치에 대한 안전한 운영이 가능해진다.

FreeBSD]rotatelog를 사용하여 아파치 로그 줄이기.


rotatelogs - 아파치 로그를 순환하기위해 파이프로 연결할 로그 프로그램


가능한 언어:  en  |  ko



rotatelogs는 아파치의 파이프 로그파일 기능을 위한 간단한 프로그램이다. 예를 들어:


  CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common 



그러면 /var/logs/logfile.nnnn 파일을 만든다. nnnn은 로그를 시작한 시스템시간이다 (이 시간은 항상 순환기간의 배수이다. 그래서 cron 스크립트로 처리하기 쉽다). 순환기간 (여기서는 24 시간) 마다 새로운 로그를 시작한다.



  CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common 



이 설정은 로그파일 크기가 5 메가바이트가 될때마다 순환한다.



  ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 



이 설정은 오류로그 파일 크기가 5 메가바이트가 될때마다 errorlog.YYYY-mm-dd-HH_MM_SS와 같은 파일을 만들어서 오류로그 파일을 순환한다.



개요
옵션
포팅가능성 


  개요

  rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]


  옵션

  logfile 

  로그파일의 경로와 이름. logfile에 '%' 문자가 있다면 strftime(3)의 형식문자열과 같이 처리한다. '%' 문자가 없다면 뒤에 초단위 시간 .nnnnnnnnnn을 자동으로 붙인다. 두 형식 모두 현재 기간부터 시작시간을 계산한다.


  rotationtime 

  로그파일을 순환할 초단위 시간.


  offset 

  UTC에서 분단위 시간차이. 생략하면 0으로 가정하여 UTC를 사용한다. 예를 들어, UTC -5 시간대의 지역시간을 사용한다면 아규먼트로 -300을 지정한다.


  filesizeM 

시간이 아닌 크기를 지정할때 메가바이트단위 최대 파일크기 뒤에 M을 붙인다. rotationtime과 offset 대신 이 파라미터를 사용한다.




  포팅가능성


  다음 로그파일 형식문자열 표현은 모든 strftime(3) 구현이 지원해야 한다. 라이브러리 특유의 확장은 strftime(3) manpage를 참고하라.



  %A (지역화된) 완전한 요일 이름
  %a (지역화된) 3-문자 요일 이름
  %B (지역화된) 완전한 달 이름
  %b (지역화된) 3-문자 달 이름
  %c (지역화된) 날짜와 시간
  %d 2-자리 일
  %H 2-자리 시간 (24 시간 시계)
  %I 2-자리 시간 (12 시간 시계)
  %j 3-자리 날짜수
  %M 2-자리 분
  %m 2-자리 달
  %p (지역화된) 12 시간 시계의 am/pm
  %S 2-자리 초
  %U 2-자리 주일수 (주의 첫번재 날은 일요일)
  %W 2-자리 주일수 (주의 첫번재 날은 월요일)
  %w 1-자리 요일수 (주의 첫번째 날은 일요일)
  %X (지역화된) 시간
  %x (지역화된) 날짜
  %Y 4-자리 연도
  %y 2-자리 연도
  %Z 시간대 이름
  %% 문자그대로 `%'



from: http://httpd.apache.org/docs-2.0/programs/rotatelogs.html