커피닉스, 시스템 엔지니어의 쉼터
  rsync에서 특정 퍼미션으로 고정하기 작성일 : 2011/03/09 18:51
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 11959
     
    제  목 : rsync에서 특정 퍼미션으로 고정하기
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2011.1.26(수)
    정리일 : 2011.3.7(월)


    1. 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--
    -------------    ---------------


    2. rsync에서 퍼미션 설정

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

    [ 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)에 해당한다.

    위의 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/
     


    한가지 예를 더 들어보겠다. 디렉토리는 모든 유저가 r-x권한을, 파일은 실행 퍼미션만 제거한다.

     
    incoming chmod = Du=rx,Dgo=rx,Fugo-x
     


    (결과)
    -------------    ---------------
    원본 서버          대상 서버
    -------------    ---------------
    drwxr-xr-x    ->   dr-xr-xr-x
    -rw-r--r--    ->   -rw-r--r--
    -rwxr--r--    ->   -rw-r--r--
    -------------    ---------------

    'incoming chmod' 파라미터 예를 몇 개 더 들었으니 참고하기 바란다.

     
    incoming chmod = Du=rwx,Dgo=rx,Fugo=r
    incoming chmod = Du=rx,Dgo=rx,Fugo=r
    incoming chmod = Dug=rwx,Do-rwx,Fug=rw,Fo-rwx
     



    3. incoming chmod과 outgoing chmod 파라미터

    지금까지는 '들어오는 파일'에 대해 퍼미션을 고정했는데, 반대 입장으로 '나가는 파일'의 퍼미션을 고정할 수도 있다. 'outgoing chmod'파라미터로 설정하면 된다.

    1) incoming chmod (일반적인 방식)
      - 대상 서버 입장에서는 '들어오는 파일(받는 파일)'이 됨을 의미한다.
      - 대상 서버에 rsyncd.conf를 설정한다.
      - 이 때 원본 서버에서 rsync 명령을 실행한다.
      - rsync <옵션> <경로> <대상 서버IP>::DEST
    2) outgoing chmod
      - 원본 서버 입장에서는 '나가는 파일(보내는 파일)'이 된다.
      - 원본 서버에 rsyncd.conf를 설정한다.
      - 이 때 대상 서버에서 rsync 명령을 실행한다.
      - rsync <옵션> <원본 서버IP>::DEST <경로>

    192.168.1.110 서버에서 -> 192.168.1.111 서버로 '나가는 파일'에 대해 퍼미션을 고정시키는 예를 들어보자.

    1) 원본 서버인 192.168.1.110서버에 rsyncd.conf를 설정한다.

     
    # Server : 192.168.1.110

    outgoing chmod = Du=rwx,Dgo=rx,Fugo=rw
     


    2) 대상 서버인 1291.168.1.111서버에서 rsync 명령을 실행한다.

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



    4. 관련글

    * rsync man page
      http://www.samba.org/ftp/rsync/rsyncd.conf.html

    * lsyncd로 서버간 파일을 실시간으로 동기화해보자. (2009.12, 글 좋은진호)
      http://coffeenix.net/board_view.php?bd_code=1696
    * Rsync를 이용한 데이터 미러링 구축  (2004.1, 글 굿스피드)
      http://coffeenix.net/board_view.php?bd_code=166
    * rsync의 write only 기능(쓰기만 가능한 설정) (2004.12, 글 좋은진호)
      http://coffeenix.net/board_view.php?bd_code=616
    * 자료를 다른 파티션으로 그대로 백업(rsync이용) (2003.10, 글 좋은진호)
      http://coffeenix.net/board_view.php?bd_code=88
    * rsync 활용(대역폭제한, 날짜별sync 등)  (2006.6, 글 좋은진호)
      http://coffeenix.net/board_view.php?bd_code=1418


    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1719