web-dev-qa-db-ja.com

シードボックスからのrsync後にファイルに新しい権限を強制する

トレントに使用するシードボックスアカウントを持っています。 rsyncを使用してすべてのファイルをシードボックスから14.04.1 ubuntuサーバーにダウンロードするcronジョブを設定しました。ダウンロードフォルダーはsamba共有です。以前はウィンドウを使用してコンテンツをフォルダーに整理してから、サーバーのより永続的な場所に移動しました。 14.04にアップグレードする前に、12.04を使用しましたが、すべて問題なく動作しました。

問題は、シードボックスから取得したファイルが「544」というユーザー(これはシードボックスによって生成されたユーザー名であり、8進数ではない)が所有していて、サーバー上のユーザーが削除できないことです。ダウンロードフォルダーのアクセス許可を変更した後、それらを削除できます。また、私はすべてのユーザーに、共有時にsambaフォルダーの読み取り/書き込み権限を与えました。

だから私の質問はこれです:いくつかのエレガントなコマンドを実行して、ダウンロード時にファイルのユーザー/権限をrsyncに変更させることは可能ですか?または、すべての新しいファイルがコピー/移動されたときに自動的にユーザーを変更するようにフォルダー機能を作成することは可能ですか? Sudo cronでchmodコマンドを時々実行してファイルの所有者を変更することはできると思いますが、ダウンロードするデータの量がかなり大きくなることがあるので、すべてのファイルがダウンロードされたことを確認するために、rsync-jobとの関連でいつトリガーするかを確認します。

7
GeGiggedy

rsynconlyは、-oで要求した場合に所有者を保持します。それ以外の場合、ファイルを実行しているユーザーがファイルを所有します。 rsyncコマンド。他のファイルが作成されるときと同じです。 -aには-oが含まれているため、多くの一般的なrsyncコマンドラインに含まれています。 man rsync 明示的にこれに関する一節を含みます:

For example: if you want to use -a (--archive) but don’t want -o
(--owner),  instead  of  converting  -a  into -rlptgD, you could
specify -a --no-o (or -a --no-owner).

したがって、rsync -a source destの代わりにrsync -a --no-o source destを使用して、コマンドを実行しているユーザーがファイルを所有するようにすることができます。

一方、ファイルの所有者を変更できるのは通常、rootである場合に限られるため、あまり問題にはなりません。何らかの理由でこのジョブをrootとして実行する必要があり、rootではなく通常のユーザーがファイルを所有するようにしたい場合は、--chownオプションを使用できます。

rsync -a --chown=youruser:yourgroup ...

一部のユーザーを維持したい場合は、より複雑なマッピング用の--usermapオプションもあります。 from:toペアのコンマ区切りのリストを取ります。

最後のオプションとして、あなたは明らかにcronジョブからrsyncを実行しているので、所有者/権限変更操作を&& chown ...でcronジョブに追加することができます。

15
Michael Homer

私はいくつかの方法をテストしましたが、私の場合、たとえばこのスクリプト

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usb_ext4

許可は、ファイルが書き込まれるパーティション/ターゲットの許可よりも大きくすることはできません。 (デバイスのマウント後にこれらの権限を確認してください)

0
InLaw