ncftp 를 이용한 백업 스크립트ncftp 를 이용한 백업 스크립트

Posted at 2010. 10. 5. 12:57 | Posted in Server
반응형

ncftp 를 이용한 백업 스크립트

ncftp를 이용한 백업 스크립트입니다. 
스크립트에 원격삭제도 추가하면 더좋겠죠?


# vi /root/backup.sh

#!/bin/bash

#### 공통설정 
export Today="`date '+%y-%m-%d'`" 
backup_dir="/home/file/backup" 
backup_day="1" # 보관일(1일)

#### 디비설정 
DB_user="root"; 
DB_pass="비밀번호";


#### 원격설정 
FTP_addr="접속아이피"; 
FTP_user="아이디"; 
FTP_pass="비밀번호";


########### 오래된 백업데이터 삭제 
dirlists=`/bin/ls -t $backup_dir 2>/dev/null` 
i=1 
for dir in $dirlists ; do 
  if [ "$i" -ge $backup_day ] ; then 
    /bin/rm -rf "$backup_dir/$dir" 
  fi 
  i=$(($i+1)) 
done

####### 새로운 디렉토리 생성 
if [ ! -d "${backup_dir}/${Today}" ] 
then 
/bin/mkdir -p ${backup_dir}/$Today 
/bin/mkdir -p ${backup_dir}/$Today/homedir 
/bin/mkdir -p ${backup_dir}/$Today/databass 
/bin/mkdir -p ${backup_dir}/$Today/system 
fi

####### databass를 사용자별로 백업을 한다. 
for database in `mysqlshow -u ${DB_user} -p${DB_pass} | awk -F" " '{ print $2 }' | grep -v "^$" |grep -v "Databases"` ; do 
  mysqldump -u ${DB_user} -p${DB_pass}  "${database}" ${table} > ${backup_dir}/${Today}/databass/${database}.sql 
done

####### 시스템 디렉토리를 백업한다 
tar cvfpz ${backup_dir}/$Today/system/usr.local.tar.gz /usr/local 
tar cvfpz ${backup_dir}/$Today/system/etc.tar.gz /etc 
tar cvfpz ${backup_dir}/$Today/system/var.named.tar.gz /var/named

####### home 디렉토리에 사용자별로 백업을 한다. 
dirlists=`/bin/ls -t /home 2>/dev/null` 
for dir in $dirlists ; do 
  tar cvfpz ${backup_dir}/$Today/homedir/$dir.tar.gz /home/$dir 
done

####### 링크를 만들어 준다. 
rm -rf ${backup_dir}/today 
ln -s ${backup_dir}/$Today /${backup_dir}/today

####### 원격 데이타백업을 시작한다. 
ncftp -u${FTP_user} -p${FTP_pass} ${FTP_addr} << ./backup 
put -R ${backup_dir}/$Today 
bye

 

* 파일 경로 주의하시고 이메일주소 변경해서 사용하세요.

 

# crontab -e

05 00 * * * '/usr/bin/rdate -s time.bora.net && /sbin/clock -w' 
00 04 * * * su - root -c '/root/backup.sh | mail -s "시스템 백업 결과보고" test@abc.com'

반응형

//

TAR명령. TAR압축묶기 압축풀기TAR명령. TAR압축묶기 압축풀기

Posted at 2010. 10. 5. 12:56 | Posted in Server
반응형
TAR
  <TAR>

tar 명령은 파일을 묶는 명령입니다. 원래는 백업을 위해 테이프백업 장치인 DAT  Device 에 백업을 
할 때 쓰는 명령이었지만, 요즘은 파일의 압축이나 묶기에 더 많이 쓰이는 것 같습니다.압축명령에는 
compress 나 gzip 이 따로 있지만 tar 명령으로 통합해서 쓰면 편리하고 좋습니다. 이해를 돕기 위해 압축이나 묶여지는 파일을 "대상파일" 이라고 하고,  압축해서 생긴 파일을 "생성파일" 이라고 
하겠습니다. 우선 파일을 묶는 방법에 대해 알아 봅시다. 

묶기    $ tar cvf  생성 파일명.tar  대상 파일명 또는 대상 디렉토리

풀기    $ tar xvf  생성 파일명.tar


tar 명령으로 파일을 묶을 때는 주의해야 할 것이 있는데 바로 디렉토리 단위로 묶는 것입니다. 
공개 자료실등에서 tar 파일을 받아서 풀 경우 디렉토리 단위로 묶지 않은 파일이면 수십개의 
파일이 풀려 나와 디렉토리가 엉망이 됩니다.  신경을 써야 됩니다. 
tar는 아카이브 안의 파일에 대한 소유권과 허가권을 그대로 가지고 있으며, 심볼릭 링크나 하드링크, 
디렉토리 구조를 유지합니다. 뒤에 나오지만 tar를 이용해서 시스템내에서의 데이터의 이동이나 
복사에 자주 사용됩니다.


