GNU/Linux >> Linux の 問題 >  >> Linux

Silverblueを使用した不変のLinux:私のお気に入りのスーパーパワー

私は最近ですが、Silverblueへの専用の変換です。これは、メインの自宅のラップトップで実行し、期限が来ると仕事用のラップトップに配置します。数か月以内にハードウェアをアップグレードします。 Enable SysadminでSilverblueに関する記事を書き、週末に、私の子供の1人が持っているラップトップも移動しました。使いやすさ、ルックアンドフィールの観点から、Silverblueは基本的にFedoraのバージョンです。ただし、重要な違いが1つあります。それは、オペレーティングシステムが読み取り専用でマウントされていることです。つまり、不変です。

「不変」とはどういう意味ですか?変更できないということです。より正確に言うと、ソフトウェアのコンテキストでは、通常、実行時に何かを変更できないことを意味します。

重要な余談:一定の不変性

その最後の文を書いているときに、それは少し誤解を招くかもしれないことに気づきました。多くのプログラミング言語には「定数」の概念があります。定数は、 ではない変数(またはセット、またはデータ構造)です。 変数。定数に値を割り当てることができ、通常、値が変更されないことを期待できます。ただし、これは使用している言語によって異なりますが、定数がではない可能性があります。 不変。

この声明は常識に反しているようです。しかし、公平を期すために、「プログラミング言語」と「常識」というフレーズが、私の経験では同じ文で積極的に使用されることはめったにありません。しかし、それは一部の言語が設計されている方法にすぎません。つまり、不変にする予定の変数がある場合は、使用しているプログラミング言語の構文を確認し、必要に応じてその不変性を維持するために必要な特定の手順を実行します。

オペレーティングシステムの不変性

Silverblueの場合、不変ののはオペレーティングシステムです。ルートファイルシステムではなく、Flatpakを使用して、アプリケーションをコンテナにインストールします(これについては後で詳しく説明します)。これは、アプリケーションのインストールがコアファイルシステムから分離されているだけでなく、悪意のあるアプリケーションがシステムを危険にさらす可能性が大幅に低下していることを意味します。不可能ではありません。セキュリティの攻撃や脆弱性を説明するときは、通常、「不可能」という言葉を避けようとしますが、リスクは大幅に低くなります。

では、どのようにシステムを更新しますか?さて、あなたがすることは、必要な更新されたパッケージを含む新しいブートイメージを作成することです、そしてあなたが準備ができたら、あなたはそれにブートします。 Silverblueは、これを行うためのシンプルなツールを提供します。これは、システムをアップグレードする標準的な方法よりも間違いなく簡単です。このアプローチにより、オペレーティングシステムのさまざまなバージョンや、さまざまなパッケージのセットを使用したインストールを簡単に維持できます。特定の環境でアプリケーションをテストする必要がある場合は、その環境を反映するイメージを起動してテストを実行します。別の環境?別の画像。

ただし、この状況がもたらすセキュリティプロパティに関心があります。標準ユーザーとしてコアオペレーティングシステムを危険にさらすのは難しいだけでなく(多くのセキュリティ問題と同様に、sudoを使用すると、 またはrootアクセスの場合、状況は大幅に低下します)が、常に既知の環境で操作しています。既知の構成からフォレンジック分析をテスト、監視、および実行できるため、知識はセキュリティにとって非常に望ましい特性です。セキュリティの観点から(それが提供する他の利点は言うまでもなく)、不変性は間違いなくオペレーティングシステムの資産です。

コンテナの不変性

ここでは、コンテナー(「Linuxコンテナー」、または最近ではあまり頻繁ではないが正確には「Dockerコンテナー」とも呼ばれます)を詳細に説明する場所ではありませんが、基本的には、イメージとして作成して実行するソフトウェアのコレクションです。ホストサーバー(「ポッド」と呼ばれることもあります)上のワークロード。コンテナーの優れた点の1つは、イメージからのスピンアップ(プロビジョニングと実行)が一般的に高速であることです。もう1つは、そのイメージの形式(パッケージ形式)が明確に定義されているため、簡単に作成できることです。画像自体。

ただし、私たちの観点からすると、コンテナの優れている点は、コンテナを不変に使用することを選択できることです。実際、これが一般的に使用されている方法です。可変コンテナの使用は、一般的にアンチパターンと見なされます。コンテナーを使用する標準的な(そして「正しい」)方法は、各アプリケーションコンポーネントと必要な依存関係を明確に定義された(できれば小さい)コンテナーにバンドルし、必要に応じてそれをデプロイすることです。コンテナの設計方法は、できないという意味ではありません。 実行中のコンテナー内のソフトウェアを変更しますが、それらの実行方法により、それを実行できなくなります。絶対にすべきではないので、これは良いことです。

不変のソフトウェアは、より良い知識を提供し、実行時の侵害に対する抵抗力を向上させることを忘れないでください。代わりに、コンテナがいかに軽量であるかを考えると、必要に応じてコンテナインスタンスを強制終了し、更新されたイメージのインスタンスに置き換えることができるようにアプリケーションを設計する必要があります。

この考慮事項により、root権限でコンテナーを実行してはならない2つの理由がわかります。まず、正当なユーザーがその特権を使用して、実行中のコンテナ内のソフトウェアを更新し、知識を減らし、予期しない動作を引き起こす可能性があるという誘惑があります。第二に、悪意のある攻撃者(人間または自動化された)がコンテナ内の基盤となるソフトウェアを変更する可能性がある場合、侵害の機会はさらに多くなります。

Silverblueによる二重不変性

Silverblueはコンテナでアプリケーションを実行することを前述しました。この事実は、Silverblueシステムでアプリケーションを実行するときに、デフォルトで2つのレベルのセキュリティが提供されることを意味します。オペレーティングシステムの不変性とコンテナの不変性です。

セキュリティ担当者として、多層防御を承認します。これは、そのプロパティの典型的な例です。また、実行しているものとバージョンを、標準のオペレーティングシステムを使用している場合よりもはるかに簡単に制御できるという事実も気に入っています。

この記事は元々、セキュリティブログであるAlice、Eve、Bobに投稿されました。


Linux
  1. procps-ngを使用してターミナルでLinuxシステムを監視します

  2. straceを使用したLinuxでのシステムコールの理解

  3. Linuxコンテナの舞台裏

  1. Linuxシャットダウンコマンド(例付き)

  2. LinuxでのCronを使用したシステムタスクのスケジューリング

  3. Linuxのセキュリティとユーザビリティのバランス

  1. noatimeでLinuxシステムのパフォーマンスを向上させる

  2. Linuxディストリビューションはまだコンテナーで重要ですか?

  3. ハウツー:Linux でのディレクトリを使用した C プログラミング