質問
自分自身を複製することも、複製しない場合もあるプロセスを実行するDockerコンテナを起動したいと思います。
コンテナにスーパーユーザーとしてログインしたユーザーがないように、一般+ clone_newuts権限を持つユーザーを設定できますか?
もともとこの質問にタグがCLONE_NEWUTS permission only
正しくありませんでした。 @sourcejediさんが以下に誠実に答えてくれたので、理解度がたくさん良くなりました。
編集-1
suフラグが保存されている場所が見つかりました。/usr/include/linux/sched.h
サルがコンテナの作成時に特定のユーザー権限にパッチを適用するのと同じ答えであることを願っています。私は今その道をたどり、それが私をどこに連れて行くのかを見るでしょう。
編集2
ユーザー/ファイル機能を設定できる場所が見つかりました。読まなければならない内容が多いですが、ファイルに特定の権限(機能)を付与することが可能だと思います(この場合、ファイルは実行可能です)。関数のマニュアルページから:
Starting with kernel 2.2, Linux divides the privileges traditionally associated with superuser into distinct units, known as capabilities, which can be independently enabled and disabled. Capabilities are a per-thread attribute.
したがって、ファイルまたはユーザーに特定の関数(該当するフラグは上記のヘッダーにあります)を適用することが可能でなければなりません。まだどちらがわからないが、それを見つけることは非常に興味深く深いものです。
編集-3
@sourcejediが指摘したように、必要なものを誤解しました。必要な情報は、man limits.conf
指定されたユーザーレベルでプロセスを実行できる場所(この場合)にありますroot
。
編集4
残念ながら、EDIT-3で選択したパスも正しくありません。これにより、指定したユーザーが実行できます。みんなuesr レベルのプロセスを指定します。 @sourcejediはまだ正しいですが、本当に必要なものが何であるかを尋ねる新しい質問をします。関連:非rootユーザーとして分岐および複製できる単一のプロセスを実行します。
答え1
CLONE_NEWUTS
このフラグを使用して特にclone()呼び出しを許可する機能はありません。
CLONE_NEWUTS
新しい「UTS名前空間」を作成して入力するために使用されます。すべての名前空間タイプはCAP_SYS_ADMIN
作成が必要ですが、1つの例外は、上流のLinuxカーネルを使用すると、権限のないユーザーが新しいユーザー名前空間を作成して入力できることです。
ユーザーの名前空間を作成するときは、自分にroot / full権限を許可できます。~へこの名前空間にはが含まれていますCAP_SYS_ADMIN
。システムがこの機能をサポートしている場合を使用して表示できますunshare -r
。新しいユーザーの名前空間でルートシェルを開きます。
権限のないユーザーが名前空間を使用する予想される方法は、新しいユーザーの名前空間内です。ただし、一部のLinuxディストリビューションでは、この機能を許可しないようにカーネルを設定します。
CAP_SYS_ADMIN
特定の機能がなくなったアイテムの一般的な用語として使用されます。とても強力です。他のプログラムに代わってアドインを取得するために使用できると仮定する必要があります。 [1]
Dockerデーモンの基本構成新しいユーザーの名前空間にコンテナを配置しないでください。。したがって、CAP_SYS_ADMIN
Dockerコンテナを明示的に付与すると、完全な権限でコンテナをエスケープできると想定する必要があります。 [1]
許可されていないユーザーが任意の種類の名前空間を直接作成でき、名前空間を使用してsetuidプログラムが実行しない権限のある操作を実行するように混同できる場合、問題が発生する可能性があります。相互参照:"マウントされた名前空間を共有解除するためにCAP_SYS_ADMINが必要なのはなぜですか?」
別のオプションは、特定のタスクのみを実行できるようにするsetuid / capabilityを持つヘルパー実行可能ファイルを使用することです。sudo
特定の特権を持つコマンドのみを実行するように設定する方法と同じです。これが取られたアプローチですバブルラップ、FlatPakで使用されます。
bubblewrapの追加情報は、Linuxディストリビューションがユーザーの名前空間を制限するセキュリティ問題に関するいくつかの参考資料も提供します。
このストーリーは、基本的なDockerデーモンの重要なセキュリティ機能を無効にすることなく、「Docker in Docker」が実際にはサポートされていないか不可能な理由と重なると思います。まったく同じではありませんが。
[1] たとえば、CAP_SYS_ADMIN
カーネル開発者は、悪意のあるFSイメージからブロックファイルシステムをマウントする機能を確実に保護するとは考えていません。
新しいユーザーネームスペース内ではCAP_SYS_ADMIN
ブロックファイルシステムをマウントできません。ただし、新しいマウントネームスペースも作成する場合(たとえばunshare -rm
、CAP_SYS_ADMINを使用すると、バインドマウント、マウントファイルシステムを作成でき、proc
カーネル4.18以降ではFUSEファイルシステムをマウントできます。)
Dockerはまた、利用可能なシステム(SELinuxまたはAppArmor)でLSMベースのセキュリティを使用します。これらのレイヤーはCAP_SYS_ADMIN
ある点で制限される可能性があります。これはDockerの他のセキュリティ層よりもあいまいです。特定のLSMの詳細な操作に頼ると、便利で埋め込み可能なDockerコンテナを構築することのポイントの1つが失われているようです。