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。理想的ではありませんが、他のすべての方法が失敗した場合に必要になる場合があります。

おすすめ記事