$ tar cvf  doc.tar doc/


위 명령은 디렉토리 doc를 모두 묶어서 doc.tar 파일로 만드는 명령입니다. 풀기는 

$ tar xvf doc.tar


doc.tar 파일이 풀리면서 /doc 가 생깁니다. tar 파일의 종류는 다음과 같습니다.

*.tar       

   *.tar.Z     <-- compress 로 압축했을 때

   *.tar.z     <-- gzip 으로 압축(gunzip으로 푼다)  

   *.tar.gz              "

   *.tgz                  "


압축은 compress 나 gzip 등의 명령을 쓰면 됩니다. 

 $ compress   대상파일명.tar

 -> 대상파일명.tar.Z

 $ gzip           대상파일명.tar

 -> 대상파일명.tar.gz


풀기는

 $ uncompress  대상파일명.tar.Z

-> 대상파일명.tar

 $ gunzip          대상파일명.tar.gz

-> 대상파일명.tar


각각의 경우에서 뒤의 확장자 .Z .gz가 붙고 떨어지는 것을 주의 깊게 보셔야 합니다. 
파일을 풀기 전에 tar 파일의 내용을 알고 싶을 때 직접 풀지 않고 내용을 보려면 -t 옵션을 주면 
풀기를 test 할 수 있습니다.

$ tar tvf  대상 파일명.tar


위에서 말 했듯이 tar 명령으로 묶기와 압축을 동시에 수행할 수 있습니다. 
바로 tar 명령에서 z 옵션을 주면 되지요.
 

$ tar cvfz

  $ tar xvfz

  $ tar tvfz


그럼  응용을 해볼까요.  다음의 네 가지는 파일을 묶고 압축하는 방법과 풀기입니다.

1. 전통적인 사용방법

 $ tar cvf  생성파일명.tar  대상파일/

-> 생성파일명.tar

 $ gzip     생성파일명.tar

-> 생성파일명.tar.gz

 $ gunzip  생성파일명.tar.gz

-> 생성파일명.tar

 $ tar xvf   생성파일명.tar

-> 대상파일/


2.파이프를 이용한 압축

$ tar cvf - 대상파일/ | gzip > 생성파일명.tgz 

->  생성파일명.tgz

$ gunzip -c  생성파일명.tgz | tar xvf -

->  대상파일/


3. 동시수행

 $ tar cvfz  생성파일명.tgz  대상파일/

-> 생성 파일명.tgz

 $ tar xvfz  생성파일명.tgz

-> 대상파일/


4. 묶어서 디렉토리 옮긴 후 풀기 

tar cvf - 대상파일명 | ( cd 디렉토리명 ; tar xvf - )

4번은 파일이나 디렉토리를 묶어서 파이프로 넘기고 cd로 목적 디렉토리로 가서 파일을 푸는 과정으로 하위 디렉토리가 복잡한 디렉토리의 이동에 유용하게 사용됩니다.

반응형

//

vsftp port 변경vsftp port 변경

Posted at 2010. 10. 5. 12:55 | Posted in Server
반응형

tp를 이용한 해킹을 막기 위해서 해외 접속 ftp에 대한 ip를 모두 차단할 수도 있지만

(GeoIP라는 거를 쓰면 됨) 간단하게 ftp port만 바꿔버릴 수도 있습니다.


vsftp의 경우 /etc/vsftpd/vsftpd.conf 에서 아래 라인을 추가 합니다.

그리고 가끔씩 ftp port를 바꿔서 해킹을 헷갈리게 하는거죠.

이거는 공용서버에서는 할 수 없겠죠? ㅎㅎ


# vsftp access port
listen=YES
listen_port=15231

반응형

'Server' 카테고리의 다른 글

ncftp 를 이용한 백업 스크립트  (0) 2010.10.05
TAR명령. TAR압축묶기 압축풀기  (0) 2010.10.05
mysql 리플리케이션으로 DB를 백업하자  (0) 2010.10.05
vsftpd passive mode 사용  (0) 2010.10.05
find를 사용한 치환  (0) 2010.10.05

//

mysql 리플리케이션으로 DB를 백업하자mysql 리플리케이션으로 DB를 백업하자

Posted at 2010. 10. 5. 12:54 | Posted in Server
반응형

가. Master 서버 설정


