자산 카탈로그를 동기화하기 위해 Apache를 통해 rsync를 실행하고 있습니다.
rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /var/www/html/site/Uploads centos@$IP:/var/www/html/site/Uploads
이것은 잘 작동하지만 사용자이므로 소유권이 apache에서 centos로 변경됩니다. Apache 사용자에 대한 키를 설정할 수 있지만 사용자가 로그인할 수 없어 작동하지 않습니다.
rsync를 아파치로 실행하여 소유권을 유지하거나, centos 사용자로 실행하고 소유권을 아파치로 유지하려면 어떻게 해야 합니까(제 경우에는 cron이 작동하지 않습니다).
답변1
대상 디렉터리에 있는 파일의 소유권은 해당 파일을 생성/전송하는 데 사용된 대상 계정에 의해 전적으로 결정됩니다. (일반 계정은 파일 소유권을 변경할 수 없습니다.)
대상 파일을 소유하게 하려는 apache
경우
파일을 전송하려면 대상 계정에 사용자로 로그인하세요
apache
. 인증서를 사용하면ssh
비밀번호를 삽입할 필요가 없습니다. 서비스 실행을 제외한 모든 작업을ssh
거부하도록 연결을 설정할 수도 있습니다rsync
.대상 호스트에서 파일을 가져옵니다. cron에서 이 작업을 자주 실행하도록 설정할 수도 있고(
rsync
작업을 수행하지 않는 것이 상대적으로 저렴한 옵션일 수 있음) 파일 생성과 같은 트리거를 확인하고rsync
활성화된 경우에만 전체 프로세스를 실행하도록 할 수 있습니다.이 경우
cron
대상 호스트에서 실행하고 5분마다 로컬 파일을 확인하고 다음과 같은 코드 조각을 사용합니다.test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
inotifywait
파일을 복사한 후 파일 소유권을 수정하는 데 사용됩니다 . 이를 위해서는 프로세스가 루트로 실행되어야 하지만 대상 디렉터리centos
에 소유된 파일의 소유권 만 변경할 수 있도록 주의 깊게 격리할 수 있습니다apache
.파일을 복사하려면 루트로 실행하세요
rsync
. 이상적이지는 않지만 다른 모든 방법이 실패할 경우 필요할 수 있습니다.
답변2
그래서 제가 찾은 가장 좋은 방법은 사용자에게 해당 명령에 대한 sudo 액세스 권한만 부여하고 --rsync-path='sudo rsync'
. 예를 들어:
rsync -avz -e 'ssh -l rsync -i /home/rsync/.ssh/rsync -o StrictHostKeyChecking=no' /path/ --rsync-path='sudo rsync' [email protected]:/path/
답변3
numeric-ids
Rsync에는 여기에서 활용할 수 있는 옵션이 있습니다 .
그러나 두 가지 사항: Apache 사용자가 두 서버 모두에서 동일한 숫자 ID를 가지고 있는지 확인하고 rsync를 실행하는 사용자가 Apache가 소유한 파일을 대상에 쓰거나 업데이트할 수 있는지 확인하십시오.