나는 rsync
이것을 다음과 같이 사용합니다 :
rsync . -vzp --rsync-path "sudo rsync" --chown=user:user --exclude .git --progress -e "ssh -p <PORT>" user@<PUBLIC_IP>:/home/user/rsync/
대상 서버에도 비슷한 명령이 있습니다 chown root:root
. 그 뒤에는 또 다른 명령이 따릅니다 rsync
. 그러나 rsync
루트 소유권이 있는 파일은 덮어쓰지 않습니다. rsync
루트 파일을 덮어쓸 수 있는 플래그가 있습니까 ?
답변1
나는 사용해 본 적이 없지만 --rsync-path "sudo rsync"
일반적으로 경로를 지정하여 작동하는 방식을 기대하지 않습니다. 프로그램은 먼저 해당 경로를 사용하여 파일이 존재하고 실행 가능한지 확인합니다. "sudo rsync"는 유효한 경로가 아닙니다. !
아마도 원하는 작업을 수행하고 인수를 전달하는 쉘 스크립트(작성해야 함)를 지정할 수 있지만 sudo는 비밀번호를 얻을 수 없습니다!
둘째, 소유권을 변경할 때 이름을 지정하는 경우 해당 이름은 원격 시스템에 있어야 하며 숫자 ID를 사용하는 것이 더 좋습니다.
루트와 사용자 모두가 소유한 파일을 전송하는 경우 서버에 루트로 로그인하고 다음을 사용하는 것이 좋습니다.--numeric-ids
어쩌면 전략을 다시 생각해 보는 것이 가장 좋습니다.
두 개의 rsync가 실행됩니다. 하나는 사용자용이고 다른 하나는 루트 파일용입니다. 이를 통해 복원 시 매핑을 적절하게 제어할 수 있습니다. 서버에 루트 액세스 권한이 없는 경우에도 작동합니다. 그러나 이로 인해 보안 위험이 발생합니다. 서버에 저장된 루트 파일은 해당 서버의 관리자가 읽을 수 있습니다!
rsync에 관한 한 로컬에서 루트 액세스 권한이 있어 복구에 다시 매핑할 수 있는 한 사용자 소유로 저장된다는 것은 중요하지 않습니다. 보안 위험 외에도.
루트 소유 파일은 이와 같으며, 서버에 노출되어서는 안 되는 민감한 정보(키, 비밀번호 등)가 포함될 수 있으므로 암호화하는 것을 고려해보세요!
목표(복구 포함)와 로컬 및 원격 시스템에 대한 액세스 유형에 대한 추가 정보를 제공해야 합니다.
[편집하다]
이것은 서버 장애에 대한 훌륭한 답변입니다. 가짜 루트 옵션을 잊어버렸습니다.https://serverfault.com/a/755824
답변2
사용 중인 명령 설정은 하위 디렉터리로 드롭다운되지 않으므로 루트 소유 파일 덮어쓰기를 거부하는 경우가 아니라 전혀 고려하지 않는 것뿐입니다. 복사된 파일을 건너뛸 수 있도록 --times
( ) 플래그 도 포함해야 합니다 .-t
rsync
이 시도:
rsync -vzrtp --rsync-path 'sudo rsync' --chown=user:user --exclude .git --progress -e 'ssh -p {PORT}' ./ user@{PUBLIC_IP}:/home/user/rsync/
그러나 "사용자"가 소유한 것처럼 보이는 디렉토리에 루트가 소유한 파일을 작성하게 된다는 점을 기억하십시오. 이는 일반적으로 좋은 방법은 아니지만 효과가 있을 것입니다.
백업 목적인 경우 루트로 원격 서비스를 실행할 필요가 없도록 --fake-super
원격 측에서 옵션을 사용하는 것이 좋습니다( 이 옵션은 원격 측에만 적용됨). -M
확장된 속성을 처리할 수 있는 원격 파일 시스템이 필요합니다( ext4
다른 기본 Linux 파일 시스템에서 이를 수행할 수 있음). 이 경우 권한과 시간뿐 아니라 모든 메타데이터를 캡처하도록 명령을 약간 수정할 수 있습니다.
rsync -avzP -M--fake-super --exclude .git -e "ssh -p {PORT}" ./ user@{PUBLIC_IP}:/home/user/rsync/
원격 서버가 확장 속성에 저장된 데이터를 사용할 수 -M-fake-super
있도록 이러한 백업에서 파일을 복원할 때도 사용해야 합니다. rsync
또한 이 변형으로 전환하는 경우 이전에 복사한 루트 소유 파일 및 디렉터리 중 어느 것도 쓸 수 없으므로 먼저 해당 파일을 다른 곳으로 이동(또는 소유권 복원)해야 합니다.
마지막으로, 테스트할 때 --dry-run
( -n
) 옵션을 포함하면 실제로 아무것도 변경하지 않고도 무슨 일이 일어나는지 보여줄 수 있다는 점을 기억하세요.