web-dev-qa-db-ja.com

Linuxは本当に安全ですか?rootパスワードのみが外部アクセスを拒否しますか?

Linuxのセキュリティに関する情報をオンラインで検索していたとき、最も一般的な説明は次のとおりです。Linuxは安全です。カーネルにアクセスして新しいアプリケーションをインストールするにはrootパスワードが必要であるため、外部の悪意のあるソフトウェアが害を及ぼすことはありません。管理者だけがパスワードを知っています。

いいですね。しかし、パスワードがアクセスの制限とシステムの完全な制御の間にある唯一のものである場合、システムは本当に安全ですか?つまり、ハッカーがシステムにアクセスするために、特にデータ(パスワード)を明らかにするために考えているあらゆる種類のトリックを意味します。

29
James C

「Linux」(すべてのインストールの一部として)は、通常、外部アクセスを拒否するパスワードだけではありません。

まず、任意のアクセス制御の統一されたセットがあります。それは、ユーザー/グループ/その他すべてのユーザーに対する読み取り/書き込み/実行権限です。従来、これらのアクセス許可は、無視されたり回避されたりするのではなく、実際に使用されていました。さらに、インストールの一部のサブセットには SELinux がインストールされ、構成されて機能しているため、よりきめ細かいアクセス制御リストのアクセス許可のスタイルが適用されます。

