fakerootコマンドが必要なのはなぜですか? 「sudoまたはsuコマンドを単純に使用することはできませんか?

マニュアルページには次のように記載されています:

fakeroot- ファイル操作のルート権限を偽造する環境でコマンドを実行します

About.comのコメント:

偽のルートを提供しますこのパッケージは、dpkg-buildpackage -rfakerootのようなものを有効にすることを目的としています。つまり、パッケージビルドのルートになる必要がなくなります。これは、LD_PRELOADからlibfakeroot.soは、getuidchown

mknodstat、…これにより、偽のルート環境が作成されます。 「これについては理解できません。fakerootは必要ありません!

私の質問は、どのsp社会的な目的は、単純なsuまたはsudoが解決しないことを解決しますか?たとえば、ubuntuにインストールされているすべてのパッケージを再パックするには、次のコマンドを実行します。

$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

次のように、fakerootの代わりにsudoまたはsuを使用して上記のコマンドを実行できますか。

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

編集:

実行中:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

このエラーが発生します:

制御ディレクトリには不正なアクセス許可700(> = 0755および< = 0775である必要があります)

理由は何ですか?

コメント

  • セキュリティ上の理由から、実行できる場合でも、通常のユーザーとして実行できるすべてのことをrootとして実行しないようにすることをお勧めします。 sudoまたはsuは、お使いのマシンであるためです。 fakerootには2つの使用法があります。1)プログラムをだまして、あなたが本当にrootユーザーであると信じ込ませます。これにより、ファイルモードと所有権の変更をエミュレートできます。これは、他の方法では実行できない’、主に正しい権限を持つtarファイルを作成するためです。と所有権。たとえば、ソフトウェアをパッケージ化するときに役立ちます。
  • About.comからの抜粋のメモは次のように要約していると思います。 ‘これを理解するために、fakerootは必要ありません! ‘が

    は便利ですが、文字通り’は必要ありません。しかし、実際にそれを必要とする人々は、ユースケースを完全に理解する必要があります。

回答

あなたがリモートサーバーで作業する開発者/パッケージメンテナなど。パッケージの内容を更新して再構築したり、kernel.orgからカーネルをダウンロードしてカスタマイズしたり、ビルドしたりする必要があります。これらのことを実行しようとすると、いくつかの手順で

権限(UIDおよびGID0)。ただし、リモートマシンで作業しているため、root権限を取得することはできません(他の多くのユーザーも同じ問題を抱えています)。これがまさにfakerootは、効果的なUIDGIDを必要とする環境に0のふりをします。

実際には、実際のroot特権を取得することはありません(suおよびsudoあなたが言及している)

コメント

  • したがって、’は使用できませんシステム設定を変更するには?? ‘実行するコマンドは、’がルートとして実行されていると見なし、必要な処理を実行します。 won ‘ t it?
  • @mrid “実際には、実際のルート権限を取得することはありません”。したがって、答えはありません

答え

fakerootと実際のsudo / suの違いを明確に確認するには、

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

fakerootシェル内にいる限り、rootであるかのように見えます-何もしようとしない限りそれは本当にroot権限を必要とします。そしてこれはまさに、パッケージングツールがどのマシンでも意味のあるパッケージを作成するために必要なものです。

実際、パッケージ化にfakerootを使用する場合、達成したいのは、fakerootで実行するツールを作成して、ファイルがrootによって所有されていることを確認することです。それ以上でもそれ以下でもありません。したがって、実際には、suまたはsudoは、適切なファイル所有権を取得するためには機能しません。

コメント

  • 偽造者は危険ではありませんか? suidビットとrxpermを使用してファイルを作成すると、ファイルはrootが所有して作成され、rootとして誰でも実行可能になります。または、suidビットの設定が機能しない可能性がありますか?
  • ダメです。私はこれを自分で試しました。 fakerootの主な理由は、実際にrootになることなく、所有権root:rootをビルドされたパッケージに取り込むことです。ただし、インストールされたパッケージには適切な権限があります。
  • @ ntzrmtthihu777 ‘のコメントを読むまでは、すべて非常に混乱していました。
  • 申し訳ありませんが、 ‘説明がわかりません。ルートでない場合に’文句を言わないように、ツールにパッチを適用してみませんか?関連する質問として:結局のところ、fakerootで作成したファイルは、実際には rootが所有しているわけではありません。 ‘これは、このような.debファイルをインストールすると、すべての/usrファイルは、fakeroot
  • @ JohannesSchaub-litbというユーザーが所有していますが、’が重要です。ファイルはrootによって所有されていませんが、fakerootシェル内では、のように見えます。このシェル内に.debパッケージが作成されると、ファイル所有者がファイルシステムから読み取られます(fakerootがインターセプトしてrootを返します)パッケージに保存されます。パッケージをインストールするとき、dpkgはファイルがrootによって所有されるべきであることをパッケージが示しているため、rootアクセスを必要とします。

