Linux/CentOS2012. 4. 11. 18:01

Centos 5.7(192.168.0.10)에 /backup 디렉토리가 있고, 그 안의 자료를

Windows XP(192.168.0.20)의 D:\down_backup 폴더에 rsync로 끌어오는 방법입니다.   

 

 

1. Centos 5.7(192.168.0.10) 설정

 

# yum install rsync xinetd

# vi /etc/xinetd.d/rsync

___________________________________________

 service rsync
{
        disable = no                     <==== yes 를 no 로 바꾸삼.
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
--------------------------------------------

 

# vi /etc/rsyncd.conf

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

Log file = /var/log/rsync.log

 

[backup_home]            <========= 소스이름
path=/home
comment=HomeBackup
uid=root
gid=root
use chroot=yes
read only=yes
hosts allow= 192.168.0.20
max connections=10
timeout=9000000

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

 

# /etc/rc.d/init.d/xinetd restart

 

방화벽에서 TCP / 873 포트 오픈

 

 

2. windows xp(192.168.0.20) 설정

 

먼저 D:\down_backup 폴더를 만든다.

그리고 아래사이트에서 cwRsyncServer_4.1.0_Installer.zip 다운받는다.

 

ftp://ftp.dutaint.co.id/freeware/ftp-webdav-ssh-server/cwRsyncServer_4.1.0_Installer.zip

 

압축을 풀고 설치를 한다.

 

설치를 하면 기본적으로 C:\Program Files\ICW 폴더에 설치가 된다.

 

backup.cmd 파일을 하나 생성한다.

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

@ECHO OFF

SETLOCAL
rem SET CWRSYNCHOME=%PROGRAMFILES%\CWRSYNC
SET CWRSYNCHOME=c:\Program Files (x86)\ICW
SET HOME=%HOMEDRIVE%%HOMEPATH%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\BIN;%PATH%

 

rsync -avzrog --delete --exclude=sess_* 192.168.0.10::backup_home /cygdrive/d/@Backup/zCentOS
pause

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

/cygdrive/d/@Backup/zCentOS는 windows xp 의 D:\@Backup\zCentOS 폴더이다.

 

이제 준비가 모두 되었다. backup.cmd 파일을 실행하자.

 

C:\Program Files\ICW>backup.cmd
----------------------------------------------------------------------------

receiving incremental file list
./
.bash_history
.bash_logout
.bash_profile
.bashrc
.cshrc
.tcshrc
anaconda-ks.cfg
drop-iptable-list
install.log
install.log.syslog
.gconf/
.gconf/apps/
.gconf/apps/%gconf.xml
.gconf/apps/gnome-session/
.gconf/apps/gnome-session/%gconf.xml
.gconf/apps/gnome-session/options/
.gconf/apps/gnome-session/options/%gconf.xml
.gconfd/
.gconfd/saved_state
.lftp/
.lftp/cwd_history
.lftp/rl_history
.lftp/transfer_log

sent 376 bytes  received 13417 bytes  9195.33 bytes/sec
total size is 45121  speedup is 3.27

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

 

이렇게 실행된다.

 

backup.cmd  를 예약된 작업에 넣어서 원하는 시간대에 실행하면 자동으로 백업이 된다.

[출처] Centos 5.x 서버에서 windows XP 로 rsync로 cwRsync를 이용해서 백업 하기 |작성자 삽질맨

 

rsyncd 백업하는 방법... (For 슈퍼데몬 xinetd)

 

기본형식

댕기는거나 미는거나 커맨드 날리는 입장에서는 슈퍼대몬과 rsyncd.conf 는 반대편 서버에 셋팅되어 있음
댕기는거나 미는거나 커맨드에서 보면 원본이 앞에 오고 복사본쪽이 뒤에 나열됨

rsyncd 댕김
rsync -avzPog 원본쪽IP::백업이름 백업디렉토리

ex) rsync -avzPog 192.168.15.178::test /home/test/

rsyncd 밀다
rsync -avzPog 백업디렉토리 복사본만들IP::백업이름

ex) rsync -avzPog /data1/ 192.168.15.179::data1

 

 

ssh를 사용한 미러링
 - xinted 설정파일 및 rsyncd.conf 파일 필요없음, 사용자 인증만 되면 동기화 가능

 

ex ) rsync -avz -e ssh hostname(IP):/타켓경로 / 백업받을경로

rsync -avz -e "ssh -p 22" XXX.XXX.30.229:/home /backup/

rsync -avzPog /etc/shadow
root@XXX.XXX.15.178:/etc

 

