分離には、cgroup、名前空間、Seccomp、SELinux の使用に基づいた、従来の Linux コンテナ仮想化テクノロジが使用されます。 特権操作を実行してコンテナを構成するには、Bubblewrap を root 権限 (suid フラグを持つ実行可能ファイル) で起動し、コンテナの初期化後に特権をリセットします。
名前空間システムでユーザー名前空間をアクティブ化すると、コンテナ内で独自の識別子のセットを使用できるようになりますが、多くのディストリビューションではデフォルトでは機能しないため、操作には必要ありません (Bubblewrap は、ユーザー名前空間機能のサブセット - 現在の ID を除くすべてのユーザー ID とプロセス ID を環境から除外するには、CLONE_NEWUSER モードと CLONE_NEWPID モードが使用されます。追加の保護のために、制御下で実行可能
Bubblewrap プログラムは PR_SET_NO_NEW_PRIVS モードで起動されます。このモードでは、たとえば setuid フラグが存在する場合、新しい権限の取得が禁止されます。
ファイル システム レベルでの分離は、デフォルトで新しいマウント名前空間を作成することによって実現されます。この名前空間には、tmpfs を使用して空のルート パーティションが作成されます。 必要に応じて、外部 FS パーティションが「mount —bind」モードでこのパーティションに接続されます (たとえば、「bwrap —ro-bind /usr /usr」オプションを使用して起動すると、/usr パーティションがメイン システムから転送されます)読み取り専用モードで)。 ネットワーク機能は、CLONE_NEWNET および CLONE_NEWUTS フラグを介したネットワーク スタック分離によるループバック インターフェイスへのアクセスに制限されます。
類似プロジェクトとの主な違い
新しいリリースは、既存のユーザー名前空間とプロセス PID 名前空間への結合のサポートの実装で注目に値します。ネームスペースの接続を制御するために、「--userns」、「--userns2」、および「-pidns」フラグが追加されました。
この機能は setuid モードでは動作せず、root 権限を取得せずに動作できる別のモードを使用する必要がありますが、アクティベーションが必要です。
システム上のユーザー名前空間 (Debian および RHEL/CentOS ではデフォルトで無効になっています) であり、可能性を排除するものではありません。
出所: オープンネット.ru