web-dev-qa-db-ja.com

tarfileの内容に対するファイル権限の設定

配布前に作成時(またはその直後)にtarfileの内容をchmod 777する方法はありますか?タール化されているディレクトリの書き込み権限は、タール化の時点では不明です(ただし、通常は555)。 tarを展開しているユーザーが続行する前に、chmod -R 777 <untarred dir>を覚えておく必要がなくても、展開されたdirを誰でも書き込み可能にしたいと思います。

不器用な方法は、ディレクトリのコピーを作成してからchmod -R 777 <copydir>を作成することですが、もっと良い解決策があるかどうか疑問に思いました。

Solaris10マシンを使用しています。

背景:

ルートディレクトリは、特定のファイル権限を持つClearCasevobに再帰的にあります。 tarfileが作成され、組織内の複数の「顧客」に配布されます。ほとんどの場合、読み取り/実行権限のみが必要です(特に、書き込み可能にしたくない)が、特に1つのグループは、これらのファイルを編集したり、「新しい」コピーに復元したりする可能性があるため、コピーを再帰的に書き込み可能にする必要があります(つまり、 、私が彼らに与えた元の状態で)。

このグループは、技術的にいくらか挑戦されています。 tarfileの「ハウツー」についての説明はありますが、tarファイルを解除すると再帰的に書き込み可能になるようにファイルを設定することを常に忘れている(または間違えている)ようです。これにより、さまざまな問題を診断するための電話がかかってきます。根本的な原因は、展開されたディレクトリのchmodを実行し忘れた(または誤って実行した)ことです。

そして、あなたが尋ねる前に、はい、私は彼らにuntar/chmod(彼らのためだけに固有)へのスクリプトを書きました、しかし...ああ、気にしないでください。

そこで、再帰的に書き込み可能な別のバージョンのtarを作成して、それらに配布することにしました。最初に言ったように、いつでもdirのコピーを作成し、そのコピーを再帰的に書き込み可能にしてから、コピーdirをtarで処理できますが、dirはかなり大きく、ディスク領域がほぼいっぱいになることがあります(大幅に異なる場合があります)。 dirのコピーを作成することは、100%の場合実行可能ではありません。

11
splungebob

GNU tarの場合、アーカイブを作成するときに--modeオプションを使用します。例:

tar cf archive.tar --mode='a+rwX' *

ただし、アーカイブが抽出されると、デフォルトでumaskが適用されることに注意してください。したがって、ユーザーのumaskが000でない限り、アクセス許可はその時点で更新されます。ただし、-p--preserve)オプションを使用すると、umaskを無視できます。例:

tar xfp archive.tar
13
Todd Owen

Tarコマンドの前にファイルのアクセス許可を簡単に変更できますが、UNIXシステムでは/ tmp以外には777を使用しないことをお勧めします。ディレクトリには、755または最悪の場合775を使用する方が生産的です。そうすれば、世界にディレクトリへの書き込みをさせないようにすることができます。これは一般的に推奨されます。

ほとんどのUNIXユーザーは、実行可能であってはならないファイル(構成ファイルなど)に実行ビットを設定してこれを回避するため、パーミッションを再帰的に設定することを好みません。これを回避するために、シンボリックモードと呼ばれるchmodを使用する新しい方法を発明しました。 chmodのmanページを読むと詳細がわかりますが、これを試すことができます。

cd $targetdir; chmod -R u+rwX,a+rX .; tar zcvf $destTarFile .

$ targetdirはtarするディレクトリで、$ destTarFileは作成するtarファイルの名前です。

そのtarファイルを解凍すると、アクセス許可が保持されようとします。もちろん、特定のルールがそのプロセスを管理します。所有者のuidとgidは、rootが風袋引きを行っている場合にのみ保持されますが、それ以外の場合は、現在のプロセスの有効なuidとgidに設定されます。

0
Charles Bedford