ルートだったら、ダミーのユーザー/グループを作成し、それに応じてファイルのアクセス許可を設定し、そのユーザーとしてプロセスを実行できます。しかし、私はそうではないので、ルートにならずにこれを達成する方法はありますか?
chroot
自然にそこに収まるでしょうが、それでもあなたはルートではありません。
ルートだったら、ダミーのユーザー/グループを作成し、それに応じてファイルのアクセス許可を設定し、そのユーザーとしてプロセスを実行できます。しかし、私はそうではないので、ルートにならずにこれを達成する方法はありますか?
chroot
自然にそこに収まるでしょうが、それでもあなたはルートではありません。
回答:
注目に値するより多くの回答を持つより類似したQ:
注:回答のいくつかは、ここでまだ言及されていない特定の解決策を示しています。
実際には、異なる実装にかなりの数の投獄のツールがありますが、それらの多くは、いずれかの設計によって確保されていない(ようにfakeroot
、LD_PRELOAD
ベース)、または完了していない(ようにfakeroot-ng
、ptrace
ベース)、または(ルートを必要とするchroot
、またはplash
で述べたfakechroot警告ラベル)。
これらは単なる例です。オペレーティングシステムレベルの仮想化の実装で、これら2つの機能(「信頼できる」、「設定するのにルートが必要ですか?」)を示して、それらをすべて並べて表示することを考えました。
一般に、そこの答えは、記述された可能性の範囲全体をカバーしています。
Chrootベースのヘルパー(ただし、chroot
rootが必要なため、setUID rootである必要があります。またはchroot
、分離されたネームスペースで動作する可能性があります。以下を参照してください):
[それらについてもう少し説明します!]
別の信頼できる分離ソリューション(ベースのソリューションに加えてseccomp
)はptrace
、次のマンページで説明されているように、完全なsyscall-interception through ですfakeroot-ng
。
以前の実装とは異なり、fakeroot-ngは、fakeroot-ngの「サービス」を使用するかどうかに関してトレースされたプロセスに選択肢を残さないテクノロジーを使用します。プログラムを静的にコンパイルし、カーネルを直接呼び出し、独自のアドレス空間を操作することはすべて、LD_PRELOADベースのプロセス制御をバイパスするために簡単に使用できる手法であり、fakeroot-ngには適用されません。理論的には、追跡されたプロセスを完全に制御できるようにfakeroot-ngを成形することができます。
理論的には可能ですが、まだ行われていません。Fakeroot-ngは、トレース対象のプロセスに関する特定の「適切に動作する」前提を想定しています。これらの前提を破るプロセスは、完全にエスケープしない場合でも、fakeroot-によって課される「偽」環境の少なくともng。そのため、fakeroot-ngをセキュリティツールとして使用することは強く警告されます。プロセスが(誤ってではなく)意図的にfakeroot-ngの制御を逃れることができると主張するバグレポートは、「バグではない」として閉じられるか、または優先度が低いとしてマークされます。
このポリシーは将来再考される可能性があります。ただし、当面は警告されています。
それでも、それを読むことができるように、fakeroot-ng
それ自体はこの目的のために設計されていません。
(ところで、なぜ彼らはseccomp
-basedでなくChromium の-basedアプローチを使うことを選んだのだろうptrace
...)
上記に挙げられていないツールの中で、私はGeordiを自分で書きました。これは、制御プログラムがHaskellで書かれていることが好きだったからです。
fakeroot-ng
分離を実現する1つの既知の方法は、Google Chromiumで使用されているseccompサンドボックスアプローチです。しかし、このアプローチでは、「インターセプトされた」ファイルアクセスおよび他のシステムコールの一部(許可されたもの)を処理するヘルパーを記述することを想定しています。また、もちろん、syscallsを「インターセプト」してヘルパーにリダイレクトするように努力します(おそらく、制御されたプロセスのコードでインターセプトされたsyscallsを置き換えるようなことさえ意味するでしょう;それで、それは聞こえません非常にシンプルにするために、あなたが興味を持っているなら、あなたは私の答えよりも詳細を読む方が良いでしょう。
関連情報(ウィキペディアから):
(最後の項目はseccomp
、Chromium以外の一般的なソリューションを探している場合に興味深いようです。「seccomp-nurse」の著者から読む価値のあるブログ投稿もあります:サンドボックスソリューションとしてのSECCOMP?)
「seccomp-nurse」プロジェクトのこのアプローチの図:
2009年には、Linuxカーネルにパッチを適用してseccomp
モードの柔軟性を高めるための提案も表示されていました。つまり、「現在必要な多くのアクロバットを回避できるようにする」ためです。(「アクロバット」は投獄され、プロセスのと投獄過程で、おそらく無実のシステムコールを置き換えるの代わりに、多くの可能性が無実のシステムコールを実行するために持っているヘルパーを書くの合併症を参照)アンLWNの記事はここまで書きました:
出てきた提案の1つは、seccompに新しい「モード」を追加することでした。APIは、アプリケーションごとにセキュリティ要件が異なる可能性があるという考えで設計されました。適切な制限を指定する「モード」値が含まれます。元のモードのみが実装されていますが、他のモードを確実に追加できます。開始プロセスで許可するシステムコールを指定できる新しいモードを作成すると、Chromeサンドボックスなどの状況で機能がより便利になります。
GoogleのAdam Langleyが、まさにそれを行うパッチを公開しました。新しい「モード2」実装は、アクセス可能なシステムコールを記述するビットマスクを受け入れます。それらの1つがprctl()である場合、サンドボックスコードはそれ自体のシステムコールをさらに制限できます(ただし、拒否されたシステムコールへのアクセスを復元することはできません)。すべては、サンドボックス開発者の作業を楽にする合理的なソリューションのように見えます。
とはいえ、議論が他の可能性に移ったため、このコードは決してマージされないかもしれません。
この「柔軟なseccomp」は、複雑なヘルパーを作成する必要なく、Linuxの可能性をOSに必要な機能を提供することに近づけます。
(基本的にこの回答と同じ内容のブログ投稿:http : //geofft.mit.edu/blog/sipb/33。)
unshare
)名前空間を介した分離(- unshare
ベースのソリューション)-ここでは言及しません-たとえば、マウントポイントの共有解除(FUSEと組み合わせますか?)
実装が完了すると、名前空間の詳細がわかります(この分離手法はnme "Linux Containers"または "LXC"でも知られていますよね?..):
「名前空間の全体的な目標の一つは、コンテナの実装、軽量仮想化(だけでなく、他の目的)のためのツールをサポートすることです」。
新しいユーザー名前空間を作成して、「プロセスがユーザー名前空間の外部で通常の非特権ユーザーIDを持ち、同時に名前空間内でユーザーIDが0になるようにすることも可能です。これは、プロセスが完全なルート特権を持つことを意味しますユーザー名前空間内の操作には使用できますが、名前空間外の操作には権限がありません」。
これを行う実際の作業コマンドについては、以下の回答を参照してください。
しかし、もちろん、望ましい「jail」保証は、ユーザー空間でのプログラミングによって実装可能です(OSからこの機能を追加サポートすることなく、多分、この機能がOSの設計の最初の場所に含まれていないのかもしれません) ); 多かれ少なかれ合併症を伴う。
前述のptrace
-または-seccomp
ベースのサンドボックス化は、他のプロセスを制御するサンドボックスヘルパーを記述することにより、「ブラックボックス」、任意のUnixプログラムとして扱われることにより、保証を実装するいくつかのバリエーションと見ることができます。
別のアプローチとして、禁止する必要のある効果を考慮できるプログラミング手法を使用することもできます。(これは、その後、プログラムの書き込み、誰でなければならない。彼らはもうブラックボックスではありません。)1に言及するには、使用して純粋なプログラミング言語のような(副作用なしにプログラムにあなたを強制する)Haskellのは、単純に、すべての影響を行います明示的なプログラムであるため、プログラマは、許可されていない効果がないことを簡単に確認できます。
おそらく、Javaなどの他の言語でのプログラミングにはサンドボックス機能が利用できると思います。
ここで言及されていない NaClは、このグループに属しますか?
このトピックに関する情報を蓄積しているページのいくつかは、そこの回答でも指摘されています。
chroot
、それはおそらく必要です本当のroot権限...
これは、unix許可モデルの基本的な制限です。rootのみが委任できます。
仮想マシンを実行するためにrootになる必要はありません(すべてのVMテクノロジーに当てはまるわけではありません)が、これは重いソリューションです。
ユーザーモードLinuxは、比較的軽量のLinux-on-Linux仮想化ソリューションです。設定はそれほど簡単ではありません。ルートパーティション(ディレクトリ内)に、少なくともブートに必要な最小限のもの(ディレクトリ内のいくつかのファイル/etc
、/sbin/init
およびその依存関係、ログインプログラム、シェル、ユーティリティ)を設定する必要があります。
LD_PRELOAD
特定のファイルへのアクセスをインターセプトすることである程度の運が得られると思いますが、これは本当に難しいかもしれません。
LD_PRELOAD
信頼できません(回避可能)が、傍受はptrace
可能です。
LD_PRELOAD
ベースのソリューションがセキュリティ対策として信頼できないことを示しています。
完全なリストから追加するだけです:
fakeroot(debian package maintenerから):「フレンドリーな」ツールでパッケージを構築することを目指しています。これは完全な分離ではありませんが、異なるユーザー、偽のデバイス、およびその他の特別な擬似ファイルでパッケージを構築するのに役立ちます。
fakechroot(fakerootを使用)。このプログラムには多くのバグがあります。たとえば、「/ etc / hosts」はglibcでハードコーディングされています。このツールでは変更できません。
qemu:Linuxカーネルをコンパイルする必要がありますが、結果は非常に高速であり、これは実際のルート特権を持つ「偽の」(つまり仮想)マシンです。任意のブートイメージをビルドおよびマウントできます。
Firejailは、多くのオプションと非常に柔軟なルートアクセスの有無にかかわらず、あらゆるプロセスを投獄するための素晴らしいツールです。