web-dev-qa-db-ja.com

rsyncedファイルが適切なACLを取得していません

私はrsyncを使用します(rsync-3.0.6-5.el6_0.1.x86_64 Scientific Linuxの場合6)VFATディスクからNFSマウントされたext3ファイルシステムにファイルを転送します。 ext3システムにACLを設定していて、新しいファイルまたはdirを作成するとき(NFSマウント、コマンドラインまたはNautilusを介して)、すべてが期待どおりに機能します。ただし、rsync-ingまたはcp-ingの場合、ext3パーティションにコピーされたファイルのACLは作成されません。

背景は、VFATがカメラからのものであり、断続的にマウントされており、dirまたはファイルのACLを作成しないことです。 rsync(またはコピー)する方法はありますか?つまり、デフォルトのACLルールがACLをrsync-edまたはcp-edファイルおよびdirに適用できるようにしますか?

3
Eric.chowanski

友達の助けを少し借りて、歯を食いしばった後、私はこれを理解しました。もちろん、答えはmanページにありました。

この問題は、(aclのマニュアルページから)「ファイルパーミッションビットを変更すると、関連するACLエントリが変更される」という事実に起因します。その逆も同様です。適切なフラグがないと、rsyncはソース権限を使用するため、これによりターゲットのACLが変更されます。

Rsyncの解決策は、-chmodオプションを使用することです。 rsyncのマニュアルページ(--permsセクション内)から:

新しいファイルに宛先デフォルトのアクセス許可を与えるには(既存のファイルを変更せずに)、-permsオプションがオフになっていることを確認し、-chmod = ugo = rwXを使用します(これにより、マスクされていないすべてのビットが有効になります)。

ただし、使用したい権利は、意図するターゲットの権利によって異なります。例として、私の場合、ソースパーマは700で、ACLはありませんでした。宛先サブディレクトリには、次のようなデフォルトのACLがありました:d:u:user1:rwx,d:u:user2:rwx,u:user1:rwx,u:user2:rwx,d:m:rwx,m:rwx。つまり、2つの名前付きユーザー、明示的なマスク、および同一のデフォルトがあります。これは770に相当します。

Rsync(またはcp-ing)を使用する場合、700のソース権限はデフォルトのACLマスクをオーバーライドし、rwxではなく---に設定します。

このユースケースには「user」と「group」が必要ですが、「other」ソース権限は必要ないため、rsyncで次のフラグを使用しました:--chmod=ug=rwx。最初の等号の後の文字は、次の権限がu(ser)およびg(roup)に適用されることを示します。2番目の等号の後の文字は、それらのユーザーが受け取る権限を示します。 rsyncは、ターゲットの権限を770に設定します。

実際のコマンドは次のとおりです。rsync -av --chmod=ug=rwX /<source> /<destination>

注意すべき点がいくつかあります。まず、rsyncのアクセス許可の動作は、受信側のバージョンによって異なります。決定的な答えについては、manページを確認してください。次に、フラグの順序が重要です。実際には、-a、-Aなどを使用できますが、[〜#〜] must [〜#〜]が--chmodフラグの前に来る必要があります。 。

最後に、cpで使用できる同様のフラグがないため、rsyncは、ファイルを同期し、ターゲットのデフォルトACLを異なるソース権限を持つファイルに適用するための町で唯一のゲームになっています。

5
Eric.chowanski

どのくらい正確にrsyncを呼び出していますか?ソースはACLをサポートしていないので、ほぼ確実に[〜#〜] not [〜#〜] rsyncにコピー権限を設定するオプションを渡す必要があります。

したがって、-a-o-g、または-Aは使用しないでください。

1
Zoredache

Rsyncコマンドで-Aフラグを設定していますか?

0
AllInOne