回答

答えは(私には)理解するのが難しく、理解するのに少し考えが必要だったので(このコメントで理解できました)、私はうまくいけばより良い説明をするつもりです。

1.fakerootで何が起こるか

あなた自身のユーザーで起こること以上のものはありません。絶対にそれ以上のものはありません。fakeroot(呼び出されると、sudoのように新しいシェルが提供されます)、許可が必要なことを実行するふりをして終了しますが、まったく何も起こりません。

考えてみれば、それは時間の無駄です。なぜあなたは実際には起こらないことをするのですか?それは非常識です。何もしなかった可能性があり、痕跡がないため、違いはありませんでした。

ちょっと待ってください…

2。痕跡of fakeroot

fakerootのトレースが残っている可能性があります 。 MortenSickelの回答は非常に素晴らしく、賛成に値します:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

一見すると、次のようになります。 fakerootを使用したことは、時間の無駄でした。結局、fakerootを使用していなかった場合は、同じようになります。

ここでの微妙なことは次のとおりです。

$ cat root.tst Wow I have root access 

これは、ファイルのコンテンツがまだルートであることを覚えていることを意味します。 fakerootを使用しないと同じ結果が得られると言うかもしれません。そうです、この例は単純すぎます。

別の例を見てみましょう:

$ fakeroot # touch x # touch y # chown myuser:myuser x # ls -l > listing # exit $ ls -l total 4 -rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y $ cat listing total 0 -rw-rw-r-- 1 root root 0 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 root root 0 Jan 7 21:39 y 

何が起こったのか見てみましょう。 rootのふりをして、まったく効果がないので、xyを作成しました。 xmyuserに属し、yは。どちらも実際にはmyuserに属しています(最後に見ることができます)が、私はそのようにふりをしました

次に、リストを作成し、想像力をファイルに保存しました。後でファイルを振り返ると、ファイルの所有者を誰が想像したかがわかります。繰り返しになりますが、実際には私が想像した人々が所有しているのではなく、単に想像しただけです。

3。それで…なぜもう一度それが必要なのですか?

そのリストを作成するために、ルートであると偽る必要はなかったと言うかもしれません。単にリストを作成し、それを反映するように編集することもできます。私の想像力。そうです、そのためにfakerootは必要ありませんでした。実際、fakerootが実際には何もしないことを知っていると、以前に持っていなかった能力を獲得できなかった可能性があります。

しかし、であり、これがfakerootのすべてであり、リストの編集は簡単ではない可能性があります。システムにインストールできるパッケージの場合と同様に、tar ed、gzip ed、 ed、bzip2 ed、またはファイルをまとめてアクセス許可と所有者を記憶するその他の形式。圧縮ファイルを簡単に変更し、ファイルの所有権を編集できますか?あなたのことはわかりませんが、方法は考えられません。

すべてが圧縮されると、圧縮ファイルを変更し、所有権と権限をプログラムで編集するツールが構築されている可能性があります。 ?はい、できます。したがって、圧縮する前に所有権を偽造するか、後で所有権を変更することができます。 Debianの人々は、前者の方が簡単だと判断しました。

4。 sudoを使用しないのはなぜですか?

まず、ソフトウェアをビルドするためにroot権限は必要なく、ソフトウェアを圧縮するためにroot権限も必要ありません。したがって、それが必要ない場合は、そのアクセス許可を取得することを考えるためにも、実際にはWindowsユーザーである必要があります。ただし、皮肉は別として、rootパスワードすら持っていない可能性があります。

さらに、root権限を持っているとしましょう。また、ファイルに読み取りアクセス権を持っているふりをしたいとします。ルート。したがって、sudo、実際にファイルの所有者とアクセス許可をrootに変更すると、ルートシェルから抜け出し、すべてをパッケージ化しようとします。ルートアクセス権がないためにファイルを読み取ることができなくなったために失敗します。したがって、sudoを実行し、パッケージをrootとして圧縮してビルドする必要があります。事実上、次のことを行う必要があります。すべてをrootとして。

