rsync -p <args>
ファイルのコピーに使用すると、「ディスククォータ超過(122)」エラーが発生します。
rsync -rlptD --chown username:org1 -- local/ /project/org1/
ファイルとディレクトリでソースの読み書きビットを保持したいのですが、ターゲットがg+s
ディレクトリにグループsetuidを持つように強制したいと思います。
ディレクトリが必要なのは、g+s
新しいファイルがプロジェクトのグループ所有権を継承するためです。私の環境では、/project/foo/
プロジェクトフォルダ内のファイル(たとえば)が私の個人グループ(グループ名==ユーザー名)の所有である場合、クォータエラーが発生します。
グループ全体の使用を--chown username:org1
強制するためにrsyncについての主張を提示しましたが、それだけでは不十分です。org1
rsyncアプリに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を設定するように強制します。