rsync 권한이 로컬 디렉토리에 원격 디렉토리를 백업하는 것을 거부했습니다.


11

제목에 언급 된 오류가 발생합니다.

이 비슷한 질문을 발견했습니다 : 원격 컴퓨터에서 루트 권한으로 rsync를 실행하십시오 . 그것은 내 질문에 대답하지 않습니다.

원격 서버의 관리자이며 rsync파일을 로컬 상자에 백업하는 데 사용하고 싶습니다 . 내 rsync 명령은 다음과 같습니다.

$ rsync -avz me@myserver.com:/var/www/ /backups/Sites/MySite/

대부분 작동합니다. 로그인은 키 쌍을 통해 이루어집니다. 암호를 사용할 수 없으며 사용할 수 없습니다 (편집 : SSH를 통해 로그인하십시오). 권한으로 인해 몇 개의 파일 만 전송되지 않습니다. 해당 권한을 변경하고 싶지 않습니다.

오류는 다음과 같습니다.

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

나는 할 수 없습니다 해당 파일에 대한 권한을 변경하고 싶습니다. 그것은 (그리고 그것을 좋아하는 다른 사람들) 읽을 수 없어야합니다 (루트 제외).

이것은 cron 작업에서 실행되어야하며 rsync 명령 만 사용하는 간단한 한 줄 솔루션을 선호합니다. 다음 선택은 크론 작업에서 호출 할 수있는 쉘 스크립트입니다. 어떤 경우에도 원격 컴퓨터에 수동으로 로그인하여 루트가 될 수 없습니다 (이 작업이 실행되면 잠자기 때문에).

rsync를 사용하여 로컬 상자에 백업하려면 어떻게해야합니까?


ssh me@myserver.com "cat /var/www/webapp/securestuff/install.php"> localfile 같은 것을 보여 주시겠습니까?
Florenz Kley

@Florenz Kley : 귀하의 의견을 이해하지 못합니다
MountainX

파일을 읽을 수 있다는 것을 보여 주면 작동하는 rsync 명령을 보여줍니다 :-). grawity의 옵션 # 2는 아마도 가장 좋은 방법 일 것입니다.
Florenz Kley

@Florenz Kley : ssh me@myserver.com "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX

알았습니다 rsync: send_files failed to open "/cygdrive/...": Permission denied (13). 그래서 내 소스 컴퓨터는 Windows cygwin이었습니다. 약간 다른 상황이지만 후손을 위해 내 솔루션은 cmd.exe를 마우스 오른쪽 단추로 클릭 하고 관리자 권한으로 실행하는 것이 었습니다 .
Bob Stein

답변:


8

권한이 있도록, 당신이 그렇지 않으면 읽을 수없는 파일을 백업 할 수 없습니다 중 하나를 할 필요가 변경 또는 루트에 의해 오버라이드 (override) .

보다 자세한 옵션 :

  • root@myserver.com직접 rsync'ing하여 권한을 대체하십시오 . (

  • ... 또는 서버 측 구성 요소를 비밀번호없이 실행할 수 있도록 서버에서 sudorsync구성합니다.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • 서버에서 전용 "웹 사이트 백업"계정을 만듭니다. "website-backup"계정에서 읽을 수 있도록 파일 권한을 변경하십시오. ACL을 사용할 수 있습니다 setfacl. 이 계정을 다른 용도로 사용하지 마십시오.

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • 서버에서 / var / www /를 암호화 된 tarball에 덤프하는 스크립트를 작성하십시오. 다시, 이것은 crontab을 통해 루트로 수행하거나 해당 스크립트의 비밀번호를 요구하지 않도록 sudo 를 구성하여 수행 할 수 있습니다 . 예를 들면 다음과 같습니다.

    #!/bin/sh
    tar c /var/www/ | gpg -e -r mountainx@example.com
    

    타르볼 전체를 매번 잡아 당겨 백업을 수행하면 큰 사이트에서는 비효율적 일 수 있습니다.

    ssh me@myserver.com "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    sudoers 를 편집하면 비밀번호 요구 사항이 제거됩니다 .

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    

감사. 좋은 제안. 어느 쪽이든 아마 나를 위해 일할 것입니다. 잠재적 인 부작용을 알아낼 수 있다면 superuser.com/questions/270911/… 에서 솔루션 사용을 고려하고 있습니다.
MountainX

BTW, 나는 마지막 두 가지 선택 중 하나를 의미했습니다. 서버에서 SSH를 통해 루트로 로그인 할 수 없습니다.
MountainX

@MountainX : 별도의 선택으로 "rsync via sudo"를 분리했습니다. 잘 작동 할 수도 있습니다.
user1686

감사! "susync via sudo"가 선호되는 선택입니다. 나는 당신의 제안을 시도합니다. 서버의 우분투에서 visudo를 사용하여 이것을 구현 해야하는 것처럼 보입니다. 나는 visudo를 엉망으로 만들지 않았지만, 당신은 나를 시작할 수 있도록 충분히주었습니다. 다시 감사합니다.
MountainX

5

원격 호스트에서 다음을 사용하여 rsync 데몬을 실행할 수 있습니다

UID 루트

에서 /etc/rsyncd.conf파일.

이를 통해 데몬은 CAP_DAC_OVERRIDE권한 / 소유권을 변경하지 않고도 기능 을 사용 하고 로컬 파일 시스템을 읽을 수 있습니다.

백업 만해야하는 경우 rsync를 읽기 전용 모드로 설정하는 것이 좋습니다.

읽기 전용 = true


0

파일 만 읽을 수있는 경우 파일 시스템에서 파일을 읽어 파일을 백업 root할 수있는 root액세스 권한이 있어야 합니다. rsync원시 장치가 아닌 파일 시스템에서 파일을 읽고 있습니다.

의 제외 dump, dd파일, 백업 프로그램이 파일 시스템에서 파일을 읽을 오히려 그 파티션을 복사 유사한 백업. 백업 유틸리티는이를 실행하는 데 사용 된 사용자 ID의 권한이 액세스를 방해하는 파일을 읽고 백업하지 못합니다. 이것이 당신이 처한 경우입니다.

대부분의 경우 모든 데이터를 읽을 수 있도록 백업 소프트웨어를 신뢰해야합니다. 또한 모든 데이터가 포함 된 백업 미디어를 신뢰해야합니다. 경우에 따라 백업에서 일부 파일을 제외하고 대체 방법을 사용하여 내용을 백업 할 수 있습니다.

편집 : 데이터를 보관 (모든 권한 복사) 할 때 두 서버 모두에서 루트 액세스가 필요합니다. 이 작업을 백업으로 수행하는 경우 rsync를 사용하여 파일을 읽지 만 파일을 자체 디렉토리 트리에 저장하는 BackupPC 와 같은 솔루션을 원할 수 있습니다 .


rsync 루트 액세스 권한을 부여하는 방법이 있습니다. 나는 단지 그들을 모른다. 내가 요구하는 것은 rsync 루트 액세스 권한을 부여하여 이러한 파일을 백업하는 방법입니다. "원격 컴퓨터에서 루트 권한으로 rsync 실행"에 대한 답변을 다시 검토하고 알아낼 수 있는지 확인해야합니다.
MountainX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.