私がルートしたら、単にダミーユーザー/グループを作成し、それに応じてファイル権限を設定し、そのユーザーとしてプロセスを実行できます。しかし、私はそうではありません。ルートなしでこれを達成する方法はありますか?
答え1
同様の質問、より注目すべき答え:
- https://stackoverflow.com/q/3859710/94687
- https://stackoverflow.com/q/4410447/94687
- https://stackoverflow.com/q/4249063/94687
- https://stackoverflow.com/q/1019707/94687
メモ:そこにある答えのいくつかは、ここでまだ言及されていない特定の解決策を指しています。
実際にはさまざまな実装を備えたかなり多くの刑務所ツールがありますが、その多くは設計上安全ではないか(ベースなど)、不完全です(例:fakeroot
ベース)。LD_PRELOAD
fakeroot-ng
ptrace
chroot
plash
fakechroot 警告ラベル)。
これは単なる例です。 2つの機能(「信頼できますか?」、「設定するにはルートが必要ですか?」)を並べて配置したかったです。オペレーティングシステムレベルの仮想化の実装。
一般に、ここへの答えは、説明されているすべての可能性とそれ以上のものを網羅しています。
仮想マシン/オペレーティングシステム
カーネル拡張 (例: SELinux)
- (ここのコメントに記載)
chroot
chroot
Chrootベースのヘルパー(ただし、rootが必要なのでsetUIDルートである必要があります。そうしないと、chroot
孤立した名前空間で動作する可能性があります。以下を参照)
[彼らについてもっと教えてください! ]
既知のchrootベースの分離ツール:
道
もう一つの信頼できる隔離ソリューション(その他seccomp
に基づいてptrace
) マンページに記載されているように転送し、完全なシステムコールをブロックします。fakeroot-ng
:
以前の実装とは異なり、fakeroot-ngは、追跡されたプロセスがfakeroot-ngの「サービス」を使用するかどうかを選択できないようにする技術を使用します。プログラムの静的コンパイル、カーネルへの直接呼び出し、および独自のアドレス空間操作は、すべてLD_PRELOADベースのプロセス制御をバイパスするために使用できる技術であり、fakeroot-ngには適用されません。理論的には、fakeroot-ngは追跡プロセスを完全に制御できるように構成できます。
理論的には可能ですが、まだ実装されていません。 Fakeroot-ngは追跡されたプロセスに対して特定の「うまく機能する」仮定を行います。これらの仮定を破るプロセスは完全に逃げることはありませんが、fakerootがそのプロセスに課すいくつかの「偽の」環境をバイパスする可能性があります。したがって、fakeroot-ngをセキュリティツールとして使用しないことを強く警告します。プロセスが意図的に(偶然ではなく)fakeroot-ng制御から外れる可能性があると主張するバグレポートは、「バグではない」で閉じられるか、低い優先順位で表示されます。
このポリシーは将来見直される可能性があります。しかし今は警告を受けました。
しかし、読んだように、fakeroot-ng
この機能自体はこの目的のために設計されていません。
seccomp
(しかし、なぜ彼らがChromiumのベースアプローチではなくptrace
ベースアプローチを使用することを選んだのか疑問に思う...)
上記以外のツールの場合ジョルディ私自身のためにHaskellで制御プログラムを書くのが好きだからです。
既知のptraceベースの分離ツール:
- ジョルディ
- 根
fakeroot-ng
- ...(次も見ることができます。Linuxでrootなしでユーザースペースchrootの効果を得る方法は?)
セキュリティコンピューティング
分離を達成する既知の方法の1つは、以下の通りである。Google Chromiumで使用されるseccompサンドボックス方式。しかし、このアプローチは、いくつかの(許可された)「傍受された」ファイルアクセスおよび他のシステムコールを処理するヘルパープログラムを作成すると仮定します。もちろん、システムコールを「傍受」ヘルパープログラムにリダイレクトする努力もあります。おそらく、これは制御されたプロセスのコードで傍受されるシステムコールを置き換えることを意味するかもしれません。したがって、興味があれば、私の答えだけでなく詳細を読むことをお勧めします。
追加の関連情報(Wikipediaを参照):
- http://en.wikipedia.org/wiki/Seccomp
- http://code.google.com/p/seccompsandbox/wiki/overview
- LWN記事:GoogleのChromium Sandbox、ジャックエッジ(Jack Edge)、2009年8月
- 補助看護師、seccompに基づくサンドボックスフレームワークです。
(Chromiumの外で一般的なソリューションを探している人なら、seccomp
この最後のものは興味深いようです。 "seccomp-nurse"の作者にも読めるブログ記事があります。サンドボックスソリューションとしてのSECCOMP?.)
このアプローチに関するガイダンスは、以下で提供されます。「seccomp-nurses」プロジェクト:
将来、Linuxに「柔軟な」seccompは可能ですか?
2009年にも登場Linuxカーネルパッチのヒントこれseccomp
により、モデルの柔軟性が向上し、「現在私たちが必要とする多くの曲芸を避けることができます」。 (「奴隷」とは、刑務所に閉じ込められたプロセスに代わって潜在的に無害なシステムコールを多く実行し、刑務所に閉じ込められたプロセス内で潜在的に無実のシステムコールを置き換える必要があるヘルパーの作成の複雑さを意味します。)LWN 記事この時点までに作成:
1つの提案は、seccompに新しい「モード」を追加することでした。 APIは、異なるアプリケーションが異なるセキュリティ要件を持つ可能性があるという考えで設計されています。これには、適用されるべき制限を指定する「モード」値が含まれています。オリジナルモードのみが実装されていますが、他のモードももちろん追加できます。起動したプロセスで許可されているシステムコールを指定できる新しいモードを作成すると、Chromeサンドボックスなどの状況でツールがより便利になります。
Adam Langley(また、Google出身)はこれを達成するためのパッチをリリースしました。新しい「モード2」実装では、アクセス可能なシステムコールを記述するビットマスクを許可します。これらのいずれかがprctl()の場合、サンドボックスコードは独自のシステムコールをさらに制限できます(ただし、拒否されたシステムコールへのアクセスは復元できません)。全体的に、これはサンドボックス開発者の生活をより簡単にするための合理的なソリューションのようです。
つまり、議論が別の可能性に移ったため、このコードは決してマージされない可能性があります。
この「柔軟なseccomp」は、Linuxが複雑なヘルパーを書くことなく、オペレーティングシステムに必要な機能を提供するのに近づくようにします。
(本質的にこの回答と内容が同じブログ投稿:http://geofft.mit.edu/blog/sipb/33.)
ネームスペース( unshare
)
名前空間(unshare
ベースソリューション) - ここでは言及されていません。共有マウントポイントのキャンセル(FUSE と組み合わせる?) 信頼できないプロセスへのファイルシステムへのアクセスを制限したい場合は、作業ソリューションの一部である可能性があります。
実装が完了すると、名前空間に関する追加情報が提供されます(この分離技術はnmeでも知られています)。「Linuxコンテナ」または「LXC」、そうではありませんか? ..):
「名前空間の全体的な目標の1つは、(他の目的の中でも)軽量仮想化ツールであるコンテナの実装をサポートすることです。」。
新しいユーザーネームスペースを作成することで、「プロセスはユーザーネームスペースの外側には権限のない一般ユーザーIDを持つことができ、ネームスペース内にはユーザーID 0を持つことができます。ユーザーの名前空間はありますが、名前空間の外部操作に対する権限はありません。
これを行う実際の作業コマンドについては、ここの回答を参照してください。
そして特別なユーザースペースプログラミング/コンパイル
しかし、もちろん、必要な「刑務所」の保証はユーザースペース(この機能には追加のオペレーティングシステムサポートは必要ありません。;おそらくこれがまさにこの機能が最初にOSデザインに含まれていない理由です。)多少複雑な問題があります。
そこに言及されているptrace
-またはseccomp
サンドボックスは、「ブラックボックス」、つまり任意のUnixプログラムで処理される他のプロセスを制御できるサンドボックスヘルパーを作成することによって達成される保証のいくつかのバリエーションと考えることができます。
別のアプローチは、無効にする必要がある効果を考慮するプログラミング技術を使用することです。 (その後、プログラムはユーザーが作成する必要があり、これ以上ブラックボックスではありません。)たとえば、次のようにします。純粋なプログラミング言語(これにより、副作用なしにプログラミングされます。)ハスケルプログラムのすべての効果を明示的に書くことで、プログラマが許されない効果がないことを簡単に確認できます。
Javaなど他の言語でプログラムする人々のためのサンドボックス機能もあるようです。
塩化ナトリウム- ここでは言及されていません——あなたはこのグループに属していませんか?
このトピックに関する情報を蓄積する一部のページも回答で指摘されています。
答え2
これはUnix権限モデルの基本的な制限です。ルートのみ委任できます。
仮想マシンを実行するためにルートになる必要はありませんが(すべての仮想マシンテクノロジはそうではありません)、これは非常に強力なソリューションです。
ユーザーモードLinux比較的軽量なLinux-on-Linux仮想化ソリューションです。設定は簡単ではありません。少なくとも起動に必要な最小エントリ(いくつかのファイル/etc
とその依存/sbin/init
関係、ログインプログラム、シェル、ユーティリティ)でルートパーティション(ディレクトリ)を入力する必要があります。
答え3
いくつかのファイルへのアクセスを傍受することは幸運かもしれませんが、それは非常にトリッキーかもしれLD_PRELOAD
ません。
答え4
完全なリストから次を追加します。
fakeroot(debian package maintener):目的は、パッケージを構築するために「使い慣れた」ツールを使用することです。これは完全な分離ではありませんが、さまざまなユーザーや偽のデバイス、その他の特別なダミーファイルでパッケージを構築するのに役立ちます。
fakechroot(fakerootを使用)このアプリには多くのバグがあります。たとえば、 "/etc/hosts"はglibcにハードコードされているため、このツールを使用して変更することはできません。
qemu:Linuxカーネルをコンパイルする必要がありますが、結果は非常に高速で、実際のroot権限を持つ「偽」(つまり仮想)マシンです。すべてのブートイメージをビルドしてインストールできます。