op)
-a : archive mode 심볼릭 링크, 속성, 퍼미션, 소유권 보존
-v : verbose 진행상황 표시
-z : compress 전송시 압축 수행
-u : update only 새로운 파일을 덮어쓰지 않음
-e : 복사를 위한 원격접속쉘 프로그램을 설정한다
--delete : 서버측에 없고 클라이언트측에만 있는 파일을 지운다

: 은 ssh 나 rsh 를 이용할때 씀
:: 은 TCP 873 포트를 이용할때 설정 (xinetd)

ex)

 

rsync -avzrO --delete --exclude="backup-53/" 115.XX.XX.52::DB /home/backup-52
- 115.XX.XX.52에 설정된 DB라는 이름의 백업을 /home/backup-52파티션에 복사
- 해당 원본의 backup-53/ 폴더를 제외하고 백업을 함

파일 확장자로도 가능
--exclude=*.bak
--exclude=*.info

--exclude="backup-53/" : backup-53 폴더는 생기지만 하위자료 복사 안됨
--exclude="backup-53/" : backup-53 폴더도 생성되지 않음

 

 

error) 아래와 같이 에러시 설정부분에 문제가 없는데 계속 에러가 난다면 selinux 해제 수행: # setenforce 0

[root@localhost /]# rsync -avzO 192.168.2.53::TEST /home/backup-53/
receiving file list ... rsync: opendir "/." (in TEST) failed: Permission denied (13)
done
sent 70 bytes received 133 bytes 406.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at main.c(1385)

 

Selinux 상태 확인 및 해제하기
  1. selinux 상태 확인
    # sestatus -v
  2. selinux 해제하기
    vi /etc/selinux/config
    이후 내용 중 아래와 같이 수정한다.
    SELINUXTYPE=disabled
    또는
    # setenforce 0

     

SELinux는 보안을 강화하기 위한 프로그램이다.

매우 강력한 프로그램으로, 파일 1개 읽을 때 조차도 권한을 검사할 정도로 강력한 보안을 요구한다.

규칙을 잘 만들어서 적용하면 아주아주 강력한 보안을 설정할 수 있지만 많은 이들은 쓸데없이 서버를 부하를 일으키거나 룰셋을

만들기 어렵다는 이유로 사용을 꺼려한다.

또한 관련 서적도 국내에 나온것이 없다.(번역서가 없다 ㅠㅠ)

더 장황하게 기술적인 것을 설명(이라기 보단 어디서 퍼오기)을 할 수 있지만

그런 것은 별로 알 필요가 없기 때문에 이정도로만 알아두면 두기로 하자.

 

만약 XWindow를 이용해서 SELinux를 끄고 싶다면 아래에 있는 ProFTPD 설치하기 편을 참고하도록 하고

터미널(혹은 콘솔창이라고도 함)에서 끄고 싶다면 아래와 같이 한다.

방법은 총 3가지가 있다.


1. 수동으로 끄기 (일시적으로만 먹힘)
system-config-securitylevel
setenforce 0

2. 커널 명령행에 다음 옵션 추가. (grub.conf 등에)
selinux=0

3. /etc/selinux/config 파일 수정 ***추천***
SELINUX=어쩌구~ 써있는 것을 SELINUX=disabled로 수정

 

 

