fakeroot cdebootstrap:共有を解除できません:操作は許可されていません。

fakeroot cdebootstrap:共有を解除できません:操作は許可されていません。

Debian で実行する場合:

$ fakeroot cdebootstrap stable /tmp/foo

cdebootstrapはパッケージをダウンロードしますが、パッケージを解放する必要があるときに次のエラーが発生します。

E: Failed to unshare: Operation not permitted

root以外のユーザーとしてcdebootstrapを実行するには?

unshareマニュアルのこのセクションは関連性があるようですが、どうなるかはよくわかりません。

EPERM (since Linux 3.9)
              CLONE_NEWUSER was specified in flags and the caller is in a
              chroot environment (i.e., the caller's root directory does not
              match the root directory of the mount namespace in which it
              resides).

答え1

質問

あなたの問題は権限の継承に関連しています。 cdbootstrap権限は継承され、fakeroot権限を介して昇格できますsudo。質問:

sudo fakeroot cdbootstrap /tmp/foo

上記のコマンドが成功すると、権限の/tmp問題があります。バラより/tmpにはどのような共通権限がありますか?誤ってすべてを再帰的に公開に設定しました。、基本権限は何ですか?一般に、/tmpアプリケーションに入れていないコンテンツを書くのは悪い考えであり、fakerootそれ自体が問題です。マニュアルページから:

限定

ライブラリバージョン

fakeroot内で実行されるすべてのコマンドは、fakeroot自体と同じバージョンのCライブラリにリンクする必要があります。

open()/create()

fakeroot 改行などはありませんopen()create()したがって、ユーザーがそうしたjoost 場合

  touch foo
  fakeroot
  ls -al foo

あるいはその逆に、

  fakeroot
  touch foo
  ls -al foo

fakeroot
最初のケースでは、所有者がfoo 実際にあるべきでありjoost、2番目のケースでは、所有者でなければならないかどうかを
知る方法はありませんroot。 Debian パッケージングの場合、
すべての「不明な」ファイルに対してデフォルトで uid=gid=0 を提供することは常に大丈夫です。この問題に対する実際の解決策は、sumを
ラップすることです。ただし、これはパッケージに示されているように他の問題を引き起こします。このパッケージにはより多くの機能が含まれており、それ以上を実行しようとしました。 libcの小さなアップグレード(関数を使用しないアップグレードでは(場合によっては使用するアップグレード)、説明できないsegfaultが発生する可能性があることがわかりました(たとえば、libc6が呼び出されます)。この場合、説明できないセグフォルトが発生します)。その後、libc6などを呼び出します。)これを修正するのはそれほど簡単ではありませんが、一度変更したら他のオペレーティングシステムに移植するのは苦労し、他の機能が使用され始めるのは時間の問題です。したがって、私は「衝突」の可能性を制限するためにラップされた関数の数をできるだけ少なく保つことにしました。open()create()
libtricks

fakeroot
stat()open()stat()open()stat()open()stat()

open()

fakeroot

間違い

梱包されていませんopen()。これはそれ自体悪いことではありませんが、プログラムが open("file", O_WRONLY, 000)"file"ファイルに書き込んで閉じてからファイルを読み取るために再度開こうとすると、ファイルモードは000であるため、開くことは失敗します。エラーは、ルートが同じ操作を実行すると、 open() ルートのファイル権限がまったく解決されないために成功することです。私はlibcの他の多くの関数(すでにすでにラップされている関数)で行われているようにopen()Wrapを選択しなかったので、ループ(またはさまざまなlibc関数の実装がわずかに変更されたときに将来のループが発生する可能性があります)を生成しました。open()


より良いソリューション

必要なものを達成するために特権の昇格を使用するのではなく、適切な使用を検討してくださいchrootUbuntu 用 DebootstrapChroot ドキュメントまたはDebBootStrap 公式 Debian ドキュメント

答え2

たぶん/ tmpが問題かもしれません。努力する

$fakeroot cdebootstrap 安定 $HOME/somedir

関連情報