私は資産カタログを同期させるために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
場合
ファイルを転送するには、ターゲットアカウントにユーザーとしてログインします
apache
。証明書を使用すると、ssh
パスワードを挿入する必要はありません。サービスの実行を除くすべての操作を拒否するようにssh
接続を設定することもできますrsync
。ターゲットホストからファイルをインポートします。 cronでこのタスクを頻繁に実行するように設定することもできます(
rsync
タスクを実行しない方が比較的安価なオプションかもしれません)、ファイル生成などのトリガーを確認し、有効になっているrsync
場合にのみプロセス全体を実行させることができます。この場合、
cron
ターゲットホストで実行し、5分ごとにローカルファイルを確認し、次のコードスニペットを使用します。test -f "$HOME"/.rsync_trigger && rsync ... && rm -f "$HOME"/.rsync_trigger
inotifywait
ファイルをコピーした後、ファイルの所有権を変更するために使用されます。これを行うには、プロセスをrootとして実行する必要がありますが、ターゲットディレクトリcentos
に所有されているファイルの所有権のみを変更できるように慎重に分離できますapache
。ファイルをコピーするには、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-ids
Rsyncにはここで利用できるオプションがあります。
ただし、2つの点:Apacheユーザーが両方のサーバーで同じ数値IDを持っていることを確認し、rsyncを実行しているユーザーがApacheが所有するファイルをターゲットに書き込んだり更新したりできることを確認してください。