私は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に適用できるようにしますか?
友達の助けを少し借りて、歯を食いしばった後、私はこれを理解しました。もちろん、答えは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を異なるソース権限を持つファイルに適用するための町で唯一のゲームになっています。
どのくらい正確にrsyncを呼び出していますか?ソースはACLをサポートしていないので、ほぼ確実に[〜#〜] not [〜#〜] rsyncにコピー権限を設定するオプションを渡す必要があります。
したがって、-a
、-o
、-g
、または-A
は使用しないでください。
Rsyncコマンドで-Aフラグを設定していますか?