次に、サーバーは通常、指定された特別なユーザーとして実行されます。 [〜#〜] ntp [〜#〜] ユーザー "ntp"として実行されるプロセス。たとえば、Webサーバープロセスはユーザー "http"として実行されます MySQL データベースはユーザー "mysql"として実行されます。上記の説明的なアクセス制御は、ほとんどの場合、NTPユーザーIDがHTTPユーザーIDのファイルの一部を読み取る以上のことを行うことを防ぎます。

第3に、ソフトウェアインストールベースは非常に断片化されています。非常に多くの異なるディストリビューションがあります。その後、すべてのインストールでApache HTTPDまたはsendmail SMTPサーバーが実行されるわけではありません。代替手段があり、通常、特定のサーバーには複数のインストールのみがあります。ソフトウェアのバージョンも非常に断片化されています。すべてのディストリビューションが独自に選択したWebサーバーをコンパイルおよび維持しているため、2つのインストールが同じバグまたは同じコンパイルオプションを持つサーバーを実行することは非常にまれです。

したがって、たとえば、Linuxマシンの後に WordPress パスワードを推測する人がWordPressパスワードを推測する可能性があります。これにより、攻撃者がユーザー "http"として実行される可能性がありますまたは「Apache」。悪いことや恐ろしいことかもしれませんが、すべてではありません。「http」または「Apache」のユーザーは、ほとんどの場合、非常に多くのファイルを上書きできません。HTMLとDocumentRootディレクトリ内のファイルのみを上書きできます。いくつかのディストリビューションの「ルート」パスワードを推測するか、ローカル特権の昇格を利用して、ある種のユニバーサルファイルアクセスに到達するために、さらに飛躍します。

これは実際には複数の層ですが、それは主に文化と伝統によるものであり、一種の「群れの免疫」でもあることに注意してください。エクスプロイトの組み合わせによっては、特定のシステムでrootアクセスが発生する可能性がありますが、その組み合わせは他の多くのシステムには適用されない可能性があります。

32
Bruce Ediger

Linuxセキュリティに関する情報をオンラインで検索していたとき、最も一般的な説明は次のとおりです。Linuxは安全です。カーネルにアクセスして新しいアプリケーションをインストールするにはrootパスワードが必要であるため、外部の悪意のあるソフトウェアが害を及ぼすことはありません。管理者だけがパスワードを知っています。

システムを安全にするのはパスワードではなく、ツールと文化です(ただし、パスワードを完全に割り引いてはいけません)。ユーザーがユーザーグループ、アカウント、および特権を設定および管理することを容易にするほど、システムを安全にすることが容易になります。

以前のWindowsバージョン (1)、すべての権限を持つ単一のユーザーアカウントを持つことが標準でした。 パスワードなし、完全な管理者権限。これは基本的に、ジョー叔父さんが特権の昇格などを心配することなく、必要なことを何でもできることを意味しました。また、彼の名前で実行するように管理されているコードはすべて、マシン上で自由に制御できます。 フェールセーフを実装するか、「本当に本当に本当にいいですか?」ボックスを実装するかどうかは、個々のプログラム次第でした。

対照的に、Unix/Linuxは設計上、長い間マルチユーザーシステムでした。これらは、さまざまなセキュリティ要件を持つさまざまな役割が存在するという考えで構築されています。

  • 管理者がシステムを保守します。オペレーティングシステムのアップグレード、プログラムの変更、グループと権限の追加/削除が必要になる場合があります...これはつまり、ほとんど自由なアクセスが必要であることを意味します。

  • Usersは、上から見たシステムサービスの日常的な利用者であるUncle Joeです。彼らはソフトウェアを使用して、手紙を書いたり、文書を読んだり、ウェブを閲覧したり、ゲームをしたり、などをしています。彼らはある程度ソフトウェアをインストールできますが、自分自身の影響範囲内に限られます。システムソフトウェアやライブラリを変更することはできません。

  • 実行中のサービスは、非常に限定的で明確に定義されたニーズを持つ傾向があるため、多くの場合、独自のユーザーアカウントも与えられます。 MySQL には、書き込み可能なディレクトリ、開いているネットワークポートなどが必要ですが、アンクルジョーのドキュメントへのアクセスや、ソフトウェア(それ自体でも)を上書き/変更する機能は必要ありません。

したがって、実行中のサービス(HTTPサーバーなど)が危険にさらされている場合でも、それ自体が最高の特権で実行されていない場合、それが与えることができる持続的な損傷の量は制限されます。限られた特権の下で実行するというこの考え方が、システムをより安全なものにしているのです。


いいですね。しかし、パスワードがアクセスの制限とシステムの完全な制御との間にある唯一のものである場合、システムは本当に安全ですか?つまり、ハッカーがシステムにアクセスするため、特にデータ(パスワード)を明らかにするために考えているあらゆる種類のトリックを意味します。

これは、コンビネーションを持つ人々が入ることができるので、金庫が安全ではないと言っているようなものです。

しかし、それでも、あなたは公正な主張をします。 rootになり、フルアクセスを取得します。

誰かが特別なアクセスを必要とするシステムは、誰かがなりすまされる余地を残します。そのため、パスワードで保護されたシステムの最大のルールはパスワードを漏らさないことです

特定のIPアドレス範囲のみをホワイトリストに登録する、パスワードを時々変更する、一部のロールがパスワードに関係なくrootに昇格できないようにするなど、侵害されたrootアカウントの被害を制限するために使用できる緩和戦略があります。

それは完璧ではありません。しかし、それはジョー叔父さんのパスワードのない管理者アカウントに勝るものです。


(1)しかし、Windows Vista以降でもこの違いはありませんか?Windows Vistaの前でも、個別の権限を持つ個別のアカウントが利用可能でしたが、私の経験では、一般的には使用されませんでした。

15
JvR

安全なシステムはありません。特定の種類の攻撃に対して十分に安全である可能性があるシステムのみがあり、攻撃シナリオは急速に変化する可能性があります。

デスクトップシステムとしてのLinuxは、採用率が低いことから利益を得ます。つまり、あなたは大規模攻撃の魅力的なターゲットではありません。また、セキュリティ境界間のセグメンテーションが改善されます。つまり、通常は[OK]をクリックして管理者として実行するだけでは不十分です。また、このプロパティはWindowsのようにファイル名から派生するものではないため、ファイルを実行可能にするために、ファイルの実行権限を明示的に設定する必要があります。

サーバーシステムとしてのLinuxも安全である可能性がありますが、残念なことに、多くの管理者はLinuxは安全であり、ライブセキュリティではないと信じています。たとえば、システム上のすべてのソフトウェアを毎日更新したり、ログファイルをチェックしたりするわけではありません。これにより、Linuxは脆弱なWebアプリケーション(WordPressプラグインなど)に対する攻撃の標的になりやすくなります。そして、攻撃者がこの方法でローカルユーザーとしてアクセスすると、通常はrootになるのも簡単です。近年、Linuxで使用できる特権昇格の脆弱性は十分にありました。

したがって、Linuxは多くのタスクに対して十分に安全にすることができますが、誇大広告を信じないで、システムをインストールして、それを忘れてください。また、Windowsが安全でないとは思わないでください。最近のバージョンでも十分に安全にすることができますが、自分が何をしているかを把握し、すべてを最新に保つ必要があります。

要求に応じて、システム(LinuxおよびWindows)を十分に安全に保つ方法に関するいくつかのヒント。オンラインにはもっと多くのリソースがあるかもしれませんが、これらは私の経験からの主なポイントです:

  • システムを可能な限り最新の状態に保ちます。つまり、サポートされているソフトウェアのみをインストールします。 Linuxでは、システムに付属しているソフトウェアを使い続け、定期的に更新を実行するか、自動更新を使用するだけで十分です。 Windowsでは、システムを使いすぎないため、はるかに困難です。本当に必要なソフトウェアには、独自のアップデーター( Adobe FlashAdobe Acrobat Reader 、Oracle JavaiTunes など) 、ベンダーのサイトで更新を確認する必要があるか、まったくサポートされていません。多くの場合、一度購入した古いソフトウェアを実行しますが、サポートされていないバージョンを実行します。これは、サポートされているバージョンを取得するためだけに再度支払う必要がないためです(より優れたハードウェアも必要になる場合があります)。 Linuxではもちろん、WordPressプラグインなどのように、外部ソースからのソフトウェアも更新する必要があります。
  • 次に、本当に必要なソフトウェアのみをインストールする必要があります。ソフトウェアの数が少ないほど、攻撃対象領域が小さくなり、最新の状態を維持しやすくなります。特にWindowsでは、他の多くのソフトウェアを含むソフトウェアバンドルを入手することが多いため、これは簡単ではありません。たとえば、WindowsでiTunesと一緒にSafariブラウザを入手したことがあるとします。このブラウザーはWindowsではサポートされなくなりました。現在、多くのシステムに、安全でサポートされていないソフトウェアがインストールされています。
  • 可能な場合は、セキュリティレコードの悪いソフトウェアを避けてください。これは現在、少なくともJava、Flash、およびAcrobat Readerを意味します。
  • サーフィン中の攻撃面を下げます。これは、インターネットの暗い隅を避けるだけでなく、不正広告を防ぐためにいくつかの広告ブロックをインストールすることも意味します。
  • Windowsでは、ウイルススキャナをインストールする必要があります。
  • そしてもちろん注意してください。不審なメールなどは開かないでください。オンラインバンキングなどの機密性の高い作業を行う場合は、よく考えてください。これらのタスクには、USBスティックの特別なLinuxシステムを使用することもできます。
6
Steffen Ullrich

このQ/Aサイトは、Linuxセキュリティ全体を議論するのに最適な場所ではないかもしれませんが、

  • rootアクセスは通常、ローカルアカウントに制限されています。これは最初に取得する必要があります。
  • アプリケーションのインストールは通常、実行可能なインストーラーではなく、ソフトウェアソースに制限されています。
  • linuxのユーザー数は少なく、これらのユーザーはより良いソフトウェアプラクティスを維持しており(主に、更新/アップグレードが簡単/低コストであるため)、そのためターゲットにはなりません。

もちろん、適切なrootパスワードを選択することは最も重要です。特にif他のユーザーにシステムへのアクセスを許可します。結局のところ、それはセキュリティのもう1つの層にすぎません。

それ以外の場合は、あまり期待しないことをお勧めします rootアカウントの保護から

2
Maarten Bodewes

上記の回答に加えて、 Linux PAM を使用すると、任意のユーザー(およびルート)のセキュリティチェックを追加できるようになります。たとえば、証明書、usbキー( YubiKey など)などが必要です。

0
agtoever