web-dev-qa-db-ja.com

ユーザーIDが変更された場合、tarはアクセス許可を保持しますか?

Tarコマンドの「p」オプションを使用して一部のデータをバックアップする必要があります。問題は、このデータを復元する場所にすべて同じユーザーがいることですが、それらのユーザーは異なるIDを持っている可能性があります。これはtarに違いをもたらしますか、それともユーザー名でアクセス許可を正しく復元しますか?

20
Marius

tarは、関連付けられている文字列ではなく、UIDおよびGIDに基づいて権限を記録します。つまり、あるサーバーのUIDが3300で、それが「bob」にリンクされている場合、新しいサーバーでは、ファイルはUID 3300を持つユーザーが所有します。

UNIXの仮想のすべて(私はすべてを言いたいのですが、100%確実ではありません)はUID:GID値を使用します。これは、ファイルシステムレベルで実際に格納される値だからです。名前はpasswdファイルの単なるルックアップであり、基礎となるチェックは数値を使用して行われます。

9
EightBitTony

以前の回答を要約し、いくつかの重要な情報を追加します。

  • アーカイブを作成するとき、tarは常にファイルのユーザーIDとグループIDを保持しますnlessは、--owner=NAME--group=NAMEで別の方法で通知されます。ただし、各ファイルには常にユーザーとグループが関連付けられています。

  • GNU tarおよびおそらく他のバージョンのtaralso--numeric-ownerが使用されていない限り、ユーザーとグループを保存names bsdtarはデフォルトでユーザー名とグループ名も保存しますが、creatingの場合の--numeric-ownerオプションのサポートは、bsdtar 3.0まで表示されませんでした(bsdtarはextractingのオプションをサポートしていることに注意してください) =より長い間)。

  • 通常のユーザーとして抽出する場合、すべてのファイルは常にがユーザーによって所有されます。また、ファイルを抽出するとファイルシステム上に新しいファイルが作成され、通常のユーザーはファイルを作成して他のユーザーに所有権を与えることができないため、違いはありません。

  • rootとして抽出する場合、tarはデフォルトで抽出されたファイルの所有権を復元しますnless--no-same-ownerが使用され、root自身に所有権を付与します。

  • GNU tar、bsdtar、およびおそらく他のバージョンのtarでは、所有権の復元はユーザー(およびグループ)nameによって行われます(その情報がアーカイブ内and一致するユーザーが宛先システムに存在します。それ以外の場合は、IDによって復元されます。--numeric-ownerオプションが指定されている場合、ユーザー名とグループ名は無視されます。

  • オプション--no-same-permissions--touchを使用しない限り、権限とタイムスタンプもアーカイブに保存され、デフォルトで復元されます。ユーザーが抽出した場合、ユーザーのumaskは、--same-permissionsを使用しない限り、権限から減算になります。

  • --preserve-permissionsおよび--same-permissionsはエイリアスであり、-pと同じ機能を持っています

これが問題の明確化に役立つことを願っています! :)

54
MestreLion

GNU tarに--same-ownerオプションを使用します。次を参照してください http://www.gnu.org/software/tar/manual/html_section/Attributes.html

4
Colin 't Hart

2つのシステム間でファイルを転送しようとしている場合、rsyncはデフォルトで、両端ではなくユーザー名を見て、uidではなくユーザー名で権限を設定します。ユーザーがいずれかのシステムに存在しない場合にのみ、特に指示がない限り、それはuidでコピーされます。

4
Grant