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()
より良いソリューション
必要なものを達成するために特権の昇格を使用するのではなく、適切な使用を検討してくださいchroot
。Ubuntu 用 DebootstrapChroot ドキュメントまたはDebBootStrap 公式 Debian ドキュメント。
答え2
たぶん/ tmpが問題かもしれません。努力する
$fakeroot cdebootstrap 安定 $HOME/somedir