시스템이야기2011. 3. 17. 18:57

rsync


rsync는 크게 2가지 용도를 생각해볼 수 있다.

1) 파일 백업 (퍼미션 유지 필요. 백업본으로 복구할 경우 퍼미션도 중요하다.)
2) 파일 배포 (반드시 퍼미션을 유지하지 안해도 될 상황이 있다.)

rsync를 이용해서 다수의 서버를 동기화한다고 하자. 그리고, 대상 서버는 웹서버들이다. (즉, '파일 배포' 용도) 이 웹페이지 파일은 웹에서 읽을 수 있는 권한만 갖으면 된다. 쓰기 권한을 갖을 필요가 없다. (업로드가 이뤄지는 디렉토리는 쓰기 권한이 필요하겠지만)

rsync는 원본 파일(또는 디렉토리) 퍼미션과 상관없이, 싱크할 때 특정한 퍼미션으로 고정시키는 옵션이 있다. 디렉토리는 555(dr-xr-xr-x) 또는 515(dr-x--xr-x)으로, 파일은 444(-r--r--r--)로 고정해볼 수 있을 것이다. 서비스 서버(대상 서버)의 파일은 보안에 조금 더 안전하게 존재하게 된다.

(예)
-------------    ---------------
 원본 서버          대상 서버
192.168.1.123    192.168.1.110~120
-------------    ---------------
drwxr-xr-x    ->   dr-xr-xr-x
drwxrwxr-x    ->   dr-xr-xr-x
-rw-r--r--    ->   -r--r--r--
-rw-rw-rw-    ->   -r--r--r--
-------------    ---------------

대상 서버의 rsyncd.conf 예이다.

# server : 192.168.1.110
#
uid             = root
gid             = root
user chroot     = yes
max connections    = 10
hosts allow    = 192.168.1.123

[coffeenix]
path        = /home/coffeenix/public_html
read only    = no
incoming chmod  = Du=rx,Dgo=rx,Fugo=r

'incoming chmod =' 파라미터는 들어오는 파일을 특정 퍼미션으로 고정한다.
파라미터의 값은 각각 다음과 같은 의미를 갖는다.

- D : 디렉토리
- F : 파일
- ugo : 각각 user(u), group(g), other(o)에 해당한다.


[ 기본적인 파일 보호 장치인 chmod (열쇠찾아서 그리는데 쉽지 않았다. ^^) ]


위의 Du=rx,Dgo=rx,Fugo=r 는 Dugo=rx,Fugo=r처럼 통합해서 표시해도 좋다.
Du=rx는 디렉토리 소유자는 r-x(읽기, 쓰기)로 설정한다는 의미이다.
Fugo=r은 누구나(user, group, other) 파일을 읽을 수 있도록(r--)로 설정한다.
위 설정대로하면 디렉토리는 r-xr-xr-x 가 되고, 파일은 r--r--r--가 된다.

# rsync -avz --delete public_html/ 192.168.1.110::coffeenix/

보다 자세한 글은 커피닉스에 써뒀으니 살펴보시길.

Posted by 좋은진호

댓글을 달아 주세요

  1. 왕초보

    Permission denied, please try again.
    왜 이런 오류가 날까요? ㅠ
    root 암호를 넣으라고 하는데..
    secrets file='패스워드파일 경로' 를 설정했는데도요.
    배포파일인데 root 암호를 다른 사용자에게 가르쳐줄수 없잖아요. ㅠ

    2015.06.02 17:30 [ ADDR : EDIT/ DEL : REPLY ]
  2. rsync 명령을 어떻게 넣었는지 궁금하네요.
    혹시나 싶어서 그러는데, 아래 2개는 다릅니다. 콜론 2개와 1개의 차이.

    rsync 로컬파일 ID@IP::dest/
    rsync 로컬파일 ID@IP:dest/

    첫번째는 원격지 rsync서버의 secrets file에서 지정한 ID/PW(쉘 ID와 무관)로 인증한 후 [dest]에 설정한 디렉토리로 싱크합니다.
    두번째는 ssh로 원격지의 실제 쉘 ID/PW로 접속해서 ~ID/dest/ 디렉토리로 싱크합니다.

    2015.06.03 01:48 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 왕초보

    좋은진호님.. 감사합니다. 클론 2개로 해결했습니다. 좋은 하루 되세요. ^^

    2015.06.03 13:10 [ ADDR : EDIT/ DEL : REPLY ]