1. Slave 서버에서 접근할 수 있도록 권한을 준다.


mysql> GRANT REPLICATION SLAVE ON *.* TO 'ID'@'IP' IDENTIFIED BY 'PASSWORD';


ID : Master MySQL의 user id로 Slave의  접근함

IP : Slave 서버의 IP

PASSWORD :  MySQL에서 쓰는 id의 password


2. Master 역할을  수 있는 권한 부여


# vi /etc/my.cnf

[mysqld]
server-id = 1
binlog-do-db = 'DB_NAME'
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
log-bin = mysql-bin


server-id  동기화 구성에 참여한 각각의 MySQL들을 구분짓기 위한 UNIQUE ID로서 중복되면 

binlog-do-db : 실제 동기화 하려는 대상 DB의 이름. DB마다  라인씩 추가하면 된다.

binlog-ignore-db : 동기화 하지 않을 DB의  DB마다 한 라인씩 추가하면 된다.

log-bin : 아마도 mysql의  file 이름.


나. Slave 서버 


1. Slave 역할을 할 수  권한 부여


# vi /etc/my.cnf

[mysqld]
server-id = 2
master-host = 'Master IP'
master-user = 'ID'
master-password = 'PASSWORD'
master-port = 3306
log-bin = mysql-bin


server-id :  역할과 동일하게 UNIQUE ID

master-host : Master 서버의 IP

master-user : Master 서버의 MySQL에 생성했던 Replication 계정 ID

master-password : Replication 계정 ID의 비밀번호

master-port :  서버의 MySQL 원격 접속 포트번호 (기본: 3306)

log-bin :  역할과 동일하게 아마도 log file 이름


다. 동기화 작동


1. Master  재시작 후 MySQL에 접속


2. Master 서버  확인


mysql> SHOW MASTER STATUS\G
********************** 1. row **********************
                   File : mysql-bin.000003
             Position : 98
     Binlog_Do_DB : test
Binlog_Ignore_DB : mysql, information_schema
1 row in set (0.00 sec)
mysql>


3. Slave 서버  후 MySQL에 접속


4. Slave 서버 동작 



mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
********************** 1. row **********************
           Slave_IO_State : Waiting for master to send event (정상)
              Master_Host : IP
              Master_User : ID
               Master_Port : 3306
        Connection_Retry : 60
         Master_Log_File : mysql-bin.000003
Read_Master_Log_Pos : 98 
.
.
       Slave_IO_Running : Yes (정상)
    Slave_SQL_Running : Yes (정상)
.
.
1 row in set (0.00 sec)
mysql>


Read_Master_Log_Pos :  STATUS의 Position과 동일하다.


Slave_IO_State, Slave_IO_Running, Slave_SQL_Running 의  위와 같다면 정상

반응형

'Server' 카테고리의 다른 글

TAR명령. TAR압축묶기 압축풀기  (0) 2010.10.05
vsftp port 변경  (0) 2010.10.05
vsftpd passive mode 사용  (0) 2010.10.05
find를 사용한 치환  (0) 2010.10.05
mod_rewrite 별도 설치  (0) 2010.10.05

//

vsftpd passive mode 사용vsftpd passive mode 사용

Posted at 2010. 10. 5. 12:54 | Posted in Server
반응형
vi /etc/vsftpd/vsftpd.conf 에

pasv_enable=YES 추가

/etc/rc.d/init.d/vsftpd restart 실행


vi /etc/rc.d/rc.local 에

modprobe ip_conntrack_ftp 추가


reboot 실행
게시물 신고
반응형

'Server' 카테고리의 다른 글

vsftp port 변경  (0) 2010.10.05
mysql 리플리케이션으로 DB를 백업하자  (0) 2010.10.05
find를 사용한 치환  (0) 2010.10.05
mod_rewrite 별도 설치  (0) 2010.10.05
hMailServer와 ColdFusion을 이용한 웹메일 서비스 만들기  (0) 2010.10.05

//

find를 사용한 치환find를 사용한 치환

Posted at 2010. 10. 5. 12:53 | Posted in Server
반응형
find . -name "*.html" | awk '{ print "cat "$1" | sed \"s/바꾸고싶은말/바뀔말/g\" >"$1 }' | sh
반응형

//

mod_rewrite 별도 설치mod_rewrite 별도 설치

Posted at 2010. 10. 5. 12:52 | Posted in Server
반응형

mod_rewrite 설치시 도움 될만한 글입니다...
이것은 처음 설치용이 아닌 사용중 추가하는 방법입니다.

cd 아파치설치디렉토리/src/modules/standard

/usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_rewrite.c

gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm

