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をApacheとして実行して所有権を維持するか、centosユーザーとして実行し、所有権をApacheとして維持するにはどうすればよいですか(私の場合、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ファイルをコピーした後、ファイルの所有権を変更するために使用されます。これを行うには、プロセスをrootとして実行する必要がありますが、ターゲットディレクトリcentosに所有されているファイルの所有権のみを変更できるように慎重に分離できますapache

  4. ファイルをコピーするには、rootとして実行してください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にはここで利用できるオプションがあります。

ただし、2つの点:Apacheユーザーが両方のサーバーで同じ数値IDを持っていることを確認し、rsyncを実行しているユーザーがApacheが所有するファイルをターゲットに書き込んだり更新したりできることを確認してください。

関連情報