これは悪い TM です。

パッケージャーとして、root権限は必要ないので、取得しないでください。パッケージをインストールする場合、rootとしてファイル(A)をインストールする必要がある場合があります。ここで、root権限が必要です。 fakerootが行うのは、これを可能にすることだけです。これにより、パッケージャーはアーカイバのrootが所有するものとしてAを一覧表示できるため、ユーザーがパッケージを解凍すると、アーカイバはroot権限を要求し、はrootが所有します。

コメント

  • 優れた記述、これにより明確になります。
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. ‘後で変更しないのはなぜですか?’と考え続けていたので、これは役に立ちました。

li>

  • ありがとうございます。これにより、@ Morten ‘の回答
  • 回答を読んだ後の混乱が解消されます。 h2>

    AFAIK、fakerootは、ファイル操作のroot権限を持っているように見える環境でコマンドを実行します。これは、ユーザーがルート権限/所有権を持つファイルを含むアーカイブ(tar、ar、.debなど)を作成できるようにする場合に役立ちます。 fakerootがないと、正しい権限と所有権でアーカイブの構成ファイルを作成してからそれらをパックするためのroot権限が必要になるか、アーカイバを使用せずにアーカイブを直接構築する必要があります。

    fakerootは、ファイル操作ライブラリ関数(chmod()、stat()など)を、ユーザーが実際にrootである場合に、実際のライブラリ関数が持つであろう効果をシミュレートする関数に置き換えることで機能します。

    概要:

     fakeroot [-l|--lib library] [--faked faked-binary] [--] [command] 

    詳細はこちら: fakeroot

    コメント

    • @MaskTheSmokin:つまり、fakerootは、ファイル操作操作に対してのみスーパーユーザーパワーを提供します。
    • 実際には提供されません。スーパーユーザーパワー、それはそれを偽造するだけです-それで実行されているプログラムはそれがroot特権を持っていると考えますが、それでも実際にはユーザーの通常の特権を使用します’。
    • the program running in it thinks it has root privilegesとroot権限を持つプログラムの違いはどこにありますか? rm -rf /とプログラムを実行できる場合、それを実行すると、root権限があると見なされます…
    • @userunknown rm ‘は十分な権限があることを確認しますが、カーネル自体はそれを許可しません’ ; unlinkシステムコールは失敗します。 ‘権限を処理するのはアプリケーションだけではありません。そうでない場合は、’独自のアプリケーションを作成できます。’権限を確認し、それを使って好きなことをします
    • fakerootの必要性を解明する例は素晴らしいでしょう。 fakerootの使用法はわかりますが、’人々がルート権限を回避できない理由がわかりません’ ‘は偽造が簡単です。

    回答

    パッケージ構築スクリプトに使用しました。実行者がスクリプトにはルートレベルのアクセス権がありますが、スクリプトは、たとえば、ルートに属するファイルを含むtarファイルを生成する必要がありました。これを行う最も簡単な方法は、fakerootの下でパッケージ構築スクリプトを実行することで、アーカイブ担当者をだまして、ファイルはrootに属し、アーカイブ内にそのままパックされます。このように、パッケージが宛先マシンに(まったく別のマシンで)解凍されたとき、ファイルは奇妙なユーザーや存在しないユーザーに属していませんでした。

    考えてみると、これを見たのは、組み込みシステムのrootfs、tar.gzアーカイブ、rpmパッケージ、.debパッケージなどのアーカイブを構築するためだけでした。

    コメント

    • fakerootは、バグのあるパッケージングソフトウェアの回避ツールです。作成するためにrootである必要はありません。そのようなパッケージ、b ut ‘事前にファイルシステムに直接設定する以外の方法でファイルのアクセス許可を指定することはできないため、選択の余地はありません

    回答

    一般的な使用法の1つは、障害のあるバイナリが実際にアクセスしたいファイルを見つけることです。つまり、ハードコードされたパスと不適切な例外処理によって引き起こされるバグを見つけて修正または回避します。

    回答

    できます実際にroot権限を持たずにfakerootを使用します。 suおよび/またはsudoがある場合は、単純なrm -rf /ですが、せいぜいfakerootを使用すると、ホームディレクトリが削除されます。

    コメント

    • そうではありません’ t fakerootの必要性を説明します。ホームディレクトリは自分で削除できます。

    回答

    簡単な回答:

    suおよびsudoはrootとしてコマンドを実行します。 fakerootは、部分的なサンドボックス配置以外ではそうではありません。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です