回答:
最初から、UnixおよびUnixスタイルのオペレーティングシステム(Linuxを含む)は常にパスワードを暗号化ハッシュとして保存してきました(1)。これらのハッシュは元々に保存されていました/etc/passwdが、このファイルは他の目的で情報を利用可能にするために誰でも読み取り可能であるls -l必要がありました。/etc/passwd各ファイルの所有者の数値ユーザーIDを表示用のユーザー名に変換するために読み取るだけでも必要です。ただし、ハッシュ化されたパスワードを世界中の人が読めるファイルに格納すると、悪意のあるユーザーがそれらのハッシュを簡単に取得し、他のユーザーのアカウントで使用可能なパスワード(2)を生成することができます。
これを防止するために、ハッシュされたパスワードは、最終的にroot(および、場合によっては管理者の特権グループ)だけが読み取り可能なファイルに移動されました/etc/shadow。これにより、ハッシュをシステムの通常のユーザーから隠し、ユーザー認証の目的でハッシュを使用できるようにします。
注:
知識は確かですが、保存されているパスワードは暗号化されていません。それらは、(少なくともそれが書かれた時点で)暗号的に安全なハッシュアルゴリズムを使用してハッシュされます。ここで関連する主な違いは、ハッシュが固定長(暗号化されたテキストの長さは暗号化されたテキストの長さに基づいて変化する)と不可逆(暗号化されたテキストは復号化できますが、ハッシュされたテキストは復号化できない)です。
ハッシュは固定長であるため、与えられたハッシュ表現と一致する入力の数は無限です。したがって、攻撃者は、所有者のユーザーのパスワードと必ずしも同じであるとは限らない有効なパスワードを見つける可能性があります-これは、現代の暗号化ハッシュのサイズを考えると非常にまれです。
/etc/shadowファイルには、セキュリティ上の理由のために作成し、各ユーザーの暗号化されたパスワードを保持しました。
元々、暗号化されたパスワードはに保存されていました/etc/passwd。 /etc/passwdシステムがユーザーIDをユーザー名にマッピングし、ユーザーがお互いに関する情報(他のユーザーのホームディレクトリや従来は「gecos」フィールドに格納されていた電話番号など)を見つけられるように、誰でも読み取り可能である必要がありました。 「finger」ユーティリティによって表示されます。
しかし、人々はこれがセキュリティの問題であることを理解しました。十分な時間があれば誰でも、可能なすべてのパスワードに対して暗号化されたパスワードをプログラムで生成することにより、ブルートフォース攻撃と呼ばれる攻撃を実行できます。攻撃者が実際にtelnetまたはを介してログインしようとせずにそれを行った場合、sshシステムはそれが攻撃されていることを知ることができませんでした。
そのため、暗号化されたパスワードは、新しく作成されたに移動されました/etc/shadow。これはrootだけが読み取ることができます。
また/etc/passwd、パスワードが最後に変更された日時や有効期限が切れる日時など、ユーザーのアカウントとパスワードに関連してファイルでサポートされなかったその他の情報も含まれています。
参照してくださいman 5 shadow(Web版のファイルフォーマットの完全な詳細については)。
どのバージョンのSUSEを扱っているのかを知らないと、SUSEでも同じかどうかはわかりません。たとえば、SUSEシステムがMD5ではなくBlowfishを使用している場合があります。
また、/etc/shadowファイルを別のLinuxディストリビューションを実行しているシステムと混在させることを示唆しましたが、他のディストリビューションが何であるかについては言いませんでした。
たとえば、SuSE 9.3からUbuntu Server x86_64へのシャドウファイルの移行に関する問題を参照してください。
/etc/shadow解読するには、暗号化されたパスワードフィールドを開いて、$1$またはで始まるかどうかを確認してください$2$。が含まれている場合$1$、MD5であり、他のほとんどのディストリビューションと互換性があります。が含まれている場合は$2$、DebianのBlowfishシャドウファイルによると、おそらくBlowfish です。
Ubuntuを使用している場合、Ubuntu blowfishの最初のGoogle検索結果が出発点として適している可能性があります。
ユーザーは/etc/passwdファイルにリストされます。このファイルには、ユーザーがログインできるようにするだけでなく、システムが使用する多くの情報が含まれています。
各行はユーザーエントリに対応し、異なるフィールドはコロンで区切られます。最初に提出されるのはログインで、その後に対応するパスワードが続きます。
このフィールドには、暗号化されたパスワードが保存されていました。ただし、/etc/passwdファイルはシステム上のすべてのユーザーが読み取ることができる必要があるため、@ Mikelが言っているように、暗号化によってブルートフォース攻撃を防ぐことはできません。解決策は、これらの暗号化されたパスワードをroot専用の読み取り可能なファイルに移動することでした:/etc/shadow。
したがって、/etc/shadowシステムのユーザーの暗号化されたパスワードが含まれています。システムは、パスワードフィールドに/etc/passwdxのみが含まれている場合、このファイルでパスワードをチェックする必要があることを認識しています(「/ etc / shadowへのクロスオーバー」を意味します)。
/etc/passwdは、と同じようにハッシュされていることに注意してください/etc/shadow。のパスワードがプレーンテキストであると実際に言っているわけではありませんが/etc/passwd、* nixのパスワード処理に慣れていない人が答えを誤って解釈するのは簡単です。
x実際には何の意味もないと思います。これは無効なハッシュ(どのパスワードとも一致しないもの)として存在します。一部のシステムではを使用しています!。
'87にLinux Shadow Password Suiteとなるものを書いたので、私が世界中ですべての賛成票を獲得できるかどうか見てみましょう;)
元の/etc/passwdファイルには、クリアテキストパスワードの変更されたDESベースのハッシュが含まれていました。当時crypt()の可能なパスワードの数と12ビットを使用するため、パスワードハッシュに対する攻撃が実行不可能であろうと関数が作成された、それが信じられていた(これは、UNIXオペレーティングシステムのクリエイターによって規定されました) (4,096可能な値)「塩」。考えられる各クリアテキストパスワードには、4,096の考えられるハッシュ値があり、64ビットのハッシュ結果により、合計2 ^ 72の考えられるパスワードハッシュが得られました。
別の投稿者が述べたように、/etc/passwdユーザー名とUID値の間でマッピングするためにさまざまなユーティリティによっても使用され(/etc/groupファイルはグループに類似の機能を提供します)、世界中の人が読めるようにする必要がありました。
1980年代に、/etc/passwdファイルに保存されたパスワードハッシュに対する辞書攻撃が実行可能になり/etc/shadow、System Vの初期リリースでAT&T UNIXに導入されたことが明らかになりました。私は、元のShadowライブラリの作成に使用したマンページを文書化しました。忘れられて以来ve、しかしそれは間違いなく初期のSystem Vリリースであり、おそらくSVR3.2でした。
AT&Tが行ったこと、およびLinuxで最終的に使用されるようになった'87のSCO Xenix(元のSCO Xenixではなく、後の邪悪なSCO Xenix)に実装したのは、ハッシュされたパスワードを単にに移動しただけです/etc/shadow。これにより、特権のないユーザーがコピーを取得して攻撃を仕掛けるドライブバイ攻撃を防ぎました/etc/passwd。そもそもShadowを書いた理由をご存じの方は、私が/etc/passwdUUCPをほぼすべての目的で使用していた時代に、UUCPを介してユーザーにファイルをダウンロードしてもらいました。
Linuxが作成されて広く使用されるようになるまでに、パスワードハッシュを攻撃するための非常に多くのツールが存在していました。の高パフォーマンスの再実装crypt()は1つの手段であり、Crackやlibcrackなどのツールを介した辞書ベースの攻撃もその1つでした。最初の移植はNate HollowayとFloria La Rocheによって行われました(私は彼らに信用を与えました、誰かが彼らの前に作業をしたかどうかはわかりません)。
最終的crypt()に、保護されたファイルでも、ベースのハッシュの使用は安全でなくなり、元のMD5ハッシュベースの変更が行われました。MD5最終的には弱すぎると見なされ、新しいハッシュが使用されました。
理論的には、十分に強いハッシュをに保存できます/etc/passwd。運用セキュリティが低いということは、多くのシステムが/etc/shadowさまざまな攻撃ベクトルを通じてファイルを利用できることを意味します。「バックアップファイルを盗んだ」のがおそらく最も簡単です。