rsync 설정 1) 로컬에서 로컬 (다른 파티션 등)로 Mirroring할 경우에는 rsync를 데몬으로 띄우지 않아도 된다. 1. /etc/rsyncd.conf 설정 ;설정변경시 rsync서버 재실행할 필요가 없다. [root@p-net etc]# vi /etc/rsyncd.conf [www] path=/usr/local/apache/htdocs comment=WWW_Backup uid=root gid=root use chroot=yes read only=yes hosts allow=192.168.1.20 ;내부 ip로 공유되어 있는 경우 공인ip는 인정되지 않는다. max connections=1 timeout 600 ;설정 방법 [www]: 서비스명 path: 서비스할 디렉토리위치 comment: 설명 uid: 파일전송하는 사용자의 id. 기본값은 nobody gid: 파일전송하는 사용자의 그룹 id. 기본값은 nobody use chroot: 위의 path를 root 디렉토리로 사용. (보안상 필요) read only: 읽기전용 ( 클라이언트에서 서버로 올리는 경우에는 read only= no 로 설정) hosts allow: 호스트별 접속허용. 기본값은 all host, 접근을 허용할 호스트의 ip를 적어주면 됨 hosts deny: 이 모듈에 연결할 수 없는 호스트들 리스트 max connections: 동시접속자수 timeout: 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음 auth users: "auth users" 옵션은 이 모듈에 접속을 허락하는 사용자 이름의 리스트를 콤마(comma)와 공백(space)로 지정한다. 사용자 이름은 지역 시스템에 존재하지 않아도 된다. “auth users”가 지정되어 있다면 클라이언트(client)는 사용자이름과 비밀번호를 이 모듈에 접속하기 위해서 제공해야 할 것이다. 이 교환을 위해서 사용되어지는 인증 프로토콜이 요구에 응답한다. 사용자이름들과 비밀번호들이 “secrets file” 옵션으로 지정되는 text 파일에 저장된다. 모든 사용자를 위해서 기본적으로 비밀번호 없이 접속할 수 있다. (이것을 “익명(anonymous) rsync”라고 부른다). secrets file: "secrets file" 옵션은 인증을 위해서 사용되는 항상의 username:password를 포함하는 파일의 이름을 지정한다. 이 파일은 “auth users” 옵션이 지정되었을 때만 참조한다. 이 파일은 행 기반이고 :(single colon)으로 구분되는 한 쌍의 username:password를 포함하고 있다. hash(#)로 시작하는 행은 주석으로 해석되고 생략된다. 비밀번호는 어떠한 문자로도 가능하지만, 많은 운영체제에서 클라이언트(client) 끝에서 치지는 패스워드의 길이의 제한을 주의해서, 8문자 보다 더 큰 패스워드는 동작하지 않을 것이다. "secrets file" 에는 기본 옵션이 없으므로, 이름을 지정해야 한다. ( /usr/local/rsync/etc/rsyncd.secrets 처럼) 2. /etc/xinetd.d/rsync 설정 [root@p-net etc]# vi /etc/xinetd.d/rsync disable = no -> disable = yes [root@p-net etc]# service xinetd restart 3. 방화벽 설정 [root@p-net etc]# vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT ;873 tcp포트 개방
또는

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
[root@p-net mail]# /etc/init.d/iptables restart 4. Client에서 접속 1) 접속 옵션 -a : archive mode (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존). -v : verbose(상세하게 보여움). -z : compress(전송시 압축을 함). --delete : 전송시 원본에 없는 파일을 복사본에서 삭제함 2) 정상접속 후 자료 수신 [root@linuxhost root]# rsync -avz 192.168.1.200::www /usr/local/apache2/htdocs/ receiving file list ... done 3) 방화벽이 오픈되지 않은 상태에서 rsync로 접속을 시도한 경우 [root@linuxhost root]# rsync -avz 192.168.1.200::www /usr/local/apache2/htdocs/ rsync: failed to connect to 192.168.1.200: No route to host rsync error: error in socket IO (code 10) at clientserver.c(97) 4) 접속허용 ip주소가 제대로 설정되지 않은 경우 [root@linuxhost root]# rsync -avz 192.168.1.200::www /usr/local/apache2/htdocs/ @ERROR: access denied to www from unknown (192.168.1.20) rsync: connection unexpectedly closed (69 bytes read so far) rsync error: error in rsync protocol data stream (code 12) at io.c(150) <리스트 5> 특정한 ssh port 사용 rsync -avuzr -e "ssh -p 8888" /home 192.168.100.210:/data 접속할 서버의 패스워드 문제 cron에 등록해 자동화할 때 이것으로 인해 문제가 초래될 수 있다. 이때는 My Server의 ssh 키를 백업 서버에 다음과 같이 복사해 패스워드 없이도 접속할 수 있도록 설정한다. scp ~/.ssh/id_rsa.pub root@192.168.100.210:.ssh/ authorized_keys rsync의 업데이트 파일 인식 rsync가 업데이트된 파일인지 아닌지를 구별하는 방법은 다음과 같다. 먼저 My Server의 /home과 백업 서버의 /data 디렉토리 내에 있는 동일한 이름의 파일을 각각 비교한다. /data 에 있는 파일의 시간보다 /home에 있는 파일의 시간이 더 최근 것이면 업데이트된 파일이라고 판단한다. 만일 갱신된 파일이지만, 서버의 시간이 올바로 설정되지 않아 /data에 존재하는 동일 이름의 파일 시간보다 과거의 시간으로 표시되었다면 rsync는 이를 업데이트된 것으로 인식하지 못한다. 따라서 서버의 시간은 항상 정확하게 유지되어야 한다. 만일 인증키를 심을 수 없는 환경이라면 <리스트 6>을 참고해 자동으로 패스워드를 입력해주는 스크립트를 제작한다. 이를 통해서도 rsync 백업을 자동화 할 수 있다. <리스트 6> expect를 이용한 rsync 자동화 #!/usr/bin/expect spawn /rsync -avuzr -e "ssh -p8060" /home 192.168.100.210:/data expect " expect 'root@192.168.100.210's password:" send "패스워드\r" interact [출처] 웹 관리자를 위한 응급처치법|작성자 아트

Posted by iWithJoy