あなたの指摘はすべて正しいです。しかし、私たちがそれに憤慨する前に、Linux セキュリティ モデルがどのように機能し、何を保護するように設計されているかを思い出す必要があります。
Linux セキュリティ モデルは、マルチユーザー ターミナルのみまたは SSH サーバーを念頭に置いて設計されていることに注意してください。 Windows は、エンド ユーザーのワークステーションを念頭に置いて設計されています (ただし、最近の世代の Windows はよりターミナルに適していると聞いています)。特に、Linux の慣例はアプリをユーザーにサンドボックス化するのに優れていますが、Windows では重要なものはすべてシステムとして実行されますが、Linux GUI (X サーバー) はセキュリティに欠けており、Windows GUI には UAC が組み込まれているなどの凝った機能があります。基本的に、Linux は (そして常にそうであった) 最初にサーバー、次にワークステーションですが、Windows はその逆です。
セキュリティ モデル
「OS」(つまりカーネル)に関する限り、7つのttyコンソールと任意の数のSSH接続(別名「ログインセッション」)があります-たまたま、ubuntuにはGUIを自動起動するスクリプトが同梱されていますtty7
セッションですが、カーネルにとっては別のアプリケーションにすぎません。
ログイン セッションとユーザー アカウントは、互いに非常にうまくサンドボックス化されていますが、Linux は、ユーザーを自分自身から保護する必要がないというセキュリティの考え方を取り入れています。このセキュリティ モデルでは、アカウントがマルウェアによって侵害された場合、それは失われた原因ですが、システム全体を保護するために他のアカウントから分離したいと考えています.
たとえば、Linux アプリは apache
のような権限の低いユーザーを作成する傾向があります。 または ftp
根本的なことをする必要がないときのように実行されます。攻撃者が実行中の apache
の制御に成功した場合 プロセス、それは他の apache
を台無しにすることができます プロセスしますが、ftp
にジャンプするのに問題があります
ここで、Windows は根本的に異なるアプローチを採用していることに注意してください。主に、すべての重要なものは常に System として実行されるという規則によって行われます。 Linux の悪意のあるサービスは、システムとして実行されている悪意のあるプロセスよりも悪いことを行う範囲が狭いため、Windows は必要 管理者権限を持つ人を「自分自身」から保護するために特別な努力をすること。
セキュリティのために設計されていない GUI 環境と X サーバーは、このセキュリティ モデルにレンチを投げかけます。
Gnome gksudo と Windows UAC、およびキーロガー
Windows では、ユーザー プロセスが特権エスカレーションを要求すると、カーネルは、メモリとキーボード/マウス バスがデスクトップ環境の残りの部分から分離されている特別な保護されたプロンプトをスローします。 GUIがOSに組み込まれているため、これが可能です。 Linux では、GUI (X サーバー) は単なる別のアプリケーションであるため、パスワード プロンプトはそれらを呼び出したプロセスに属し、ユーザーとして実行され、メモリ アクセス許可と入力バスを他のすべてのウィンドウおよびユーザーとして実行されているプロセスと共有します。
ルート プロンプトは、高度な UAC 機能 (キーボードをロックするなど) を実行できません。これは、既にルートになっている必要があるか、X サーバーを完全に再設計する必要があるためです (以下の Wayland を参照)。この場合、GUI をカーネルから分離することの欠点です。しかし、少なくとも Linux のセキュリティ モデルと一致しています。
パスワード プロンプトと、同じ GUI セッションでユーザーとして実行される他のプロセスとの間にサンドボックスを追加することで、セキュリティ モデルを修正してこれを取り締まるとしたら、非常に多くのことを書き直す必要が生じる可能性があります。少なくとも、カーネルはプロンプトを作成できるように GUI を認識する必要があります (現在はそうではありません)。もう 1 つの重要な例は、GUI セッション内のすべてのプロセスがキーボード バスを共有することです。
私がキーロガーを書いてからいくつかのキーを押すのを見てください 別のウィンドウで :
➜ ~ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech K400 Plus id=9 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=13 [slave pointer (2)]
➜ ~ xinput test 9
key release 36
key press 44
hkey release 44
key press 40
ekey release 40
key press 33
lkey release 33
key press 33
lkey press 39
okey release 33
key release 39
key press 66
key press 31
別のプロセスのプロンプトまたはターミナルでパスワードを盗聴し、それ自体で sudo を呼び出すことができるように実行されているプロセス (これは、「あなたからあなたを保護する必要はない」という考え方に直接従うものです)。セキュリティ モデルを根本的に変更し、あらゆる種類のものを大幅に書き直しました。
(Gnome は少なくともロック画面のキーボード バスをサンドボックス化しているように見え、そこに入力したものが私のセッションのキーボード バスに表示されないため、[ユーザーの切り替え] を介して新しいセッションを実行しているように見えることに注意してください)
ウェイランド
Wayland は、X11 を置き換えることを目的とした新しいプロトコルです。クライアント アプリケーションをロックダウンして、情報を盗んだり、ウィンドウ外の何かに影響を与えたりできないようにします。クライアントが外部 IPC の外部で相互に通信できる唯一の方法は、それらすべてを制御するコンポジターを経由することです。ただし、これは根本的な問題を解決するものではなく、信頼の必要性をコンポジターに移すだけです。
仮想化とコンテナ
クラウド技術を扱っているとしたら、「Docker こそが答えだ!!」と飛び跳ねていることでしょう。確かに、ブラウニーはあなたを指しています。 Docker 自体はセキュリティを強化することを意図したものではありませんが (@SvenSlootweg に感謝)、現在の Linux アーキテクチャと互換性のある前進としてコンテナー化や仮想化を使用することを示しています。
プロセス間の分離を念頭に置いて構築された 2 つの注目すべき Linux ディストリビューション:
Qubes OS 仕事、銀行業務、Web ブラウジングなどの「セキュリティ ドメイン」に分割された複数の VM 内でユーザーレベルのアプリを実行します。
アンドロイド 各アプリを個別の低特権ユーザーとしてインストールして実行することで、アプリ間でプロセス レベルの分離とファイル システムの分離 (各アプリは独自のホーム ディレクトリに限定される) を実現します。
結論: エンド ユーザーの観点からは、Linux が Windows と同じように動作することを期待するのは不合理ではありません。 .パスワードプロンプトの実装を変更するだけでは、自分が所有するプロセスによって所有されている限り、何も達成されません。シングルユーザー GUI ワークステーションのコンテキストで Linux が Windows と同じセキュリティ動作を得るには、OS の大幅な再設計が必要になるため、実現する可能性は低いですが、Docker のようなものがより多くの Linux で前進する方法を提供する可能性があります。
この場合の重要な違いは、Linux は低レベルでマルチユーザー サーバーになるように設計されており、Windows はシングル ユーザー ワークステーションとして設計されているのに対し、ユーザーを自分自身から保護しないという決定を下すことです。そのため、ログイン セッション内でプロセス間保護を行う必要があります。また、Windows では GUI が OS の一部であるのに対し、Linux では GUI は別のユーザーレベルのアプリケーションであることも重要です。
<ブロック引用>
Linux 全般または Ubuntu 固有の安全機構はありますか?これにより、アプリケーションがシステムのものと同じように見えるダイアログを表示して、パスワードを要求するのを防ぐことができますか?
クイックアンサー:いいえ。
<ブロック引用>ユーザーの観点からは、プロンプトがオペレーティング システムから来るという保証はありません。ウィンドウを表示するための限られた許可しか持たない悪意のあるプログラムである可能性があり、パスワードを要求することで、マシン全体への無制限のアクセスを取得します.
悪意のあるプログラムがコンピューター上にある場合、どのプログラムがダイアログを表示しているかは問題ではありません。
悪意のあるプログラムである場合は、次の文で説明するように、ダイアログを表示する必要さえありません。それが正当なプログラムである場合、悪意のあるプログラムは、X サーバー環境 (ターミナルの方が優れています) で、ウィンドウとそこに入力している内容を「監視」できます。
解決?
一部のプログラムが信頼できないと考える理由がある場合は、サンドボックス化 (VM またはそれ以下のもの) を行います。
そうでなければ、パスワードを要求しない .このダイアログは、技術者以外のユーザーにとって便利です。セキュリティや組織の管理者などに関心がある場合は、GUI パスワード クエリを表示する必要はまったくありません。 root 以外のユーザー アカウントのアクセス許可を適切に構成し (yes または no ですが、質問はしません)、デスクトップを root として使用しないでください (その理由と、root を必要以上に頻繁に使用したくなるからです)。
<ブロック引用>ユーザーに定期的にパスワードの入力を求めることで、システムはユーザーに、アプリケーションが要求するたびにシステム パスワードを入力するのは完全に自然なことであることを教えます。
説明されているように、彼らに尋ねないでください。管理者として、「あなたの」ユーザーは明確に定義された権限を持っているはずです。
そして、組織管理者としての自動更新について:あなたは気が狂っていますか :) 真剣に、多くの Ubuntu クライアントがランダムなものをランダムに更新させないでください。自分で保守およびテストし、ロールアウトする中央のイメージについてはどうですか。またはAnsibleのような他の方向のものですか?
セキュリティとは完全に独立しているため、更新によって問題が発生する可能性があります。
<強い>はい。これは安全ではありません!
私はいつもそのダイアログをキャンセルします。偽物である可能性があるからではなく、本物である可能性があるからです。
「アプリケーション」にエスカレートされた特権を与えることになっているのは、それが尋ねるからですか?いいえ、そうは思いません。
システムの更新は問題ありません。私は手動で行っていますが、エラー報告システムがこれを要求していることに悩まされています。悪いデザインです。