名前空間を中心に Linux ワークフローを再構築し、過去を振り返ることはありませんでした
少し前まで、私の Linux マシンの動作がひどく遅かったのです。データ管理、最適化、タイムシフトバックアップの調整など、いくつかの修正を試みました。そういうこと。その冒険の中で、私はいくつかのプロセスを発見しました。 まだ パフォーマンスの問題を引き起こします。そこで、システム プロセスの可視性を向上させ、アプリケーションを安全に実行するために、Linux 名前空間に目を向けました。
私は、新しい Linux ユーザーを圧倒するのではなく、さらなる研究を奨励することを目的として、これらの懸念を簡単な言葉で説明しようと努めてきました。私が使用したのは、 Linuxマニュアルページ ここのすべてのコマンドの名前空間について。これらをテストするために Debian 13.6 と Mint を使用しました。
以前に名前空間を使用したことがありますが、知らなかっただけです
これらは Linux の大きな部分を占めています
表面上、名前空間は次のようなゲームを思い出させます。 文明 または シムシティ。すべてはリソース管理に関するものです。名前空間に関して私がこれまでに見た中で最も有益な定義は、「特定のプロセスは特定のリソースの 1 つのセットを参照し、別のプロセスは別のリソースのセットを参照する」というものです。
世の中にはたくさんの名前空間がありますが、他よりも一般的な名前空間がいくつかあります。 PID, Mount, and User。名前空間が取得できるのは、 とても 技術的なものであり、私もまだ勉強中ですが、頻繁に使用するかどうかに関係なく、理解することは価値があると思います。
Docker、LXC、Openstack、その他多くのアプリケーションが Linux 上でネームスペースをかなり使用していることがわかりました。マシン上の既存の名前空間のリストを表示したい場合は、そのためのコマンドがあります。コマンドを実行すると lsnsを選択すると、システムが現在使用している名前空間のリストが表示されます。
よく使用される名前空間がいくつかあります
そしておそらくそのうちのいくつかしか使わないでしょう
Linux には一般的に使用される名前空間が多数あります。
コンピューター上で実行されている特定のタスクを追跡する PID (プロセス ID) があります。基本的には、プログラムが特定のタスクを正しく実行できるようにします。 PID は次の場所で追跡されます。 procfs ファイルシステム。私のように、分離された環境を構築している場合、PID 名前空間を使用すると、異なる名前空間間で同じ PID 番号を使用できるようになります。
ユーザー名前空間は、どのユーザーがどのファイルを所有しているかを追跡します (より正確には、名前空間とそのホスト マシンの間で UID/GID 値をマップします)。マウント名前空間はマウント ポイントを分離しますが、ネット名前空間 (ネットワーク インターフェイス) を使用すると、名前空間内のすべてのプロセスが新しい IP アドレスとポート範囲にアクセスできるようになります。 Unix タイムシェアリング システム名前空間と IPC (プロセス間通信) 名前空間もあります。
Cgroup は名前空間ではありません (使用状況を追跡し、必要に応じて制限を作成します) が、名前空間を補完します。
名前空間はサンドボックス用に構築されたように感じられます
Linux での安全性とワークフローの向上
Docker、Flatpak、および Podman はすでにサンドボックス環境を提供していますが、サンドボックス用の名前空間を使用することで、いつでもさらに一歩進めることができます。
名前空間とは プロセスの分離 そして視認性。これらはリソースの使用量を変更したり、システムのパフォーマンスを向上させたりするものではありません (そのためには、Cgroup と組み合わせる必要があります)。私はそのレベルの制御と可視性が気に入っているので、しばらく前に Linux でのサンドボックス化にこれらを使い始めて以来、振り返ることはありませんでした。
アプリをサンドボックス化する理由はたくさんあります。これは追加のセキュリティ予防策という単純な場合もありますが、私がそうする主な理由は、アプリで何か問題が発生した場合 (またはアプリが危険にさらされた場合) に PC を安全に保つためです。新しいインストール スクリプトをテストするとき、古いソフトウェアを実行するとき、構成を実験するとき、またはシステムのクリーンアップを行うときに、サンドボックス化するために名前空間を最も頻繁に使用します。
名前空間は分離に最適ですが、より強力なサンドボックス化を実現するには、名前空間を cgroup または (seccomp)(https://man7.org/linux/man-pages/man2/seccomp.2.html) と組み合わせるのが最善です。
私が使用するのは、 user、 mount、 そして PID このようなものの名前空間。 Docker の場合と同じように、 user ネームスペースがあるため、特権のないユーザーは root アクセス権を取得しますが、 のみ サンドボックス自体で。を使用して、 mount 名前空間は、さまざまなプロセスが参照できるファイル システムのマウント ポイントを分離します (次のようなことを行います)。 chroot)。
ついに、 PID これを設定すると、サンドボックス プロセスが分離され、サンドボックス内のものがシステム上のホスト プロセスを参照 (または送信) できなくなります。
を使用して、 unshare コマンドでサンドボックスをセットアップします。
unshare --user --map-root-user --mount --pid --fork /bin/bash
mount だけでなく mount-proc を使用すると、/proc に新しい名前空間を反映させることができます。
で 極度の素人用語、 共有を解除する ユーティリティを呼び出します。 ユーザー ユーザー名スペースを設定し、 地図 システムにルートとして機能するように指示し、 マウント 新しいマウント名前空間を設定します。 PID 新しい PID 名前空間をセットアップします。 フォーク 「子プロセス」(基本的に、別のプロセスによって作成されたプロセス)を作成します 共有を解除する。の /bin/bash 実行可能なシェルにします。
そこから、いくつかのアプリと、という古い DOS ゲームを実行しました。 レミングス サンドボックスモードでテストしてください。そうすれば、何か重大な問題が発生した場合でも、システムは安全に保たれます。私はそれが好きです。を使用することもできます chroot または 消防刑務所 サンドボックス用ですが、私は名前空間を好む傾向があります。
各ブラウザ プロセスが独自のネットワーク スタックを取得するため、複数のブラウザを実行し、ネットワーク名前空間を使用することを検討しましたが、ワークフローに名前空間を組み込むことをまだ実験中であるため、完全なテストはまだ実行していません。
名前空間はさらに検討する価値があります
名前空間は複雑ですが、Linux での開発、テスト、プログラミングのために検討する価値は十分にあります。彼らは物事をより安全に保ち、簡単にサンドボックス化できるようにすることで、私の生産性とワークフローを改善しました。私は今後もそれらを使用していくつもりですし、将来のプロジェクトでは他の名前空間もいくつか検討する予定です。
このテーマについてさらに詳しく知りたい方は以下をご覧ください
関連記事
- アウディ Q9 は BMW X7 を追いかけているだけではなく、贅沢の意味を再定義しようとしています
- War of the Visions: Final Fantasy Brave Exvius は 2 年半後もお祝いとコラボレーションを続けています
- 昆虫vsクモ:違いは何ですか?