RPM または DEB パッケージ内でファイルの所有権が重要なのはなぜですか?

RPM または DEB パッケージ内でファイルの所有権が重要なのはなぜですか?

コンテクスト:

.debパッケージを変換しようとしてい.rpmますエイリアン、私はこのコマンドを使用します:

$ alien -r foo.deb

しかし、次のように不満を述べています。

> Warning: alien is not running as root!
> Warning: Ownerships of files in the generated packages will probably be wrong.

alien必要なのは、出力用にが所有するファイルrootを作成する権限があることを保証することだけだと思いますが、よくわかりません。foo.debrootfoo.rpm

質問:

  1. パッケージには常にroot-owned ファイルが必要ですか?
  2. rootそもそもなぜ -owned ファイルが必要なのでしょうか?
  3. 私が間違っているなら、なぜalien必要なのでしょうかroot?

答え1

fakeroot を使用します。alien は一部のビットを操作するために root を必要としません。fakeroot のマニュアル ページの 1 行の説明がそれを適切に要約しています。

ファイル操作のためにルート権限を偽装した環境でコマンドを実行する

つまり、fakeroot は、問題のコマンドが root として実行されていると確信させ、ファイルのアクセス許可が root として適切に設定されるプログラムです。詳細については、を参照してくださいman fakeroot

残念ながら、そこに表示されたエラー メッセージは誤解を招くものです。

簡単に言えば、

fakeroot alien ...

ここに、alien の作者である Joey Hess が fakeroot を使用する必要性について説明しているバグ レポートがあります。おそらく最適なリンクではありません。もっと良いものを見つけたら、投稿します。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=16289

答え2

ファイルの所有権を変更するには「root」権限が必要であり、ファイルが必ずしも「root」によって所有されている必要があるからではありません (多くのファイルはそうなっていますが)。

ホームディレクトリにファイルを作成し、その所有者を変更してみます:-

touch test.txt
ls -l test.txt
-rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt
chown nobody. test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted

ファイルの所有者でありrw権限も持っていますが、所有者を変更することはできません。

sudo chown nobody. test.txt
ls -l test.txt
-rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt

しかし、root として実行すると動作しますsudo

警告にあるように、所有権は間違っています。そこから、alien一部のファイルの所有権が変更されると推測できます。

システム ファイルは通常、制限された権限を持つ「root」によって所有されるため、あなたや私のような単なるユーザーが変更したり削除したりすることはできません。

システムには他のユーザーやグループもありますが、「root」とは異なり、ディストリビューション間で同じではありません。たとえば、Fedora (および RedHat と CentOS) では、ApacheWeb サーバーは として実行されapache、データ ファイルはそのユーザーが所有します。一方、 Debian/Ubuntu システムではApacheとして実行されwww-data、その結果、データ ファイルはそのユーザーが所有することになります。つまり、alien変換時にファイルの所有者を変更する必要があり、これを行うには、上記の例でわかるように、「root」として実行する必要があります。

答え3

Rpmおよびdebパッケージにはインストールするファイルのアーカイブが含まれています(cpiorpmの場合のアーカイブ、タールこれらのアーカイブには、各ファイルの名前、変更日、所有ユーザーとグループ、権限などのメタデータが含まれています。パッケージがインストールされると、各ファイルの所有権はアーカイブに記述されているものになります (インストール後のスクリプトによって変更されない限り)。

パッケージによってインストールされるファイルのほとんどは、どのユーザーも変更を許可されていないため、root が所有します。

Alien は、アーカイブを解凍して再パックすることでパッケージを変換します (インストール前/インストール後のスクリプトの変換など、他の処理も行います)。たとえば、rpm を deb に変換するには、alien を呼び出してcpioアーカイブを一時的な場所に抽出し、tar新しいアーカイブを構築します。解凍がルート権限で行われない場合、すべての一時ファイルは解凍を行っているユーザーの所有物となるため、ファイルが新しいアーカイブにパックされると、そのユーザーの所有物になります。

Alien はシステム内の何も変更する必要がないため、実際には root として実行する必要はありません。フェイクルートalien (またはその他のコマンド) を、そのコマンドがファイルシステム操作に関する偽の情報を受け取る環境で実行し、通常はルートを必要とする操作 (ファイルの所有権の変更など) が成功したかのように見せかけます。このようにして、解凍はルートとして実行され、正しいファイルの所有権が設定され ( およびalienそのサブプロセスに関する限り)、再パックによって目的のアーカイブが作成されます。

関連情報