rsyncを使用してファイルモード(setuidビットを除く)を維持するには?

rsyncを使用してファイルモード(setuidビットを除く)を維持するには?

rsync -p <args>ファイルのコピーに使用すると、「ディスククォータ超過(122)」エラーが発生します。

rsync -rlptD --chown username:org1 -- local/ /project/org1/

ファイルとディレクトリでソースの読み書きビットを保持したいのですが、ターゲットがg+sディレクトリにグループsetuidを持つように強制したいと思います。

ディレクトリが必要なのは、g+s新しいファイルがプロジェクトのグループ所有権を継承するためです。私の環境では、/project/foo/プロジェクトフォルダ内のファイル(たとえば)が私の個人グループ(グループ名==ユーザー名)の所有である場合、クォータエラーが発生します。

グループ全体の使用を--chown username:org1強制するためにrsyncについての主張を提示しましたが、それだけでは不十分です。org1rsyncアプリにuser:group所有権が必要な競争条件があるようです。後ろに一時ファイルの名前は最終位置に変更されます。

rsyncフラグを削除すると-pエラーなしで送信できますが、ソースの許可ビットが失われます。それ以外の場合、-pターゲットフォルダからrsyncによって生成されたすべての一時ファイルはルートフォルダからプロジェクトグループを正しく継承し、サブフォルダはsetuidグループを継承します。

rsyncに予約された権限マスクを提供する方法はありますか?ソースにはビットマスク777が必要ですが、リモートg+sディレクトリには(無条件)設定されます。

ベストアンサー1

--chmod RULE[,RULE]*このオプションが役に立つと思います。

~からmanrsync(1):

--chmod

このオプションは、rsyncに転送中のファイルの権限に1つ以上のカンマ区切りの「chmod」パターンを適用するように指示します。結果の値は、送信者がファイルに提供した権限で処理されます。つまり、--permsが有効になっていない場合、このオプションは既存のファイルには影響しないように見えます。

--chmod Dg+sリモートディレクトリからディレクトリにsetuidを設定するように強制します。

おすすめ記事