|
rsync 설정과 사용
rsync란 서로 다른 두 컴퓨터에 들어 있는 정보를 서로 동기화 시킬때 사용한다.
동일한 소스가 두군데 존재하고 한쪽을 편집했을때, 다른 한쪽에 편집한 부분을 업데이트 시켜줘야한다.
이때 모든 소스를 옮기게 되면 시간적으로 많은 낭비가 있기 때문에 rsync는 수정된 부분만 비교해서 옮겨 주게 된다.
그리고 anonymous 서버로도 설정할 수 있는등 많은 유용한 기능들이 들어있다.
rsh이나 ssh을 이용하여 전송하기
이것은 원격지의 호스트에 계정이 있고 rsync의 서버 데몬이 설정되어 있지 않을 경우 사용한다.
간단히 로컬에서도 cp 대신 사용할 수도 있다. ssh를 이용하면 안전하게 복사할 수 있다.
아래의 방법대로 하면 간단히 원격지로 복사할 수 있다.
shell> rsync -arvu -e ssh /from/directory/ to.hostname.com:/to/direcotry
여기서 디렉토리를 써 줄경우 마지막 부분의 /가 중요한 의미를 가진다.
마직막에 /가 있을 경우는 그 디렉토리 내의 모든 파일을 의미하고 /가 없을 경우는 그 디렉토리 자체를 말하는 것이다.
-arvu는 아래 부분을 참조하기 바란다.
원격지 서버 설정하기
먼저 리눅스 최신본을 설치하면 기본적으로 rsync가 설치된다. 그러나 xinetd를 이용하여 서버로 설정은 되어 있지 않기 때문에 서버로 사용할 수 있도록 설정을 해 주어야 한다.
xinetd.d에 rsync파일 추가하기
/etc/xinetd.d디렉토리에 rsync라는 파일을 만들고, 아래와 같은 내용을 입력한뒤, 저장한다.
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
/etc/services파일에도 아래와 갈은 내용이 없으면 추가해 주도록 한다.
rsync 873/tcp # rsync
rsync 873/udp # rsync
그리고 /etc/rc.d/init.d/디렉토리에서 xinetd를 restart 시켜준다.
shell> /etc/rc.d/init.d/xinetd restart
rsyncd.conf 파일 생성
/etc디렉토리에 rsyncd.conf라는 파일을 생성한다.
#motd = /etc/rsync.motd # file : message of the day
uid = nobody
gid = nobody
use chroot = no
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
[www.wangsy]
path = /somewhere/in/remote/host
comment = www.wangsy.com homepage
read only = false
uid = apache
gid = apache
auth users = wangsy
secrets file = /etc/rsyncd.secrets
위 파일과 함께 /etc디렉토리에 rsyncd.secrets파일도 함께 생성한다.
name:password
그리고 /etc/rsyncd.secrets파일의 permission을 rw-------로 해주는 것을 잊지 말도록 한다.
client에서 접근하기
서버 내용 내려받기
다음 명령을 통해서 서버의 내용을 다운 받을 수 있다.
shell> rsync -avz home.inzoo.co.kr::www.wangsy target_dir/
그리고 아래 명령을 통해서 로컬에서 수정된 파일을 서버에 반영할 수 있다.
shell> rsync -avz target_dir/ home.inzoo.co.kr::www.wangsy
위에서 -avz의 의미는 각각 다음과 같다. 자세한 사항은 rsync 홈페이지의 메뉴얼에서 확인할 수 있다.
-a, --archive archive mode
-v, --verbose increase verbosity
-z, --compress compress file data
-u, --update update only (don't overwrite newer files)
약간의 문제
client의 ip와 hostname이 lookup되지 않으면 remote호스트에서 접근을 허용하지 않는 문제가 있다. 이는 ADSL로 접속할 경우 연결이 되지 않게 되는 문제가 발생한다. 서버로 바로 접속하는 것 보다는 위 처음 방식인 ssh를 통한 접속 방법이 좀더 보안상 안전하기 때문에 이방법을 이용하는것이 좋을듯 하다.
------------------------------------------------------------------------------------
호스트간의 데이터 동기화를 위한 rsync 설정
********************************************************************* 호스트간의 데이터 동기화를 위한 rsync 설정 ********************************************************************* 제목 : 호스트간의 데이터 동기화를 이한 rsync 설정 작성자 : 문태준(taejun@taejun.pe.kr http://www.taejun.pe.kr) 작성일 : 2000. 4. 12 ********************************************************************* 참고자료 : http://www.taejun.pe.kr/board2/read.php3?table=linuxinfo&no=28&page=1 rsync 이용 동기화하기 (박명순님 pms89@hitel.net 글) 레드햇 리눅스 6 서버 - 파워북 출판사, 번역판중 rdist 관련 자료 man page - rsync(1), rsyncd.conf(5) 0. 들어가며 서버 클러스터링으로 여러대의 서버를 운영하는 경우 각 호스트간의 자료 를 공유해야합니다. 공유기법에는 NFS도 있지만 NFS의 경우는 네트웍 트래 픽을 무척이나 높이므로 그 대신 rdist나 rsync를 이용할 수 있습니다. 이 글에서는 rsync를 이용하여 각 호스트간의 자료를 동기화하는 방법을 설명 합니다. 1. rsync란 무엇인가? rsync는 rcp와 비슷한 동작을 하는 프로그램으로 rcp보다 더 다양한 옵션 이 있고, 더 효율적으로 데이터를 전송합니다. (출발지와 목적지 사이에 다른 부분만을 전송) 파일크기의 변화나 시간의 변화등을 이용 동기화를 합니다. 주요 특징은 다음과 같습니다. ㅇ 링크, device, 소유자, 그릅, 허가권 복사 지원 ㅇ GNU tar와 비슷한 exclude, exclude-from 옵션 지원 ㅇ rsh 또는 ssh 등 사용가능 ㅇ root 권한이 필요없음 ㅇ anonymous 또는 인증 rsync 서버 지원(미러링에 유용함) 2. rsync 설정 ㅇ 일반적인 배포판의 경우 프로그램이 들어있음. 다음과 같이 확인후 없 으면 프로그램 설치 # rpm -qa | grep rsync rsync-2.3.1-2 ㅇ rsync 2.3.1 이전 버전의 경우 "보안버그"가 있으므로 이전 버전이 설 치되어있다면 반드시 "2.3.1 이상 버전으로 업데이트"해야함 ㅇ 동기화에 사용하는 프로토콜 : rsh, ssh를 사용할 수 있음. 이를 사용 하지 않더라도 원격 rsync 서버에 TCP 포트 873을 이용 접속할 수 있음. 8 73 포트를 이용할 경우 inetd.conf 에 추가로 설정을 해야합니다. rsync stream tcp nowait root /usr/bin/rsync rsyncd --daem on --daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필 요로 합니다. 또한 /etc/services 에 다음 내용이 있는지 확인하고 없으면 추가합니다. rsync 873/tcp # rsync 추가하고 나서는 inetd 대몬을 다시 띄워야겠지요? # kill -HUP inetd_pid 만약 ssh나 rsh를 사용하는 경우에는 inetd.conf를 수정할 필요가 없습니 다. 3. 설정파일 : /etc/rsyncd.conf 예제를 보겠습니다. 다음 예제의 호스트를 www1이라고 하겠습니다. # cat /etc/rsyncd.conf [web] path = /home/www/htdocs comment = web uid = nobody gid = nobody use chroot = yes read only = yes hosts allow = www2.taejun.pe.kr max connections = 3 timeout 600 [web] 서비스명 path 서비스할 디렉토리 comment 설명 uid 파일전송하는 사용자의 id. 기본값은 nobody gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody use chroot 위의 path를 root 디렉토리로 사용. 보안상 필요함. read only 읽기전용 hosts allow 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하 려면 반드시 설정함 max connections 동시접속자수 timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경 우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음. * put(클라이언트에서 서버로 올리는 경우)을 사용하기위해서는 read only = no 로 설정을 해야됩니다. 이 외에도 여러 가지 옵션이 있지만 실제로은 위의 옵션정도가 자주 사용 됩니다. 현재 rsync 자체적으로 암호화는 지원하지 않으며 사용자 인증만 지원합니다. 추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면 ssh를 사용하면 됩니다. 4. rsync 사용하기 (접근 클라이언트를 www2.taejun.pe.kr이라고 가정함) rsync -avz --delete www1.taejun.pe.kr::web /home/taejun/~public_html -a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존 -v 상세하게 보여움 -z 전송시 압축을 함. --delete www1.taejun.pe.kr에서 web에 해당하는 내용(/home/www/htdocs) 을 ww2.taejun.pe.kr 의 /home/taejun/~public_html 로 가져오면서 www1 (서버)에는 없는 내용은 www2에서 삭제함. 만약 www2 차원에서 생성한 파 일을 보관하려면 옵션 없앰. rsync -avz foo:src/bar /data/tmp 다음 내용은 foo라는 호스트에서 src/bar 안의 내용을 지역호스트의 /data /tmp 디렉토리로 옮기는 것입니다. 여기서 알아두어야 할 것이 있습니다. 만약 위에서 src/bar/ 라고 하면 어떻게 달라질까요? bar 는 그 디렉토리 자체까지 포함해서 가져옵니다. 그렇지만 bar/ 라고 뒤에 디렉토리 표시를 하면 그 디렉토리안에 있는 내용만 가지고 옵니다. 상당히 결과가 달라질 수 있겠지요. 또한 : 과 ::의 차이는 무엇일까요? : 은 rsh나 ssh를 사용하는 것이며 :: 은 rsync 자체에서 지원하는 기능을 이용 자료를 가져오는 것으로 873 TCP 포트를 사용합니다. 상당히 헷갈리지요? : 에서 기본은 rsh를 이용하지만 -e ssh 옵션을 이용하여 ssh를 사용할 수 있습니다. ssh를 사용하려면 비 밀번호를 입력해야하는데 이것도 파일형태로 만들어서 옵션에서 지정해주 면 됩니다. 이에 대해서는 따로 설명하지는 않으며 man page를 참고하세 요. -avz 등의 옵션이 있는데 이중 중요한 옵션만 설명을 하겠습니다. -v verbose (자세하게 보여줌) -a archive mode -u update only(새로운 파일을 덮어쓰지 않음) --delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움 -z compress (전송시 압축을 함) --daemon 대몬 모드로 운영함 (이건 inetd.conf에 지정할 때 필요함) -a 는 -rlptg 와 동일합니다. -r recursive (하위 디렉토리까지 포함) -l 심볼릭 링크 재생성 -p 퍼미션 업데이트 -t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜) -g 그룹이름 변경 일반적으로 rsync는 길이와 time-stamp를 이용 파일을 비교합니다. 이제 쉘 스크립트를 만들고 cron에 등록을 하여 주기적으로 데이터를 동기 화하면 됩니다. 5. 마치며 기본적으로 암호화를 지원하지 않는 것이 아쉽고 약간은 불편합니다. ssh 를 쓰는 것도 한가지 대안이지만 비밀번호를 넣어야하고 일일이 넣기 귀찮 으면 파일형태로 지정할 수 있는데 이런 방법도 보안문제가 생길 여지가 있겠지요. 위에서 말을 한 대로 예전 패키지에는 보안 버그가 있으니 반드시 최근 패 키지로 업데이트를 하는 것! 잊지 마세요.
----------------------------------------------------------------------
rsync 이용 원격 미러링 서버 구축하기
rsync 는 원격에서 미러링 서버를 구축할때 사용되는 유틸이다.
옵션에 따라 파일의 수정 날짜를 비교해서 수정된 파일만 업데이트 할 수있기 때문에 처음 한 번만 풀 백업 해두면 그 다음 부턴 아주 빠른 속도로 업데이트 할 수있다.
서버에는 REDHAT 8.0 또는 REDHAT 7.x, REDHAT 9 가 설치되어있고,
백업 서버 역시 REDHAT8.0 이 설치되어있다.
우선 백업 계획은 서버들로부터 새벽 4시경에 1차 백업서버로 매일 백업을 받고,
1주 단위로 1차 백업 서버의 데이터를 일요일 새벽 5시에 2차 백업 서버로 전송받는다.
일단 백업 대상이 되는 서버들에 rsync 가 설치되어 있는지 확인해보고 없으면 rpm 바이너리를 받아서 설치한다.
]#rpm -qa rsync
rsync-2.5.7-0.8
참고로 rsync 에 최근 보안 결함이 발견 되었으니 반드시 최근 버전을 받아서 설치하도록...
http://updates.redhat.com/8.0/en/os/i386/rsync-2.5.7-0.8.i386.rpm
]#rpm -Uvh rsync-2.5.7-0.8.i386.rpm
rsync 는 ssh 를 이용한 방법과 873포트를 이용한 접속 방법이 있다.
나는 873 포트를 이용해서 xinetd 데몬으로 동작하도록 설정한다.
초기에는 default 로 xinetd 에서 rsync 가 disable 로 설정되어있으므로
아래와 같이 열어준다.
]#vi /etc/xinetd.d/
# default: off
# description: The rsync server is a good addition to am ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes => (요부분을 no 로...)
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
rsync 의 설정파일은 /etc/rsyncd.conf 인데 rsync 설치후에도 존재하지 않는다. 긴장하지 말고 생성해주면 된다.
백업할 대상은 /home 파티션과 /usr/local/mysql/data 디렉토리, 그리고 메일,proftp 등의 설정이 들어있는 /etc 전체로 했다.
]#vi /etc/rsyncd.conf
[www] =>rsync 에서 사용할 alias name
path = /home =>실제 디렉토리 절대 경로
comment = webservice-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.*** =>접근을 허용할 백업 서버 ip
max connections = 1
timeout = 300
[mysql]
path = /usr/local/mysql/data
comment = mysqldata-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300
[etc]
path = /etc
comment = config-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = ***.***.***.***
max connections = 1
timeout = 300
이렇게 해서 저장하면 설정은 끝났다.
슈퍼 데몬을 재시작하고
]#/etc/rc.d/init.d/xinetd restart
포트가 열려있는지 netstat 이나 telnet 명령으로 873포트를 확인해본다.
]#telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 26
]#netstat -na | grep LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 1285 /tmp/mysql.sock
873 포트가 보인다면 설정은 OK
이제 백업 당할 서버들의 설정은 끝났고, 1차 백업 서버를 세팅할 차례다.
백업할 서버 역시 rsync 가 설치 되어있는지 확인해보고 없으면 설치한다.
1차 백업 서버에 접속한 상태로 아까 세팅해 놓은 백업 당할 서버에 rsync
포트로 접속이 가능한지 테스트 해본다.
]#telnet ***.***.***.*** 873
Trying 127.0.0.1...
Connected to ***.***.***.***.
Escape character is '^]'.
@RSYNCD: 26
이렇게 대기 상태면 OK
만약 connect refuse 가 나오면 백업당할 서버의 세팅을 처음부터 다시 살펴본다.
이제 백업 과정을 기록할 로그 파일을 수동으로 만들것이다.
적당한 디렉토리( 예를 들면 /home/rsync-log)를 생성하고 파일을 기록할 수 있도록 권한을 조정한다.(좀 나은 방법이 있을텐데....허접한 관계로...)
cron 에 등록해서 하루에 1번 새벽 네시에 백업하기로 했으므로 우선
/etc/crontab 을 수정한다.
]#vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 4 * * * root run-parts /etc/cron.daily
00 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
/etc/cron.daily 디렉토리에 있는 놈들을 매일 새벽 4시1분에 실행 하도록 되었다.
이제 /etc/cron.daily 에 백업 스크립트만 생성하면 된다.
]#vi /etc/cron.daily/backup.sh
#!/bin/bash
startbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$startbackup.start
rsync -avz ***.***.***.***::www /home/svr_92/www/
rsync -avz ***.***.***.***::mysql /home/svr_92/mysql/
rsync -avz ***.***.***.***::etc /home/svr_92/etc/
endbackup=`date +%Y%m%d%H%M%S`
touch /home/rsync-log/$endbackup.end
위의 설정은 백업을 시작할때 날짜를 이름으로 가지는 빈파일을 /home/rsync-log/ 에 생성하고 백업이 끝난후에 다시 같은 위치에 시간이 기록된 파일을 생성시켜서 나중에 백업에 걸린 시간을 비교할 수 있게 되어 있다.
-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 전송 상태를 보여줌
-z 전송시 압축을 함.
rsync 에는 이 외에도 옵션이 많으므로 자세히 살펴볼 필요가 있다..!!
여기까지 해서 1차 백업 서버의 세팅이 끝났고, 이제 2차 백업 서버를 세팅할텐데........ 똑같으니까 생략한다.
참고로 내가 관리하는 20대의 서버에 40 GByte 정도의 데이터를 전송받는데
초기에 8시간 정도가 걸렸고, 그 이후 매일 실시되는 백업은 업데이트 과정이라서 매 5분 정도에 백업이 끝나는 것을 아까 백업하면서 기록한 rsync-log 로 확인 했다. 아마도 rsync 가 압축전송을 해서 이런 속도가 나오는것 같음..
5분만에 20대의 백업이 완료되다니....!!
---------------------------------------------------------------------------
rsync ssh
10개의 서버(www1 ~ 10)를 동기화 시켜야 한다고 가정한다.
동기화 시킬 메인 서버를 www1, 나머지 클라이언트 www2 ~ 10
테스트 환경 :
Linux 2.2.x ~ 2.4.x
OpenSSH_3.1p1
rsync-2.5.4-2
메인서버 www1의 rsync 설정 파일을 편집한다.
# vi /etc/rsyncd.conf
[sync]
path = /www/htdocs/sync
comment = syncdata
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www2 www3 www4 www5 www6 www7 www8 www9 www10
timeout 100
서버쪽 설정끝
클라이언트별로 ssh 인증키를 발급해서 www1에 전송한다.
$ ssh-keygen -d
로컬서버(id_dsa)와 원격서버(id_dsa.pub)의 인증키값 쌍을 생성한다.
이때, 비번을 물어보는데 rsync로 접속할때 비번없이 접속하기 위해 그냥 Enter를 친다.
생성한 원격인증키를 서버에 전송한다.
$ scp -p ~/.ssh/id_dsa.pub myid@www1:~/.ssh/authorized_keys2
비번을 물어보면 정확하게 입력한다.
참고로, 서버와 클라이언트에는 같은 사용자아이디/비번이 존재해야 한다.
### 주의사항 ###
예를들어, www2번에서 인증키를 생성한 다음 scp로 원격 copy 하면 www1에 ~/.ssh/authorized_keys2 파일이 생성된다.
www3 번 역시 ssh-keygen 으로 키값을 생성해서 scp로 전송하면 www2의 ssh 접속에 비번을 물어보게 된다.
왜냐하면, scp 명령으로 기존에 만들어졌던 authorized_keys2 파일을 덮어 씌워버리기 때문..
이 부분에서 삽질 좀 했음...
google 에서도 명쾌한 답이 나오지 않아 모든 호스트들의 ssh 접속 키값만 생성한 다음 서버의 authorized_keys2 에 직접 복사를 해줌.
단, 하나의 인증키값은 하나의 행이어야 함(LF,CR 없음) - 복사시 신중을 기해야...
모든 작업이 끝나면 테스트를 해본다.
$ hostname
www6
$ rsync -avz -e ssh www1:/www/htdocs/sync/ /www/htdocs/sync
크론으로 돌리면 자동 네트웍 동기화가 이루어 진다.
-------------------------------------------------------------------------------------
rsync
man page - rsync(1), rsyncd.conf(5)
0. 들어가며
서버 클러스터링으로 여러대의 서버를 운영하는 경우 각 호스트간의 자료
를 공유해야합니다. 공유기법에는 NFS도 있지만 NFS의 경우는 네트웍 트래
픽을 무척이나 높이므로 그 대신 rdist나 rsync를 이용할 수 있습니다. 이
글에서는 rsync를 이용하여 각 호스트간의 자료를 동기화하는 방법을 설명
합니다.
1. rsync란 무엇인가?
rsync는 rcp와 비슷한 동작을 하는 프로그램으로 rcp보다 더 다양한 옵션
이 있고, 더 효율적으로 데이터를 전송합니다. (출발지와 목적지 사이에
다른 부분만을 전송) 파일크기의 변화나 시간의 변화등을 이용 동기화를
합니다.
주요 특징은 다음과 같습니다.
ㅇ 링크, device, 소유자, 그릅, 허가권 복사 지원
ㅇ GNU tar와 비슷한 exclude, exclude-from 옵션 지원
ㅇ rsh 또는 ssh 등 사용가능
ㅇ root 권한이 필요없음
ㅇ anonymous 또는 인증 rsync 서버 지원(미러링에 유용함)
2. rsync 설정
ㅇ 일반적인 배포판의 경우 프로그램이 들어있음. 다음과 같이 확인후 없
으면 프로그램 설치
# rpm -qa | grep rsync
rsync-2.3.1-2
ㅇ rsync 2.3.1 이전 버전의 경우 "보안버그"가 있으므로 이전 버전이 설
치되어있다면 반드시 "2.3.1 이상 버전으로 업데이트"해야함
ㅇ 동기화에 사용하는 프로토콜 : rsh, ssh를 사용할 수 있음. 이를 사용
하지 않더라도 원격 rsync 서버에 TCP 포트 873을 이용 접속할 수 있음. 8
73 포트를 이용할 경우 inetd.conf 에 추가로 설정을 해야합니다.
rsync stream tcp nowait root /usr/bin/rsync rsyncd --daem
on
--daemon은 대몬모드로 시작한다는 이야기이며 /etc/rsyncd.conf파일을 필
요로 합니다.
또한 /etc/services 에 다음 내용이 있는지 확인하고 없으면 추가합니다.
rsync 873/tcp # rsync
추가하고 나서는 inetd 대몬을 다시 띄워야겠지요?
# kill -HUP inetd_pid
만약 ssh나 rsh를 사용하는 경우에는 inetd.conf를 수정할 필요가 없습니
다.
3. 설정파일 : /etc/rsyncd.conf
예제를 보겠습니다. 다음 예제의 호스트를 www1이라고 하겠습니다.
# cat /etc/rsyncd.conf
[web]
path = /home/www/htdocs
comment = web
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www2.taejun.pe.kr
max connections = 3
timeout 600
[web] 서비스명
path 서비스할 디렉토리
comment 설명
uid 파일전송하는 사용자의 id. 기본값은 nobody
gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody
use chroot 위의 path를 root 디렉토리로 사용. 보안상 필요함.
read only 읽기전용
hosts allow 호스트별 접속허용. 기본값은 all host이므로 보안을 유지하
려면 반드시 설정함
max connections 동시접속자수
timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경
우 설정을 해야 클라이언트가 죽었을 때 서버에서 접속을 해체할 수 있음.
* put(클라이언트에서 서버로 올리는 경우)을 사용하기위해서는 read only
= no 로 설정을 해야됩니다.
이 외에도 여러 가지 옵션이 있지만 실제로은 위의 옵션정도가 자주 사용
됩니다. 현재 rsync 자체적으로 암호화는 지원하지 않으며 사용자 인증만
지원합니다. 추후에는 SSL을 지원할 예정이며, 만약 암호화를 사용하려면
ssh를 사용하면 됩니다.
4. rsync 사용하기
(접근 클라이언트를 www2.taejun.pe.kr이라고 가정함)
rsync -avz --delete www1.taejun.pe.kr::web /home/taejun/~public_html
-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 상세하게 보여움
-z 전송시 압축을 함.
--delete www1.taejun.pe.kr에서 web에 해당하는 내용(/home/www/htdocs)
을 ww2.taejun.pe.kr 의 /home/taejun/~public_html 로 가져오면서 www1
(서버)에는 없는 내용은 www2에서 삭제함. 만약 www2 차원에서 생성한 파
일을 보관하려면 옵션 없앰.
rsync -avz foo:src/bar /data/tmp
다음 내용은 foo라는 호스트에서 src/bar 안의 내용을 지역호스트의 /data
/tmp 디렉토리로 옮기는 것입니다.
여기서 알아두어야 할 것이 있습니다.
만약 위에서 src/bar/ 라고 하면 어떻게 달라질까요? bar 는 그 디렉토리
자체까지 포함해서 가져옵니다. 그렇지만 bar/ 라고 뒤에 디렉토리 표시를
하면 그 디렉토리안에 있는 내용만 가지고 옵니다. 상당히 결과가 달라질
수 있겠지요.
또한 : 과 ::의 차이는 무엇일까요? : 은 rsh나 ssh를 사용하는 것이며 ::
은 rsync 자체에서 지원하는 기능을 이용 자료를 가져오는 것으로 873 TCP
포트를 사용합니다. 상당히 헷갈리지요? : 에서 기본은 rsh를 이용하지만
-e ssh 옵션을 이용하여 ssh를 사용할 수 있습니다. ssh를 사용하려면 비
밀번호를 입력해야하는데 이것도 파일형태로 만들어서 옵션에서 지정해주
면 됩니다. 이에 대해서는 따로 설명하지는 않으며 man page를 참고하세
요.
-avz 등의 옵션이 있는데 이중 중요한 옵션만 설명을 하겠습니다.
-v verbose (자세하게 보여줌)
-a archive mode
-u update only(새로운 파일을 덮어쓰지 않음)
--delete 서버쪽에 없고 클라이언트쪽에만 있는 파일을 지움
-z compress (전송시 압축을 함)
--daemon 대몬 모드로 운영함 (이건 inetd.conf에 지정할 때 필요함)
-a 는 -rlptg 와 동일합니다.
-r recursive (하위 디렉토리까지 포함)
-l 심볼릭 링크 재생성
-p 퍼미션 업데이트
-t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)
-g 그룹이름 변경
일반적으로 rsync는 길이와 time-stamp를 이용 파일을 비교합니다.
이제 쉘 스크립트를 만들고 cron에 등록을 하여 주기적으로 데이터를 동기
화하면 됩니다.
5. 마치며
기본적으로 암호화를 지원하지 않는 것이 아쉽고 약간은 불편합니다. ssh
를 쓰는 것도 한가지 대안이지만 비밀번호를 넣어야하고 일일이 넣기 귀찮
으면 파일형태로 지정할 수 있는데 이런 방법도 보안문제가 생길 여지가
있겠지요.
위에서 말을 한 대로 예전 패키지에는 보안 버그가 있으니 반드시 최근 패
키지로 업데이트를 하는 것! 잊지 마세요.
------------------------------------------------------------------------------------
rsync ssh 리눅스 복구
rsync 를 이용해서
새로 바뀐 부분만 수시로 백업가능 합니다. 원격 시스템으로 자료들이 보내집니다.
rsync 와 ssh 를 이용해서 수시로 백업을 하는 스크립트를 cron 으로 구동시킵니다.
e.g) rsync -ae ssh remoteserver:savepath localpathyouwant
물론 서버와 원격서버는 ssh 서버가 있어야 합니다.
파일시스템의 부트 섹터는 다음 방법으로 플로피에 백업할 수 있습니다.
dd if =/dev/hda if=/dev/fd0 bs=512 count=1
-----------------------------------------
복구는 원격 시스템의 하드 디스크를 사용하여 복구 합니다.
원격시스템 하드를 통째로 복사를 합니다.
부트 섹터는 별도로 복원합니다.
dd if=/dev/fd0 of=/dev/hda bs=512 count=1
-------------------------------------------------------------------------------------
두디렉토리 비교후 백업
rsync 명령을 사용 하면 간단합니다...
rsync -a [src] [des]
rsync -a A/ A'/
자세한 옵션은 rsync --help
....
꼭 일일이 업데이트할 필요 없이 링크를 이용하는것도 있습니다...
ln -s A/ A'/
(이건 A'를 링크로 만들어주는것)
-------------------------------------------------------------------------------------
rsync 사용법 간단
rsync -avz root/* /home/data_backup/ 하시면 됩니다.
ex)
[root@TEST backup]# ls
[root@TEST backup]# rsync -avz /usr/local/src/*.gz /home/kkang/backup/
building file list ... done
AntiExploit-1.3b5.tar.gz
httpd-2.0.50.tar.gz
mrtg-rrd-0.7.tar.gz
mrtg.tar.gz
wrote 7772513 bytes read 84 bytes 5181731.33 bytes/sec
total size is 7769565 speedup is 1.00
[root@TEST backup]# ls
AntiExploit-1.3b5.tar.gz httpd-2.0.50.tar.gz mrtg-rrd-0.7.tar.gz mrtg.ta