SSH를 통해 파일을 Apache 권한과 동기화

SSH를 통해 파일을 Apache 권한과 동기화

자산 카탈로그를 동기화하기 위해 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경우

  1. 파일을 전송하려면 대상 계정에 사용자로 로그인하세요 apache. 인증서를 사용하면 ssh비밀번호를 삽입할 필요가 없습니다. 서비스 실행을 제외한 모든 작업을 ssh거부하도록 연결을 설정할 수도 있습니다 rsync.

  2. 대상 호스트에서 파일을 가져옵니다. cron에서 이 작업을 자주 실행하도록 설정할 수도 있고( rsync작업을 수행하지 않는 것이 상대적으로 저렴한 옵션일 수 있음) 파일 생성과 같은 트리거를 확인하고 rsync활성화된 경우에만 전체 프로세스를 실행하도록 할 수 있습니다.

    이 경우 cron대상 호스트에서 실행하고 5분마다 로컬 파일을 확인하고 다음과 같은 코드 조각을 사용합니다.

    test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
    
  3. inotifywait파일을 복사한 후 파일 소유권을 수정하는 데 사용됩니다 . 이를 위해서는 프로세스가 루트로 실행되어야 하지만 대상 디렉터리 centos에 소유된 파일의 소유권 만 변경할 수 있도록 주의 깊게 격리할 수 있습니다 apache.

  4. 파일을 복사하려면 루트로 실행하세요 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-idsRsync에는 여기에서 활용할 수 있는 옵션이 있습니다 .

그러나 두 가지 사항: Apache 사용자가 두 서버 모두에서 동일한 숫자 ID를 가지고 있는지 확인하고 rsync를 실행하는 사용자가 Apache가 소유한 파일을 대상에 쓰거나 업데이트할 수 있는지 확인하십시오.

관련 정보