/usr/local/apache/bin/apxs -i mod_rewrite.so

vi /usr/local/apache/conf/httpd.conf
#------- 아래 부분 추가 -------
LoadModule rewrite_module     libexec/mod_rewrite.so
Addmodule mod_rewrite.c
#------- 여기까지 ---------
/usr/local/apache/bin/apachectl configtest
/usr/local/apache/bin/apachectl restart

이렇게 하시면 에러 안나고 설치 잘 됩니다. :_)

반응형

//

hMailServer와 ColdFusion을 이용한 웹메일 서비스 만들기hMailServer와 ColdFusion을 이용한 웹메일 서비스 만들기

Posted at 2010. 10. 5. 08:46 | Posted in Server
반응형

hMailServer는 Microsoft의 Exchange와 같은 Windows용 메일서버로서 강력한 기능과 성능을 자랑하면서 무료로 쓸 수 있는 메일 서버입니다. 메일서비스가 왠만한 포털에 가입만 하면 수십GB씩 공간을 주면서 꽁짜로 쓰는 시대에 무슨 케케묶은 메일서비스 이야기냐 하시겠지만..

기업등에서 자사의 도메인으로 메일서비스를 하려는 경우 H/W 서버장비와 Windows 등의 OS등을 구매하여 비싼 메일 솔루션을 사야하는 점을 고려해보면 메일서비스란것이 만만한 작업이 아님을 아마 아시는 분들은 아실겁니다. hMailServer의 경우 국내에서는 많이 쓰이는지 확인불가입니다만, 네이버 등에서 검색해보면 단순소개 블로그글들은 종종보이는 듯 하니 저 말고는 아는 분들은 아실거라 생각합니다.

hMailServer는 ClamWin(Linux진영의 ClamAV의 Windows버전)과 다양한 필터링옵션을 제공해 보안적인 면도 고려하고 있고, 특히 설치 및 계정생성, 계정할당 등의 복잡한 메일설정을 쉽게 할 수 있으며 다중도메인도 지원하여 하나의 서버에서 여러 도메인으로 서비스 할 수 있습니다. 특히 사용자계정을 Active Directory와 통합하거나, 일시적으로 사용금지하거나 할 수 있습니다. 무엇보다 한국어 번역파일도 제공하므로 관리가 매우 쉽습니다. 더욱이 MSSQL, MySQL, PostgreSQL과 같은 데이터베이스를 기본적으로 지원하므로 대용량 이메일 서비스에서도 대응할 수 있습니다. hMailServer의 설치 및 기본적인 운영상의 정보는 다음의 링크에서 얻을 수 있습니다.(http://www.jopenbusiness.com/mediawiki/index.php/HMail_Server_4.4.1) 아울러 DNS설정, MX레코드설정 등은 본 글과는 무관하므로 자세한 설명은 차후에 하기로 하겠씁니다.

다만, 이런 설치형 메일서버의 문제점(?)이 웹에서 서비스할 경우 사용자가 가입후 자동으로 메일계정을 설정하고 바로 이메일을 활성화하여 서비스를 할 때 구축이 일반 웹개발언어로서는 다소 복잡하다는 것이 있습니다. 즉, 메일서버자체에서 다양한 API를 지원해 주지 못할 경우 웹에서 컨트롤하기 어렵다는 것이죠. 그래서 대부분의 메일서버 엔진이 Java로 구현된 이유가 아닐까 생각합니다.

다행히도 hMailServer는 Microsoft의 COM API를 지원하므로 ASP등에서 직접 VBScript를 통해 서버 API를 호출할 수 있습니다만, ASP란 언어가 Windows계열에서만 구동된다는 점은 다소 아쉬운 부분입니다. 더욱이 COM자체에 대한 연결 Component를 따로 만들어야 하는 것도 그렇고요. (이런 방식으로 hMailServer의 웹메일 솔루션을 만들어 판매하는 곳도 있더군요. 참조: 웹짱닷넷) hMailServer 자체의 COM API설명서는 다음의 링크에서 참조할 수 있습니다.(http://www.hmailserver.com/documentation/latest/?page=com_objects)

실제로 hMailServer를 설치하면 PHP로 된 웹기반 관리자 어플리케이션이 같이 설치됩니다. (단순 소스만 제공) 이 소스를 이용해서 IIS에 PHP모듈을 설치해서 서비스할 수 있겠지만 일단 PHP의 소스가 복잡해서 전 보지는 않았습니다.ㅎㅎㅎ

자.. 그래서 전 ColdFusion으로 해보려고 합니다. 왜냐? 쉽고 간결하고 강력하니까.. 더욱이 <cfmail>이나 <cfpop> 등의 메일관련 태그 몇줄로 구글의 G지메일과 같은 이메일 서비스를 바로 만들 수 있으니까요. 좀더 사용자를 고려해 보면 구글처럼 doc, ppt, xls, pdf 문서 등을 html로 바로 보여주거나, 첨부파일을 zip파일로 압축해서 다운로드되게 하거나, flex를 이용하여 대용량첨부를 가능하게하거나 하는 방법은 이미 ColdFusion에서는 제 블로그 글에서도 누누히 쉬운 작업임을 알려드린바 있기에 메일서버만 웹기반으로 컨트롤 할 수 있다면 문제는 간단해 지겠죠?

ColdFusion에서는 CreateObject()라는 함수를 제공합니다. 이 함수를 이용해서 COM, CORBA, JAVA, .NET 등의 오브젝트를 가져다 쓸 수 있습니다. 문법도 간단해서 쓰기도 편하죠. 이 함수를 이용해서 hMailServer를 컨트롤 하려고 했는데 의외로 간단하게 성공해서 솔직히 좀 김이 샜습니다. ㅎㅎㅎㅎ

hMailServer에서 제공하는 COM API의 VB예제와 같이 비슷한 문법으로 간단하게 사용자 계정을 추가하고 삭제하는 CFML 스크립트를 짜보면 다음과 같습니다.

소스코드 다운로드 :  

사용자의 추가(Add Account)

01 <!---유니코드 환경설정 --->
02 <cfprocessingdirective pageencoding="utf-8" />
03   
04 <cfscript>
05     obApp = CreateObject("com","hMailServer.Application");
06     obApp.Authenticate("Administrator","설치할때 지정한 hMailServer의 관리자 암호");
07     obDomain = obApp.Domains.ItemByName("hMailServer에서 지정한 도메인");
08   
09     obAccount = obDomain.Accounts.Add();
10     obAccount.Address = "sample@sample.com"; //추가하고자 하는 이메일주소
11     obAccount.Password = "samplepassword"; //이메일주소의 패스워드
12     obAccount.Active = True; //바로 활성화할것인지요?
13     obAccount.MaxSize = 500; //메일함용량(POP3/IMAP)의 지정
14     obAccount.Save();
15 </cfscript>

 

사용자의 삭제(Delete Account)

01 <!---유니코드 환경설정 --->
02 <cfprocessingdirective pageencoding="utf-8" />
03   
04 <cfscript>
05     obApp = CreateObject("com","hMailServer.Application");
06     obApp.Authenticate("Administrator","설치할때 지정한 hMailServer의 관리자 암호");
07     obDomain = obApp.Domains.ItemByName("hMailServer에서 지정한 도메인");
08   
09     obAccount = obDomain.Accounts.ItemByAddress("sample@sample.com"); //삭제하고자하는 메일계정
10     obDomain.Accounts.DeleteByDBID(obAccount.ID);
11 </cfscript>

 

위 스크립트를 hMailServer와 ColdFusion이 구동중인 서버에서 실행하면 사용자 계정이 생성되거나 삭제됩니다. VB 등으로 서버용 Component를 만들 필요도 없습니다. 업로드하자고 SiteGalaxy와 같은 업로드 콤포넌트 깔아댈 이유도 없습니다. 그냥 저게 답니다. ㅎㅎㅎㅎ 고로 ColdFusion은 위대합니다. 하하하하;;;

가령 ColdFusion으로 회원가입을 받는 웹사이트를 만들고 가입시 메일을 제공하고자 한다면 위 스크립트에서 사용자의 이메일주소 등만 동적으로 할당하면 자동으로 메일이 활성화 되겠죠? 물론 바이러스체크활성, 스팸단어 설정, 도메인추가 등등등 hMailServer가 제공하는 모든 COM API를 전부 구현할 수 있습니다.

웹메일 클라이언트의 구축은 지구상에서 감히 말하건데 ColdFusion보다 간단한 언어는 없습니다. (참조 : http://adoberia.co.kr/iwt/blog/blog.php?tn=flex&id=522 에서 제가 발표한 문서와 예제 중에서 메일 부분을 참조하시길 바랍니다.)


출처 : http://www.coldfusionfunnylog.com/blog/

반응형

'Server' 카테고리의 다른 글

vsftp port 변경  (0) 2010.10.05
mysql 리플리케이션으로 DB를 백업하자  (0) 2010.10.05
vsftpd passive mode 사용  (0) 2010.10.05
find를 사용한 치환  (0) 2010.10.05
mod_rewrite 별도 설치  (0) 2010.10.05

//