<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://uc2.h2np.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=UnixWikiMaster</id>
	<title>UnixClassWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://uc2.h2np.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=UnixWikiMaster"/>
	<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/UnixWikiMaster"/>
	<updated>2026-04-29T03:45:50Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%81%93%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&amp;diff=1007</id>
		<title>このサイトについて</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%81%93%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&amp;diff=1007"/>
		<updated>2014-02-11T15:48:25Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;本サイトはUNIXオペレーティングシステムの授業で使うテキストを用意しているサイトです。&lt;br /&gt;
授業の進め方に沿って書いているので必ずしもまんべんなくGNU/Linuxに関する内容を取り上げているわけではないことをあらかじめ断っておきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UNIXオペレーティングシステム テキスト作成方針 ===&lt;br /&gt;
&lt;br /&gt;
本テキストは、大学1-2年生レベルの人が「UNIXオペレーティングシステムを通して今日的なオペレーティングシステム像を理解」し、また「UNIXの背景にある技術、文化、思想について学ぶ」ために作成しているものです。&lt;br /&gt;
サンプルのオペレーティングシステムとして GNU/Linux を取り上げています。&lt;br /&gt;
一方、本テキストはUNIXやGNU/Linuxの操作方法やその上で動くアプリケーションの設定方法を学ぶためのものではありません。&lt;br /&gt;
なぜならば、我々は1年が7年に換算されるドッグイヤーの世界に生きており、&lt;br /&gt;
若い頃の貴重な時間を使って特定のアプリケーションの操作方法を使い方を学んだとしても、&lt;br /&gt;
その知識が利用できる時間は、きわめて短時間だからです。&lt;br /&gt;
あと10年もすれば次世代システム、あるいは現在まだ存在しないような新しいアイデアによるシステムに換わっていることでしょう。&lt;br /&gt;
しかし、背景となる技術や文化、あるいは思想というのはそうそう廃れるものではありませんし、これらのものは次世代に脈々と引き継がれていくものです。&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
初めてUNIXを触ったのは1984年ですが、自分の経験を振り返っても、その時のベーシックな知識は今でも役に立っています。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
本テキストは、このような観点から内容を組み立ています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 脚注 ===&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1006</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1006"/>
		<updated>2014-02-11T15:47:44Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードファイル /etc/passwd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」あるいは「パスワードのMAC値」です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root           24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1005</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1005"/>
		<updated>2014-02-11T15:47:19Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードの保管 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」あるいは「パスワードのMAC値」です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root           24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1004</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1004"/>
		<updated>2014-02-11T15:41:49Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードの保管 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」あるいは「パスワードのMAC値」です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root        24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1003</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1003"/>
		<updated>2014-02-11T15:41:32Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードの生成 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」あるいは「パスワードのMAC値」です。&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root        24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1002</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=1002"/>
		<updated>2014-02-11T15:37:09Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
本章を読む前に、まずパスワードを使った認証メカニズムについての一般論である[[システムにおけるパスワード管理の概要]]のページを先に読んでから本章に進むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root        24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=1001</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=1001"/>
		<updated>2014-02-11T15:33:44Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* 一方向性ハッシュ関数を導入する */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-1.png|300px|thumb|right|保存されているパスワードは保護されない]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを忘れたときに、パスワードを教えることができる。&lt;br /&gt;
* 欠点: パスワードファイルが流出するとユーザ認証は壊滅的なダメージとなる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 一方向性ハッシュ関数を導入する ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-2.png|300px|thumb|right|一方向性ハッシュ関数のみ導入]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数とは、値xに対しハッシュ関数Hを用いて計算した値H(x)から、逆をたどってxを見つけることは極めて困難であるという性質を持つ関数です。一方向性ハッシュ関数にはSHA256、SHA512といったものだけではなく、暗号化関数を使ったメッセージ認証コードなども同様に使えます。たとえば古典的UNIXのパスワード生成にはDES暗号を使っているDES-CBC-MACというメッセージ認証コード法が使われています。&lt;br /&gt;
&lt;br /&gt;
よく「パスワードを暗号化」するという表現を使うので、暗号化するなら、復号もできるだろうと類推してしまいそうになりますが、これは一方向にしか計算できません。&lt;br /&gt;
パスワードを入力し、それを一方向性ハッシュ関数で計算した値を、事前に登録しておいた一方向性ハッシュ関数で計算した値と比較します。たとえばWindowsXPなどで使っていたLMハッシュ(LAN Manager hash)は、この方式です。&lt;br /&gt;
&lt;br /&gt;
生の文字列を持っている先ほどの方法よりは格段に安全性は上がりますが、例えば同じ入力のものは同じ出力値を持ってしまう弱点を持っています。そのため辞書に載っているようなパスワードであれば、事前に処理してハッシュ値辞書を作成することが出来きます。つまり、辞書攻撃には極めて脆弱なパスワードシステムだといえます。&lt;br /&gt;
&lt;br /&gt;
辞書を作るのに膨大な時間がかかると考えるかも知れませんが、英数字8文字のすべての文字の組み合わせのための逆引き辞書を 作るのに秋葉原で手に入る機材レベルで30時間もあれば十分作成できます。しかも[http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/ ophcrack]サイトでは既にWindows XPやVistaのための辞書テーブルが既に用意されており、それを使えば検索成功率99パーセントだそうです。&lt;br /&gt;
&lt;br /&gt;
先ほどの紹介したAdobeの流出したパスワード情報は、このタイプで、さらに悪いことには、ユーザが入力するパスワードのヒント情報も入っており、そこからまず類推可能なパスワードを探し当て、次に同じパスワードを持つユーザをピックアップしてゆくということが出来てしまうという、極めて憂慮すべきシステムでした。&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを見つけるためにはパスワード解析をする必要がある。&lt;br /&gt;
* 欠点: 同じパスワードは同じ出力なので事前に辞書を作ることが可能。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ソルトを加えたパスワード管理 === &lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-3.png|300px|thumb|right|Salt(ソルト)を加えることにより同じパスワードの類推を困難にする]]&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数だけだと逆引きの攻撃辞書が使えるので、それを困難にするようにソルト(salt)と呼ばれる、ユーザ毎に異なるランダムな値を加えたのちに一方向性ハッシュ関数に入力する方法をとります。&lt;br /&gt;
&lt;br /&gt;
このソルトは隠さなくてもかまいません。長ければながいほど逆引きの攻撃辞書のサイズが巨大になります。ソルトはランダムデータですが、そんなに大きなものは必要なく70年代では12ビット程度が使われており、もし将来的にも使うと考えるとしても64ビット(8バイト)程度あれば十分でしょう。&lt;br /&gt;
&lt;br /&gt;
古典的なUNIXのパスワード処理法では、さらに一方向性ハッシュ関数を複数回呼び出し計算時間をより多くかけさせるという手法を使っています。ただし一度に多数のユーザの対応をしなければならないようなシステム、例えばウェブサイトのパスワード認証などで行うのは、認証するサーバー側に負荷がかかりすぎる可能性があるので、本当にこの手法を選択すべきかどうかは熟慮が必要です。基本的には、複雑さを増すにはパスワードに使える文字種類を多くしたり、文字数を増やすことが重要です。&lt;br /&gt;
&lt;br /&gt;
これでやっと普通のパスワード管理の基準を満たすことができます。ここでの普通っていうのは、ただ単純に数として多くあるいう意味ではなく、理想に近い意味での普通です。 (cf. Dream Fighter by Y. Nakata)&lt;br /&gt;
&lt;br /&gt;
* 利点: 事前のパスワード解析を無効にできる。&lt;br /&gt;
* 欠点: - (必要な基準は満たしている。）&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-3.png&amp;diff=1000</id>
		<title>ファイル:Pwd-pic-3.png</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-3.png&amp;diff=1000"/>
		<updated>2014-02-11T15:32:06Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=999</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=999"/>
		<updated>2014-02-11T15:30:26Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* 一方向性ハッシュ関数を導入する */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-1.png|300px|thumb|right|保存されているパスワードは保護されない]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを忘れたときに、パスワードを教えることができる。&lt;br /&gt;
* 欠点: パスワードファイルが流出するとユーザ認証は壊滅的なダメージとなる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 一方向性ハッシュ関数を導入する ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-2.png|300px|thumb|right|一方向性ハッシュ関数のみ導入]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数とは、値xに対しハッシュ関数Hを用いて計算した値H(x)から、逆をたどってxを見つけることは極めて困難であるという性質を持つ関数です。一方向性ハッシュ関数にはSHA256、SHA512といったものだけではなく、暗号化関数を使ったメッセージ認証コードなども同様に使えます。たとえば古典的UNIXのパスワード生成にはDES暗号を使っているDES-CBC-MACというメッセージ認証コード法が使われています。&lt;br /&gt;
&lt;br /&gt;
よく「パスワードを暗号化」するという表現を使うので、暗号化するなら、復号もできるだろうと類推してしまいそうになりますが、これは一方向にしか計算できません。&lt;br /&gt;
パスワードを入力し、それを一方向性ハッシュ関数で計算した値を、事前に登録しておいた一方向性ハッシュ関数で計算した値と比較します。たとえばWindowsXPなどで使っていたLMハッシュ(LAN Manager hash)は、この方式です。&lt;br /&gt;
&lt;br /&gt;
生の文字列を持っている先ほどの方法よりは格段に安全性は上がりますが、例えば同じ入力のものは同じ出力値を持ってしまう弱点を持っています。そのため辞書に載っているようなパスワードであれば、事前に処理してハッシュ値辞書を作成することが出来きます。つまり、辞書攻撃には極めて脆弱なパスワードシステムだといえます。&lt;br /&gt;
&lt;br /&gt;
辞書を作るのに膨大な時間がかかると考えるかも知れませんが、英数字8文字のすべての文字の組み合わせのための逆引き辞書を 作るのに秋葉原で手に入る機材レベルで30時間もあれば十分作成できます。しかも[http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/ ophcrack]サイトでは既にWindows XPやVistaのための辞書テーブルが既に用意されており、それを使えば検索成功率99パーセントだそうです。&lt;br /&gt;
&lt;br /&gt;
先ほどの紹介したAdobeの流出したパスワード情報は、このタイプで、さらに悪いことには、ユーザが入力するパスワードのヒント情報も入っており、そこからまず類推可能なパスワードを探し当て、次に同じパスワードを持つユーザをピックアップしてゆくということが出来てしまうという、極めて憂慮すべきシステムでした。&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを見つけるためにはパスワード解析をする必要がある。&lt;br /&gt;
* 欠点: 同じパスワードは同じ出力なので事前に辞書を作ることが可能。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=998</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=998"/>
		<updated>2014-02-11T15:30:03Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* 一方向性ハッシュ関数を導入する */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-1.png|300px|thumb|right|保存されているパスワードは保護されない]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを忘れたときに、パスワードを教えることができる。&lt;br /&gt;
* 欠点: パスワードファイルが流出するとユーザ認証は壊滅的なダメージとなる。&lt;br /&gt;
&lt;br /&gt;
=== 一方向性ハッシュ関数を導入する ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-2.png|300px|thumb|right|一方向性ハッシュ関数のみ導入]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数とは、値xに対しハッシュ関数Hを用いて計算した値H(x)から、逆をたどってxを見つけることは極めて困難であるという性質を持つ関数です。一方向性ハッシュ関数にはSHA256、SHA512といったものだけではなく、暗号化関数を使ったメッセージ認証コードなども同様に使えます。たとえば古典的UNIXのパスワード生成にはDES暗号を使っているDES-CBC-MACというメッセージ認証コード法が使われています。&lt;br /&gt;
&lt;br /&gt;
よく「パスワードを暗号化」するという表現を使うので、暗号化するなら、復号もできるだろうと類推してしまいそうになりますが、これは一方向にしか計算できません。&lt;br /&gt;
パスワードを入力し、それを一方向性ハッシュ関数で計算した値を、事前に登録しておいた一方向性ハッシュ関数で計算した値と比較します。たとえばWindowsXPなどで使っていたLMハッシュ(LAN Manager hash)は、この方式です。&lt;br /&gt;
&lt;br /&gt;
生の文字列を持っている先ほどの方法よりは格段に安全性は上がりますが、例えば同じ入力のものは同じ出力値を持ってしまう弱点を持っています。そのため辞書に載っているようなパスワードであれば、事前に処理してハッシュ値辞書を作成することが出来きます。つまり、辞書攻撃には極めて脆弱なパスワードシステムだといえます。&lt;br /&gt;
&lt;br /&gt;
辞書を作るのに膨大な時間がかかると考えるかも知れませんが、英数字8文字のすべての文字の組み合わせのための逆引き辞書を 作るのに秋葉原で手に入る機材レベルで30時間もあれば十分作成できます。しかも[http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/ ophcrack]サイトでは既にWindows XPやVistaのための辞書テーブルが既に用意されており、それを使えば検索成功率99パーセントだそうです。&lt;br /&gt;
&lt;br /&gt;
先ほどの紹介したAdobeの流出したパスワード情報は、このタイプで、さらに悪いことには、ユーザが入力するパスワードのヒント情報も入っており、そこからまず類推可能なパスワードを探し当て、次に同じパスワードを持つユーザをピックアップしてゆくということが出来てしまうという、極めて憂慮すべきシステムでした。&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを見つけるためにはパスワード解析をする必要がある。&lt;br /&gt;
* 欠点: 同じパスワードは同じ出力なので事前に辞書を作ることが可能。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-2.png&amp;diff=997</id>
		<title>ファイル:Pwd-pic-2.png</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-2.png&amp;diff=997"/>
		<updated>2014-02-11T15:29:01Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=996</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=996"/>
		<updated>2014-02-11T15:27:59Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードを防御なしに管理 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Pwd-pic-1.png|300px|thumb|right|保存されているパスワードは保護されない]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを忘れたときに、パスワードを教えることができる。&lt;br /&gt;
* 欠点: パスワードファイルが流出するとユーザ認証は壊滅的なダメージとなる。&lt;br /&gt;
&lt;br /&gt;
=== 一方向性ハッシュ関数を導入する ===&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数とは、値xに対しハッシュ関数Hを用いて計算した値H(x)から、逆をたどってxを見つけることは極めて困難であるという性質を持つ関数です。一方向性ハッシュ関数にはSHA256、SHA512といったものだけではなく、暗号化関数を使ったメッセージ認証コードなども同様に使えます。たとえば古典的UNIXのパスワード生成にはDES暗号を使っているDES-CBC-MACというメッセージ認証コード法が使われています。&lt;br /&gt;
&lt;br /&gt;
よく「パスワードを暗号化」するという表現を使うので、暗号化するなら、復号もできるだろうと類推してしまいそうになりますが、これは一方向にしか計算できません。&lt;br /&gt;
パスワードを入力し、それを一方向性ハッシュ関数で計算した値を、事前に登録しておいた一方向性ハッシュ関数で計算した値と比較します。たとえばWindowsXPなどで使っていたLMハッシュ(LAN Manager hash)は、この方式です。&lt;br /&gt;
&lt;br /&gt;
生の文字列を持っている先ほどの方法よりは格段に安全性は上がりますが、例えば同じ入力のものは同じ出力値を持ってしまう弱点を持っています。そのため辞書に載っているようなパスワードであれば、事前に処理してハッシュ値辞書を作成することが出来きます。つまり、辞書攻撃には極めて脆弱なパスワードシステムだといえます。&lt;br /&gt;
&lt;br /&gt;
辞書を作るのに膨大な時間がかかると考えるかも知れませんが、英数字8文字のすべての文字の組み合わせのための逆引き辞書を 作るのに秋葉原で手に入る機材レベルで30時間もあれば十分作成できます。しかも[http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/ ophcrack]サイトでは既にWindows XPやVistaのための辞書テーブルが既に用意されており、それを使えば検索成功率99パーセントだそうです。&lt;br /&gt;
&lt;br /&gt;
先ほどの紹介したAdobeの流出したパスワード情報は、このタイプで、さらに悪いことには、ユーザが入力するパスワードのヒント情報も入っており、そこからまず類推可能なパスワードを探し当て、次に同じパスワードを持つユーザをピックアップしてゆくということが出来てしまうという、極めて憂慮すべきシステムでした。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-1.png&amp;diff=995</id>
		<title>ファイル:Pwd-pic-1.png</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Pwd-pic-1.png&amp;diff=995"/>
		<updated>2014-02-11T15:25:52Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=994</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=994"/>
		<updated>2014-02-11T15:24:59Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードを防御なしに管理 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;br /&gt;
&lt;br /&gt;
* 利点: パスワードを忘れたときに、パスワードを教えることができる。&lt;br /&gt;
* 欠点: パスワードファイルが流出するとユーザ認証は壊滅的なダメージとなる。&lt;br /&gt;
&lt;br /&gt;
=== 一方向性ハッシュ関数を導入する ===&lt;br /&gt;
&lt;br /&gt;
一方向性ハッシュ関数とは、値xに対しハッシュ関数Hを用いて計算した値H(x)から、逆をたどってxを見つけることは極めて困難であるという性質を持つ関数です。一方向性ハッシュ関数にはSHA256、SHA512といったものだけではなく、暗号化関数を使ったメッセージ認証コードなども同様に使えます。たとえば古典的UNIXのパスワード生成にはDES暗号を使っているDES-CBC-MACというメッセージ認証コード法が使われています。&lt;br /&gt;
&lt;br /&gt;
よく「パスワードを暗号化」するという表現を使うので、暗号化するなら、復号もできるだろうと類推してしまいそうになりますが、これは一方向にしか計算できません。&lt;br /&gt;
パスワードを入力し、それを一方向性ハッシュ関数で計算した値を、事前に登録しておいた一方向性ハッシュ関数で計算した値と比較します。たとえばWindowsXPなどで使っていたLMハッシュ(LAN Manager hash)は、この方式です。&lt;br /&gt;
&lt;br /&gt;
生の文字列を持っている先ほどの方法よりは格段に安全性は上がりますが、例えば同じ入力のものは同じ出力値を持ってしまう弱点を持っています。そのため辞書に載っているようなパスワードであれば、事前に処理してハッシュ値辞書を作成することが出来きます。つまり、辞書攻撃には極めて脆弱なパスワードシステムだといえます。&lt;br /&gt;
&lt;br /&gt;
辞書を作るのに膨大な時間がかかると考えるかも知れませんが、英数字8文字のすべての文字の組み合わせのための逆引き辞書を 作るのに秋葉原で手に入る機材レベルで30時間もあれば十分作成できます。しかも[http://lasecwww.epfl.ch/~oechslin/projects/ophcrack/ ophcrack]サイトでは既にWindows XPやVistaのための辞書テーブルが既に用意されており、それを使えば検索成功率99パーセントだそうです。&lt;br /&gt;
&lt;br /&gt;
先ほどの紹介したAdobeの流出したパスワード情報は、このタイプで、さらに悪いことには、ユーザが入力するパスワードのヒント情報も入っており、そこからまず類推可能なパスワードを探し当て、次に同じパスワードを持つユーザをピックアップしてゆくということが出来てしまうという、極めて憂慮すべきシステムでした。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=993</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=993"/>
		<updated>2014-02-11T15:23:02Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* はじめに */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードを防御なしに管理 ===&lt;br /&gt;
&lt;br /&gt;
パスワード認証というと、ユーザからの入力の文字列と、既に登録しているパスワードの文字列を突き合わせることだと思っている人も意外といるのではないかと思います。&lt;br /&gt;
簡単に実装することができますが、ただし、このパスワードファイルが外部に流出した時点で、サービスの存続にかかわるレベルで、システム全体のユーザ認証が崩壊します。なぜならば、そのままの形ですべてのパスワードを利用することが出来るからです。&lt;br /&gt;
&lt;br /&gt;
ファイルへのアクセスをコントロールすることで安全性を保っていると理解してしまう人がいるでしょうが、逆をいえば、それだけしか保護をしておらず、情報流出する可能性の前提に立っていません。潜在的に1つのエラーがシステム全体をカタストロフな状態に導く可能性がある脆弱な状態におかれています。&lt;br /&gt;
&lt;br /&gt;
このシステムは、大きな問題をはらんでいるのは、改めて強調しなくとも多くの方には理解されているだろうと思います。その一方で、このようなシステムは、そんなに多くはないだろうと楽観的に考えるかも知れません。でも、パスワードを忘れたときに親切にも元々のパスワードを教えてくれるタイプのシステムは、まわりを見渡せばけっこうあるはずです。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=992</id>
		<title>システムにおけるパスワード管理の概要</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E7%AE%A1%E7%90%86%E3%81%AE%E6%A6%82%E8%A6%81&amp;diff=992"/>
		<updated>2014-02-11T15:22:07Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: ページの作成:「== はじめに ==   パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。  その前に、パスワード...」&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== はじめに == &lt;br /&gt;
&lt;br /&gt;
パスワード管理の方法と、パスワードを入手された時の問題点を整理してみましょう。&lt;br /&gt;
&lt;br /&gt;
その前に、パスワードに123456やpasswordといったものやアカウント名adminでパスワードがadminといったものを使っている「これはひどい」といいたくなるパスワードでは、さしたる事前の準備も必要なく、いくつか試せばいいので、いくらパスワードの管理をシステム側で頑張っても無理です。&lt;br /&gt;
&lt;br /&gt;
これはさすがに、ウカツなパスワードとしか呼びようがありませんが、これはユーザだけが悪いわけではなく、システムがこのようなパスワードを許容すること自体が、システムの欠陥だと私は思います。最近のシステムではユーザがパスワードを選ぶ際に一定の強度を満たしていない場合は警告を出したり受け付けないといったものも多く、ずいぶんと状況は改善されつつあります。&lt;br /&gt;
&lt;br /&gt;
ある程度の複雑さをもったパスワードに関しては、これはパスワード管理ファイルをサイトから流出させ、専用のコンピュータを用意してパスワードを見つける処理を行うというのが前提となります。 2012年に発生した45万件のパスワードを流出させた[http://www.zdnet.com/the-top-10-passwords-from-the-yahoo-hack-is-yours-one-of-them-7000000815/ Yahooのケース]、2013年に発生した3,800万件のパスワードを流出させた[http://www.zdnet.com/adobe-admits-2-9m-customer-accounts-have-been-compromised-7000021546/ Adobeのケース]などがこれにあたります。&lt;br /&gt;
&lt;br /&gt;
以下に3つのパスワード管理のパターンを説明し、次に、どのような方法でパスワードを見つけていくかの説明を加えます。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=991</id>
		<title>パスワードファイル</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&amp;diff=991"/>
		<updated>2014-02-11T15:18:38Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* パスワードファイル /etc/passwd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
パスワードシステムについて基礎的知識である[[システムにおけるパスワード管理の概要]]を先に読んでから本文を読むことをお薦めします。&lt;br /&gt;
&lt;br /&gt;
== パスワードファイル /etc/passwd == &lt;br /&gt;
&lt;br /&gt;
ユーザIDとアカウント名を対応させているのがパスワードファイル&lt;br /&gt;
/etc/passwdです。パスワードファイルのフォーマットは次の通りです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* パスワードエントリのフォーマットのフィールドは&amp;quot;:&amp;quot;で区切られる&lt;br /&gt;
* アカウント名 :   ログイン時に使用するアカウント名&lt;br /&gt;
* パスワード : パスワードをハッシュ値に置き換えたもの&lt;br /&gt;
* ユーザID :  ユーザを認識するための数値&lt;br /&gt;
* グループID : グループを認識するための数値&lt;br /&gt;
* コメントフィールド([[GECOSフィールド]]) : 名前等の情報を記述するフィールド&lt;br /&gt;
* ホームディレクトリ : ホームディレクトリ&lt;br /&gt;
* シェルパス :  利用するシェルのパス、もしくはシェルに相当するコマンド&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /etc/passwd の エントリー例&lt;br /&gt;
 hironobu:x:1825:2000:Hironobu SUZUKI,,,:/home/hironobu:/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このエントリー例は実際運用しているシステムのパスワードファイルから抜き出したものです。&lt;br /&gt;
パスワードのフィールドは&amp;quot;x&amp;quot;が入っています。&lt;br /&gt;
これは利用しているシステムがシャドーパスワードを導入しているからです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
元々のパスワードファイルには2つの情報が入っています。&lt;br /&gt;
一つは公開して誰でも知って良い情報、もう一つは知られてはいけない情報です。&lt;br /&gt;
その知られてはいけない情報とはパスワードの情報です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの生成 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろんこのパスワードは、すでに一方向性ハッシュ関数によって撹拌されている値となってなっています。&lt;br /&gt;
したがって、パスワードファイルの中にあるすでに撹拌されているパスワードのハッシュ値だけ持っていても、&lt;br /&gt;
そこから元のパスワードを逆算することはできません。&lt;br /&gt;
総当たりで見つける方式しか使えません。&lt;br /&gt;
ただし、このままでは同じパスワード入力が同じハッシュ値になってしまいます。&lt;br /&gt;
パスワードのパターンを事前に計算し、逆引きのテーブルを用意することが可能となってしまします。&lt;br /&gt;
そのため、同じパスワード入力が同じハッシュ値にならないようにSalt（塩）と呼ぶランダムな初期値を加えます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在のGNU/Linuxではディストリビューションにより、オリジナルのUNIXが使っていたパスワードのメカニズムをベースとしたパスワード認証の方法を用いているものと、Linux-PAMと呼ばれる包括的なパスワード認証のためのフレームワークを用いているものがあります。ただし、メジャーなディストリビューションはLinux-PAMを採用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
UNIX オリジナルの方法では暗号化するためのDESを用いたメッセージ認証コード方式DES-CBC-MAC&lt;br /&gt;
&amp;lt;ref&amp;gt; CBC-MACに関しては[http://en.wikipedia.org/wiki/CBC-MAC wikipedia(英語版)]を参照のこと。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
を一方向性ハッシュ関数として利用してます。&lt;br /&gt;
&amp;lt;ref&amp;gt;このDES-CBC-MACの暗号学的安全性に関しての議論は http://www.cs.berkeley.edu/~daw/talks/crypt3-asia00-slides.ps‎ を参照のこと。&amp;lt;/ref&amp;gt;&lt;br /&gt;
glibcで実装されているパスワード認証のためのアルゴリズムでは、DES-CBC-MACではなく一方向性ハッシュ関数としてMD5、SHA1やSHA-256を使います。&lt;br /&gt;
オリジナルの方法では、DESを使う場合は25回繰り返して計算します。glibcでは一方向性ハッシュ関数を使う場合は最低1000回繰り返して計算します。&lt;br /&gt;
&amp;lt;ref&amp;gt;これは計算負荷をあげているものですが、これはDESを使っていた時は乱雑さとして有効となるビット数が少なかったためで、一方向性ハッシュ関数の場合、暗号学的には繰り返して計算負荷をあげるよりもランダムなパスワード文字数を増やす方法の方が優れています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[ファイル:Password-hash.png|450px|thumb|center|パスワードの生成]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; 捕捉 : 図中では「暗号化したパスワード」という表現を使っていますが、本来は復号することができないので暗号化という言葉は暗号の考え方からして適切ではありません。しかし慣用的に「暗号化したパスワード」という言葉を使うので、ここではあえて使っています。正しくは「パスワードのハッシュ値」です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== パスワードの保管 ===&lt;br /&gt;
&lt;br /&gt;
オリジナルのUNIXではパスワードファイル/etc/passwdの中にユーザ名やユーザIDと共にパスワードのハッシュ値が格納されており、誰でも参照することが可能でした。&lt;br /&gt;
攻撃側は、パスワード候補を用意し、その出力をパスワードファイルの中にあるパスワードのハッシュ値と比較することによって効率的にパスワードを見つけることが可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
そこで変換後のパスワードを一般ユーザが直接は参照できない別ファイルに取っておき、認証するコマンドやメンテナンスのコマンドのみがアクセスできるようにしました。これがシャドーパスワードの仕組みです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $ ls -l  /etc/shadow&lt;br /&gt;
 -rw-r-----    1 root     shadow        789 Oct 22  2003 /etc/shadow&lt;br /&gt;
 $ ls -l /usr/bin/passwd&lt;br /&gt;
 -rwsr-xr-x    1 root     root        24616 Nov  3 04:56 /usr/bin/passwd&lt;br /&gt;
 $ ls -l /usr/bin | grep shadow&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      32584 Nov  3 04:56 chage&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow      15976 Nov  3 04:56 expiry&lt;br /&gt;
 -rwxr-sr-x    1 root     shadow       6628 Jun 28 05:20 kcheckpass&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=990</id>
		<title>OS誕生からLinuxまでの歴史</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=990"/>
		<updated>2014-02-11T14:51:59Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* なぜLinuxがこれだけ広まったか */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; 注意:   本文は1994年にソフトウェアデザイン誌に連載していたOS入門の原稿をベースにしています。ですからこの文章は1994年当時の状況をベースにしてかかれています。現在ではGNU/Linuxをシステム全体、Linuxをカーネルと区別しますが、本文中ではGNU/LinuxシステムをLinuxと呼んでいます。これは1994年当時の状況をそのまま残しているためです。&lt;br /&gt;
&lt;br /&gt;
== OS誕生 ==&lt;br /&gt;
&lt;br /&gt;
OSの歴史は、コンピュータが産まれてから20年ほど経った1960年代中期からスタートします。1960年中期にIBMが開発した商用コンピュータ・システム IBM System/360は、本格的なOS (OS/360)を搭載していました。それ以前のコンピュータ・システムは、部分的にはOSとしての機能を満たしたものがありますが、OS として機能及び概念が確立はしていません。IBM System/360が始めてOSの機能と概念を確立させました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:60年代のアメリカは公民権運動、ベトナム反戦運動、ウッドストックなどを後世に残すと同時にOSも後世に残したのでした。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
それまでのIBMのコンピュータは、そのハードウェアの製品ライン毎にソフトウェアが必要で、各々の製品ラインの違うコンピュータ・システムには、ソフトウェアの互換性がありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これは、私たちが現在、アプリケーション・プログラムと呼んでいるような、ある特定目的のために動作するソフトウェアが、OSというクッションを持たず、システム全体のソフトウェアと密接に絡み合っていたからです。つまり、アプリケーションがリソースを管理しなければならなかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、事務には事務専用システムおよびソフトウェアを、科学計算には科学技術専用システムおよびソフトウェアを用意していました。また、同じ専用システムでも最大メモリやプロセッサのスピード、IOデバイスの数などのシステムの構成が違えば、それだけでソフトウェアの互換性は保てませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OSを導入することによってリソース管理をアプリケーションから切り離します。以前のシステム構成に特化したソフトウェアしか動かないコンピュータ・システムの世界から今度は色々なソフトウェアを動かすことができる、汎用なコンピュータ・システム世界に変化していきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後System 360は、370、4300、3080、3090といったIBMシリーズに続き継がれます。それらのシステムは『汎用機』と呼ばれるコンピュータ・システムの代表です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MULTICSも忘れちゃいけない ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
同世代で、忘れてはいけないのがタイムシアリング・システムと呼ばれる処理方法を用いたCTSSと、それに引き続く今日のOSの原型でともいえるMULTICS&amp;lt;ref&amp;gt;http://www.multicians.org/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://web.mit.edu/multics-history/&amp;lt;/ref&amp;gt; です。CTSSは1963年にMITで使われていた原始的なOSでIBM System / 360よりも古いIBM 7094というシステム上で実現されています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
タイムシアリング・システムとは、複数のユーザが実行している各々のプログラムの処理をある一定時間毎(あるいは入出力が発生しI/O待ちになった場合)に切替えて、各々のユーザがあたかも同時に1つのコンピュータを使っているかのように見せかせるシステムです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSのプログラムの切替えは非常に単純です。ユーザの動かしているプログラムをまるごと主記憶装置から補助記憶装置に追い出し、次に動かすプログラムをロードしてくるというものでした&amp;lt;ref&amp;gt;これは、まだマルチプログラミングまで進化していません。混同しやすいので要注意のこと。 &amp;lt;/ref&amp;gt;。複数のプログラムを切替える能力はありましたが、リソース管理という点では、OSと呼ぶには十分ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSがうまくいったので1965年にMITとAT&amp;amp;Tベル研究所とジェネラル・エレクトリック社&lt;br /&gt;
&amp;lt;ref&amp;gt;当時のジェネラル・エレクトリックは大手コンピュータ・ メーカーであった。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
が、共同で、現在のOSと比較しても見劣りしないような数々のスペックを持った、多目的なOSを作ろうとしました。それがMULTICSです。現在、私たちがOSの機能と呼んでいる数々の機能はMULTICSで現れたものです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
がしかし、1965年当時それらを実現するにはそもそもハードウェアの能力が足りませんし&lt;br /&gt;
&amp;lt;ref&amp;gt;あまりに古くて、正確な資料がないのですが、MULTICSのターゲッ ト・ハードウェアだったGE-645の処理パワーは、i386マシンぐらいだっ たようです。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
、それだけのアイデアを完全に実現するだけのソフトウェア技術もまだ存在しないという、かなり無謀なプロジェクトでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
途中でベル研がプロジェクトから抜け、ジェネラル・エレクトリック社がコンピュータ市場自体から撤退しました。MULTICSはその後、MIT内部と数十のサイトで利用されました。おどろくことに細々とまだ存在しているのですが、多くの人の記憶からは既に消え去ってしまっています。しかしMULTICSで考えられた数々のアイデア、例えば、仮想記憶、プロセスの概念、プロテクションの概念、他にも多くの重要なアイデアが、今日のOSの中に生きています。&lt;br /&gt;
&lt;br /&gt;
== UNIX誕生! ==&lt;br /&gt;
&lt;br /&gt;
MULTICSプロジェクトにはベル研のKen ThompsonとDennis Ritchieがいました。彼らはベル研に戻り、廃棄同然のDEC PDP-7という小型のコンピュータの上に OSを書きます&lt;br /&gt;
&amp;lt;ref&amp;gt;Ken ThompsonはMultics上で動いていたスペースゲームをベル研に持ち帰ってきたはいいがのですが、遊ぶのに適当なマシンがなかったので放置されていたDEC PDP-7を使い始めたと言われています。 &amp;lt;/ref&amp;gt;。&lt;br /&gt;
1968年のことです。それはMULTICSのような大きなスペックを持つOSではなく、もっとコンパクトなOSなので、彼らはMULTICSをもじってUNICSと命名します。後にUNICSはUNIXと改名し、そのままの名前が定着します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
たまに『UNIXはMULTICSの否定である』とか、その反対に『MULTICSの後継がUNIXである』とか書いてある説明を見かけます。これは正しくもあり間違ってもいます。思い出して欲しいのですが今日的なOSの基礎となる沢山のアイデアが導入されているのがMULTICSです。つまり今日的なOSの多くのアイデアそのものはMULTICSを源流にもちます。ただし、MULTICSは、たくさんのアイデアをつめこんだためにシステムが肥大化しプロジェクト自体は失敗に終っています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろん今日的OSであるUNIXにはMULTICSの数々のアイデアが採り入れています。しかしながらUNIXはMULTICSの最大の特徴(かつ致命的な問題となっていた)である多目的で複雑である部分を否定しています。言うまでもないですがUNIXはMULTICSをもう一度作ろうとしたものでもありません。もしUNIXと MULTICSの関係性を表現するとするならば「MULTICSの失敗を教訓にしたOS」と言えるでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみにMULTICSが複雑で大きなOSでUNIXがシンプルで小さいOSだったというのは初期のUNIXを指していうことであって、現在の基準では当てはまりません。その後のUNIXは肥大化の道を歩んでいます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在、UNIXを作ったKen ThompsonやDennis Ritchieといったベル研の人達は既にUNIXは利用せずPlan9という異なるタイプの新しいOSを開発し、利用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BSDへの分岐 ===&lt;br /&gt;
&lt;br /&gt;
PDP-7の上で産声をあげたUNIXは、まだ正式なバージョンが付けられていません。ですから、正確にはまだUNIXではないとしてカッコつきで(PDP-7)として分類している本もあります。First Editionと呼ばれるのは、PDP-11/20上で動き始めたUNIXからです。それまでアセンブラで書かれていたUNIXがCで書き換えられFourth Editionとなります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
どうしてEditionという言葉を使っているかというと、ベル研究でのバージョンはマニュアルのバージョンで区別しているのだそうです。なぜなら、いつもUNIXのソースコードに手を入れていたため常にソースコードが変わっていてソースコードでのバージョン管理は不可能だったためだそうです。唯一のバージョンコントロールというのはマニュアルだったというわけです。一般には Sixth Edition と言わずにV6 (Version 6)という具合にVersion を使う方を目にする方が多いかも知れません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1976年のSixth EditionをベースとしてUNIXはPWB3.0とBSDが分岐します。PWB はProgrammer Work Banechの略です。この流れは、後にSystem IIIへつながります。BSDはBerkeley Software Distributionsの略で、UCB (University of California Berkeley)のCSRG (Computer System Research Group)で作られていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1BSDと呼ばれる、最初のバージョンはPDP-11上で動いていました。これが2BSD になり2.xBSDになります(xは1,2,3といった数字が入ります)。2.xはPDP-11をプラットフォームにしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方、2BSDからVAXで動く3BSDに分岐し、後に4.0BSDになります。以降、 4.1BSD、4.2BSD、4.3BSD、4.4BSDとなります。もともとのUNIXのプログラムワークベンチとしての使い勝手の良さはもとより、CSRGで加えられた仮想記憶の能力、高速なファイルシステム、TCP/IPの実装プラットフォーム&lt;br /&gt;
&amp;lt;ref&amp;gt;これらの研究は国防総省傘下の研究組織であるDARPAからの研究資金の援助で開発されています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
などの数々の最新技術の投入によるアドバンテージにより、BSDは研究所や大学を中心に急速に広がります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BSD自体は自由にコピーできるのですがベル研で作られたコードが含まれていますので、UNIXを動かすにはAT&amp;amp;Tへのライセンス費用が発生しました。この1980年代前半、AT&amp;amp;Tへのライセンス費用は研究施設では配布実費程度($800)、商用サイトでは($43000)でした。しかしながら高額な科学計算用コンピュータ VAXを所有している所では、この料金は大した問題ではありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最後のリリースが4.4BSDです。ここでCSRGでのBSDの研究開発は終了します。この頃になるとBSDは技術的に研究と呼べる部分が少なくなってきたのは確かですが、それ以上にAT&amp;amp;Tとライセンセンス問題がこじれて研究者の中のモチベーションが保てなくなったのではと筆者は考えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1992年1月、UNIXライセンスを管理するAT&amp;amp;Tの子会社URL社が4.3BSD NET/2をベースに商用BSDを作ったBSDI社を相手に製品出荷差し止め訴訟をおこします。それが判事に却下されたので、今度はUCBとBSDIの両方を相手に製品出荷差し止め訴訟を繰り広げます。また裁判途中でURL社がAT&amp;amp;Tからノベル社に買収されたりとったこともあって、なかなか訴訟も、和解案も進みません。やっとのこと1994年の1月に解決します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
貴重なCSRGメンバーの労力が、このバカバカしい訴訟で浪費されたといっても過言ではありません。1995年6月の4.4BSD-Lite Release 2を最後にCSRGは解散します。もちろん表向きは「新しい時代、新しい人達へのバトンタッチ」ですが、実際は、この世にもバカバカしい訴訟で燃え尽きたといっても過言ではないでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== まぼろしのSystem IV ===&lt;br /&gt;
&lt;br /&gt;
Sixth Editionから分岐してPWBが作られます。ベル研にはリサーチとは関係のないUNIXをソフトウエアの開発のために使おうというグループがあって、そこがUNIXをプログラマーのための道具として使うためのに改良しました。 1979年のことです。これがPWB/UNIX 1.0として研究所の外部にもライセンスされるようになります。PWBから分岐して1982年にSystem IIIが作られます。PWB はその後何度かバージョンがアップされますが、1984年にSystem V Relase 2 に統合されます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般市場向けに販売された最初のAT&amp;amp;TブランドUNIXがSystem IIIです。筆者は1983,4年頃にCPUにMC68000を使ったNCR社製マシンでSystem IIIを使った経験があります。GUIもネットワークもありませんが、使い心地は今のLinuxや FreeBSDなとどおなじです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後、後継バージョンとしてSystem Vが出てきます。System IVという名前は幻になっています。実は発売寸前までSystem IVは進んでいたのですが、その内容のひどさにUNIXを生み出したベル研のメンバーは激怒し「今後一切関係はない」といって、マニュアルなどすべてから名前の削除を求めたそうです。それでSystem IVは余儀なく大量の変更が発生し、発売できなくなりました。&lt;br /&gt;
世界最大のUNIXベンダ マイクロソフト&lt;br /&gt;
1980年代前半、世界で最もUNIXの出荷が多かったのは実はマイクロソフト社でした。その頃、SCO (Santa Cruz Operation)社と共同でマイクロソフトは XENIXというIntel 8086上で動くUNIXのバージョンを作成していました。その頃、他はVAXのような大きなマシンばかりでしたので、出荷数から見るとXENIX の数が最大のように見えるのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UNIXの人口爆発 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1985年から1995年までの10年間は、色々なバージョンのUNIXが増殖した時代といえるでしょう。UNIXの流行とともに、色々な会社が色々なUNIXを実装して売り出していきます。日本でも通産省の大失敗プロジェクトであるΣプロジェクトが行われていた頃です。色々な会社のUNIXマシンを製造し、少しでも自分のシェアを独占しようと奔走していたころです。このような背景があってAT&amp;amp;Tが BSDIの邪魔をし、その邪魔ができないと見るやいなや、UCBも含めて訴えていた頃です。なんと情けない時代でしょう。そんなAT&amp;amp;Tや他の企業のドタバタも 95年以降は鎮静化します。理由は簡単です。Windows がディスクトップUNIXのシェアを食い、Windows NTがサーバのシェアを食ったからです。&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== Linuxの誕生前夜 ===&lt;br /&gt;
&lt;br /&gt;
Linuxが生まれる1991年前夜、既にOSのトレンドは新しい世界に入っていました。それはマイクロカーネル技術を使ったOSです。マイクロカーネルのポイントは提供するサービスと、最小限のコントロールのみしか残していない小さなカーネルから出来上がっている所です。 最小限のコントロールとは、メモリ、タスク、プロセス間通信、(最小限必要なハードウェアの)デバイスドライバなどです。ファイルシステム、ネットワーク機能、プロセス管理、仮想記憶管理などなどはサーバプログラムとして動作しています。それまでのUNIXカーネルはOSが果たすべき機能はすべて1つのカーネル内で行われているモノリシック・カーネルとよばれるタイプでした。&lt;br /&gt;
&lt;br /&gt;
=== Linux誕生 ===&lt;br /&gt;
&lt;br /&gt;
フィンランドの大学生 Linus Torvaldsが1991年にLinux version 0.02をリリースしました。1994年にLinux 1.0をリリースしました。 Linuxを一躍有名にしたのは、使い勝手でもなく、新規性でもなく、処理能力でもありません。1992年にあったネットニュース上での大喧嘩でした。&lt;br /&gt;
&lt;br /&gt;
=== Torvalds vs. Tanenbaum ===&lt;br /&gt;
&lt;br /&gt;
1992年にcomp.os.minixで行われたLinuxの生みの親Torvaldsとオペーレーティングシステム研究者の大御所Tanenbaum教授との論争です。&amp;quot;Linux is obsolete&amp;quot;というタイトルで書いた教授の記事の趣旨は「90年代に70年代の技術であるモノリシックカーネルであること」「ポータビリティに欠けること」の2点です。これは&lt;br /&gt;
オープンソフトウェア&amp;lt;ref&amp;gt;http://www.oreilly.com/catalog/opensources/book/appa.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
(オライリージャパン)に収録されいるので、みなさんも是非1度目を通されることをお勧めします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
正直に筆者の意見をいうと教授の言い分は正しいです。ただし、その時代遅れな構造こそがLinuxに味方しました。誰もが知っている時代遅れの枯れた技術を使ったからこそLinuxのカーネルをハックできる人口が多く、そしてまた実現方針も建てやすく、早く簡単に作れたといえます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
マイクロカーネルはモノリシック・カーネルよりオーバーヘッドが発生し処理効率が落ちると言われていますが、これはLinuxができてきた91年であっても古い話です。80年代後半ごろマイクロカーネルの草分けであるMachはのオーバーヘッドの問題はありましたが90年に入るとマイクロカーネル技術は既に、その問題を克服しています。いまだにこの「マイクロカーネルは遅い」という神話を信じている人がいて驚くことがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
またマイクロカーネルの提供する「粒度」というモノリシックカーネルでは存在しえない概念も入っています。ここでの粒度とはマイクロカーネルが実行する処理のサイズだと考えてください。マイクロカーネルはこの粒度という処理を分散する考え方を導入しているためたとえばCPUを何十、何百、何千個搭載した並行処理マシン上で1つ1つのCPUでマイクロカーネルが各々動き、個々のタスクが割り当て、さらに全体としてプロセスを管理するプロセス管理サーバがあるような実装が可能になります。たぶん、このようなことをしたいために日立の並列スーパーコンピュータ SR8000シリーズ の OS は Machをベースとしたマイクロカーネルで実装しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows NTもマイクロカーネルで作られているので同じような効果がでます。たとえばCOMPAQ ProLiant 8500というマルチプロセッサマシンを多数と Microsoft Windows 2000 Advanced Server と Microsoft SQL Server 2000 Enterpriseの組合せでデータベースのベンチマークであるTPC-Cの最高レコードを何度か書き換えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2とか4程度のプロセッサ数ならモノリシックカーネルでも使えるでしょうが、このようなプロセッサ数が多いマルチプロセッサマシンでは上手に動けません(このような劇的なパフォーマンスが出る実装はまだ存在していません)。&lt;br /&gt;
&lt;br /&gt;
== LinuxはUNIXではない ==&lt;br /&gt;
&lt;br /&gt;
こう書くと混乱する人がいるかも知れません。まずLinuxはUNIXではありません。BSDにしても、他の多くのUNIXベンダのOSにしても、前身となるUNIXシステムがあるものがほとんどです。その前身をたどっていくと、最後はベル研の UNIXにたどり着きます。Linuxは、その流れから完全に独立しています。現在のLinuxの原点は、今や伝説ともなったLinus Torvaldsというフィンランドの1 大学生が386CPUベースのPC上で勉強のために作り始めたものです。それ以前をひきついでいません。LinuxはLinuxから出発しているのです。つまり元祖なのです。これは、かなりユニークなポジションにいます。たとえばThe Design and Implementation of the 4.4BSD Operating SystemのHistory of the UNIX Systemの章にあるUNIXの家系図を見ると、前身がないOSはPlan9とLinuxしかありません。 家系図の解釈にはいろいろな流儀があり、たとえばPlan9がUNIX V8から分岐したとか、Linuxがminixから分岐したと表現しているものがあります。しかし、影響を受けたというならまたしも、これらのあいだではソースコードの流用はありません。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはUNIX互換ではない ===&lt;br /&gt;
&lt;br /&gt;
LinuxはUNIX互換として作られたわけではなくPOSIX 1003.1仕様のOSです。 POSIX 1003.1とはポータブルOSの互換性を保つための規格です。POSIX 1003.1 はUNIXを参考にして作られていますがUNIXの規格ではありません。よって POSIX 1003.1準拠のOSであるLinuxはUNIX互換ではないということです。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはLinuxではない ===&lt;br /&gt;
&lt;br /&gt;
システムはカーネルだけあっても、何もサービスはできません。サービスを行うためのソフトウェア環境が揃って始めてシステムとなります。その取り巻く環境をミドルウェアと呼ぶ場合もありますが、ここではもっと広い意味でユーザにサービスを提供する総体としてシステムと呼びます。Linuxはカーネルです。そのカーネル上でサービスを提供するための数々のソフトウエアはフリーソフトウェアであるGNUが使われています。よってシステムとして呼ぶ場合は GNU/Linuxと呼ぶのが正しい呼び方です。&lt;br /&gt;
&lt;br /&gt;
===  Linuxは新しいOSなのか ===&lt;br /&gt;
&lt;br /&gt;
誕生した時期は「新しい」と言えますが、その中身の構造は非常に「古典的」です。それはTanenbaumがLinuxを切捨てた通りです。ではLinuxの目標は何なのでしょうか?それは「POSIX準拠した本格的な機能を持ったフリーのOSを作ること」だと言えます。技術的野心に燃えて新しいことをするのではなく、自分達が自由に使えるOSを作るということが明確だったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Torvaldsは最初は、そんなに目標が明確だったわけではなかったと思います。しかし、Torvalds vs. Tanenbaumの論争の中でLinuxの方向性は決っていきます。それは完全にフリーソフトウェアであること、将来の発展よりまず現在のマシン上で十分に動かせることです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
フリーソフトウェア運動の指導者リチャード・ストールマンがGNUプロジェクトの性質に対してこういったのを筆者は聞いたことがあります。「GNUソフトウェアはわくわくするような新しいものを研究し画期的なソフトウェアを生みだすためのプロジェクトではない。ソフトウェアをフリーなものに置き換えるむしろ後追いの地味なプロジェクトだ」&lt;br /&gt;
&lt;br /&gt;
=== なぜLinuxがこれだけ広まったか ===&lt;br /&gt;
&lt;br /&gt;
Linuxが現れた頃、既に同様にフリーである386BSDがありました。しかしLinux の開発の方が一歩リードしていたようです。FSFの機関誌であったGNUダイジェストのバックログをおってみるとよくわかります。386BSDとLinuxがGNUダイジェスト(GNU&#039;s Bulletin)に紹介されるのは、1992年6月発行の13号です。&amp;lt;ref&amp;gt; GNU&#039;s Bulletinは次のURLから入手できます。ftp://ftp.sra.co.jp/pub/gnu/sra/Bull-j/ アクセス出来ない場合はコピー版を参照ください。 http://uc2.h2np.net/misc/bull13j.txt&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNUダイジェスト1992年6月号から引用してみましょう。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* Linux (386マシン用のフリーなUnixシステム)&lt;br /&gt;
:Linux (Linus Torvalds にちなんで名前が付けられた) は、フリーな Unix シス テムのクーロンであり、System V や POSIX の機能のサブセットを実現する。 Linux はまったく最初から作成され、カーネル内には独占的なコードを含まない。 非常に多くのユーティリティやライブラリは、GNU ソフトウェアを使っている。 Linux は 386/486 AT バスマシンでのみ動作する。Intel 386 以外への移植は非 常に困難であろう。カーネルで広範囲に、386 メモリ管理システムやタスク・プ リミティブを使っているからである。Linux は次のサイトから anonymous FTP で入手可能である。`tsx-11.mit.edu:/pub/linux&#039; (アメリカ)、 `nic.funet.fi:/pub/OS/Linux&#039; (ヨーロッパ)。 Linus に関して討論する `comp.os.linux&#039; というニュース・グループがあ る。メイリング・リストに関する問い合わせは `linux-activists-request@niksula.hut.fi&#039; まで。&lt;br /&gt;
&lt;br /&gt;
* フリーな 386 BSD&lt;br /&gt;
:経験のあるハッカーは、William F. Jolitz らによって移植された BSD Unix の 386 へ移植したバージョンのアルファ・テストに興味を抱くかもしれない。この カーネルは AT&amp;amp;T コードを含まないフリーなもので、自由に再配布可能である。 詳細な情報は `sokol@reyes.stanford.edu&#039; から入手可能である。初 期のバージョンは安定していないので、あるシステムではブート時に問題が発生 する点に注意されたい。&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ここからわかるのは、386BSDよりもLinuxの方が安定して動作していることと、既にftpサーバが用意されていて、誰でも容易に入手できる体制がアナウンスされていたことです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この文章からもLinuxはIntel CPUアーキテクチャーにべっとり依存していたことがわかります。この頃のUNIXユーザはパワーのないPCアーキテクチャーのマシン、いわゆるパソコンなど使わず、SUNやVAXといったワークステーションを使っていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
教科書通りの考え方だと単一アーキテクチャーしか使えないOSかつ、パワーないCPU上でしか動かないOSなので魅力がなさそうに見えます。ところが、実際は既にたくさんのPCが世の中に存在していて、かつ、その後のウインテルと揶揄されるWindowsとIntel CPUの組合せでIntel CPUの能力が格段に発達しました。その時流にLinuxはちょうど乗っかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
386BSDは4.3BSD NET/2からブランチしています。ここが利用者を躊躇させる1 つの要因になったようにみえます。既に本家4.3BSD NET/2は4.4BSDへアップするための作業が進んでいました。その後、386BSDはFreeBSDとNetBSDという2つにカーネルが分岐してしまいます。また本家4.4BSD自体がIntel CPUをサポートする予定です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このような状況でユーザはどれがステーブルなBSDであるかを選択できるでしょうか。筆者なら386BSD(FreeBSDやNetBSD)を選択しません。4.4BSDまで待ちます。一方で、今、手元にあるPCでフリーのUNIXを使いたいと思ったら? 筆者なら将来のマップが見えない386BSDよりもLinuxを選びます。筆者の目からみれば、出発点で技術的に不利と思われていたLinuxですが、今振り返ると広がるべくして広がったように見えます。&lt;br /&gt;
&lt;br /&gt;
== 1994年以降 ==&lt;br /&gt;
&lt;br /&gt;
1994年以降のLinuxの繁栄に関しては筆者よりもきっとSoftwareDesignの読者のみなさんの方が色々な情報を知っていると思います。ではLinuxの現代史は、また別の機会に。&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=989</id>
		<title>OS誕生からLinuxまでの歴史</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=989"/>
		<updated>2014-02-11T14:43:11Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* なぜLinuxがこれだけ広まったか */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; 注意:   本文は1994年にソフトウェアデザイン誌に連載していたOS入門の原稿をベースにしています。ですからこの文章は1994年当時の状況をベースにしてかかれています。現在ではGNU/Linuxをシステム全体、Linuxをカーネルと区別しますが、本文中ではGNU/LinuxシステムをLinuxと呼んでいます。これは1994年当時の状況をそのまま残しているためです。&lt;br /&gt;
&lt;br /&gt;
== OS誕生 ==&lt;br /&gt;
&lt;br /&gt;
OSの歴史は、コンピュータが産まれてから20年ほど経った1960年代中期からスタートします。1960年中期にIBMが開発した商用コンピュータ・システム IBM System/360は、本格的なOS (OS/360)を搭載していました。それ以前のコンピュータ・システムは、部分的にはOSとしての機能を満たしたものがありますが、OS として機能及び概念が確立はしていません。IBM System/360が始めてOSの機能と概念を確立させました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:60年代のアメリカは公民権運動、ベトナム反戦運動、ウッドストックなどを後世に残すと同時にOSも後世に残したのでした。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
それまでのIBMのコンピュータは、そのハードウェアの製品ライン毎にソフトウェアが必要で、各々の製品ラインの違うコンピュータ・システムには、ソフトウェアの互換性がありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これは、私たちが現在、アプリケーション・プログラムと呼んでいるような、ある特定目的のために動作するソフトウェアが、OSというクッションを持たず、システム全体のソフトウェアと密接に絡み合っていたからです。つまり、アプリケーションがリソースを管理しなければならなかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、事務には事務専用システムおよびソフトウェアを、科学計算には科学技術専用システムおよびソフトウェアを用意していました。また、同じ専用システムでも最大メモリやプロセッサのスピード、IOデバイスの数などのシステムの構成が違えば、それだけでソフトウェアの互換性は保てませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OSを導入することによってリソース管理をアプリケーションから切り離します。以前のシステム構成に特化したソフトウェアしか動かないコンピュータ・システムの世界から今度は色々なソフトウェアを動かすことができる、汎用なコンピュータ・システム世界に変化していきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後System 360は、370、4300、3080、3090といったIBMシリーズに続き継がれます。それらのシステムは『汎用機』と呼ばれるコンピュータ・システムの代表です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MULTICSも忘れちゃいけない ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
同世代で、忘れてはいけないのがタイムシアリング・システムと呼ばれる処理方法を用いたCTSSと、それに引き続く今日のOSの原型でともいえるMULTICS&amp;lt;ref&amp;gt;http://www.multicians.org/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://web.mit.edu/multics-history/&amp;lt;/ref&amp;gt; です。CTSSは1963年にMITで使われていた原始的なOSでIBM System / 360よりも古いIBM 7094というシステム上で実現されています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
タイムシアリング・システムとは、複数のユーザが実行している各々のプログラムの処理をある一定時間毎(あるいは入出力が発生しI/O待ちになった場合)に切替えて、各々のユーザがあたかも同時に1つのコンピュータを使っているかのように見せかせるシステムです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSのプログラムの切替えは非常に単純です。ユーザの動かしているプログラムをまるごと主記憶装置から補助記憶装置に追い出し、次に動かすプログラムをロードしてくるというものでした&amp;lt;ref&amp;gt;これは、まだマルチプログラミングまで進化していません。混同しやすいので要注意のこと。 &amp;lt;/ref&amp;gt;。複数のプログラムを切替える能力はありましたが、リソース管理という点では、OSと呼ぶには十分ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSがうまくいったので1965年にMITとAT&amp;amp;Tベル研究所とジェネラル・エレクトリック社&lt;br /&gt;
&amp;lt;ref&amp;gt;当時のジェネラル・エレクトリックは大手コンピュータ・ メーカーであった。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
が、共同で、現在のOSと比較しても見劣りしないような数々のスペックを持った、多目的なOSを作ろうとしました。それがMULTICSです。現在、私たちがOSの機能と呼んでいる数々の機能はMULTICSで現れたものです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
がしかし、1965年当時それらを実現するにはそもそもハードウェアの能力が足りませんし&lt;br /&gt;
&amp;lt;ref&amp;gt;あまりに古くて、正確な資料がないのですが、MULTICSのターゲッ ト・ハードウェアだったGE-645の処理パワーは、i386マシンぐらいだっ たようです。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
、それだけのアイデアを完全に実現するだけのソフトウェア技術もまだ存在しないという、かなり無謀なプロジェクトでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
途中でベル研がプロジェクトから抜け、ジェネラル・エレクトリック社がコンピュータ市場自体から撤退しました。MULTICSはその後、MIT内部と数十のサイトで利用されました。おどろくことに細々とまだ存在しているのですが、多くの人の記憶からは既に消え去ってしまっています。しかしMULTICSで考えられた数々のアイデア、例えば、仮想記憶、プロセスの概念、プロテクションの概念、他にも多くの重要なアイデアが、今日のOSの中に生きています。&lt;br /&gt;
&lt;br /&gt;
== UNIX誕生! ==&lt;br /&gt;
&lt;br /&gt;
MULTICSプロジェクトにはベル研のKen ThompsonとDennis Ritchieがいました。彼らはベル研に戻り、廃棄同然のDEC PDP-7という小型のコンピュータの上に OSを書きます&lt;br /&gt;
&amp;lt;ref&amp;gt;Ken ThompsonはMultics上で動いていたスペースゲームをベル研に持ち帰ってきたはいいがのですが、遊ぶのに適当なマシンがなかったので放置されていたDEC PDP-7を使い始めたと言われています。 &amp;lt;/ref&amp;gt;。&lt;br /&gt;
1968年のことです。それはMULTICSのような大きなスペックを持つOSではなく、もっとコンパクトなOSなので、彼らはMULTICSをもじってUNICSと命名します。後にUNICSはUNIXと改名し、そのままの名前が定着します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
たまに『UNIXはMULTICSの否定である』とか、その反対に『MULTICSの後継がUNIXである』とか書いてある説明を見かけます。これは正しくもあり間違ってもいます。思い出して欲しいのですが今日的なOSの基礎となる沢山のアイデアが導入されているのがMULTICSです。つまり今日的なOSの多くのアイデアそのものはMULTICSを源流にもちます。ただし、MULTICSは、たくさんのアイデアをつめこんだためにシステムが肥大化しプロジェクト自体は失敗に終っています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろん今日的OSであるUNIXにはMULTICSの数々のアイデアが採り入れています。しかしながらUNIXはMULTICSの最大の特徴(かつ致命的な問題となっていた)である多目的で複雑である部分を否定しています。言うまでもないですがUNIXはMULTICSをもう一度作ろうとしたものでもありません。もしUNIXと MULTICSの関係性を表現するとするならば「MULTICSの失敗を教訓にしたOS」と言えるでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみにMULTICSが複雑で大きなOSでUNIXがシンプルで小さいOSだったというのは初期のUNIXを指していうことであって、現在の基準では当てはまりません。その後のUNIXは肥大化の道を歩んでいます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在、UNIXを作ったKen ThompsonやDennis Ritchieといったベル研の人達は既にUNIXは利用せずPlan9という異なるタイプの新しいOSを開発し、利用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BSDへの分岐 ===&lt;br /&gt;
&lt;br /&gt;
PDP-7の上で産声をあげたUNIXは、まだ正式なバージョンが付けられていません。ですから、正確にはまだUNIXではないとしてカッコつきで(PDP-7)として分類している本もあります。First Editionと呼ばれるのは、PDP-11/20上で動き始めたUNIXからです。それまでアセンブラで書かれていたUNIXがCで書き換えられFourth Editionとなります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
どうしてEditionという言葉を使っているかというと、ベル研究でのバージョンはマニュアルのバージョンで区別しているのだそうです。なぜなら、いつもUNIXのソースコードに手を入れていたため常にソースコードが変わっていてソースコードでのバージョン管理は不可能だったためだそうです。唯一のバージョンコントロールというのはマニュアルだったというわけです。一般には Sixth Edition と言わずにV6 (Version 6)という具合にVersion を使う方を目にする方が多いかも知れません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1976年のSixth EditionをベースとしてUNIXはPWB3.0とBSDが分岐します。PWB はProgrammer Work Banechの略です。この流れは、後にSystem IIIへつながります。BSDはBerkeley Software Distributionsの略で、UCB (University of California Berkeley)のCSRG (Computer System Research Group)で作られていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1BSDと呼ばれる、最初のバージョンはPDP-11上で動いていました。これが2BSD になり2.xBSDになります(xは1,2,3といった数字が入ります)。2.xはPDP-11をプラットフォームにしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方、2BSDからVAXで動く3BSDに分岐し、後に4.0BSDになります。以降、 4.1BSD、4.2BSD、4.3BSD、4.4BSDとなります。もともとのUNIXのプログラムワークベンチとしての使い勝手の良さはもとより、CSRGで加えられた仮想記憶の能力、高速なファイルシステム、TCP/IPの実装プラットフォーム&lt;br /&gt;
&amp;lt;ref&amp;gt;これらの研究は国防総省傘下の研究組織であるDARPAからの研究資金の援助で開発されています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
などの数々の最新技術の投入によるアドバンテージにより、BSDは研究所や大学を中心に急速に広がります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BSD自体は自由にコピーできるのですがベル研で作られたコードが含まれていますので、UNIXを動かすにはAT&amp;amp;Tへのライセンス費用が発生しました。この1980年代前半、AT&amp;amp;Tへのライセンス費用は研究施設では配布実費程度($800)、商用サイトでは($43000)でした。しかしながら高額な科学計算用コンピュータ VAXを所有している所では、この料金は大した問題ではありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最後のリリースが4.4BSDです。ここでCSRGでのBSDの研究開発は終了します。この頃になるとBSDは技術的に研究と呼べる部分が少なくなってきたのは確かですが、それ以上にAT&amp;amp;Tとライセンセンス問題がこじれて研究者の中のモチベーションが保てなくなったのではと筆者は考えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1992年1月、UNIXライセンスを管理するAT&amp;amp;Tの子会社URL社が4.3BSD NET/2をベースに商用BSDを作ったBSDI社を相手に製品出荷差し止め訴訟をおこします。それが判事に却下されたので、今度はUCBとBSDIの両方を相手に製品出荷差し止め訴訟を繰り広げます。また裁判途中でURL社がAT&amp;amp;Tからノベル社に買収されたりとったこともあって、なかなか訴訟も、和解案も進みません。やっとのこと1994年の1月に解決します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
貴重なCSRGメンバーの労力が、このバカバカしい訴訟で浪費されたといっても過言ではありません。1995年6月の4.4BSD-Lite Release 2を最後にCSRGは解散します。もちろん表向きは「新しい時代、新しい人達へのバトンタッチ」ですが、実際は、この世にもバカバカしい訴訟で燃え尽きたといっても過言ではないでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== まぼろしのSystem IV ===&lt;br /&gt;
&lt;br /&gt;
Sixth Editionから分岐してPWBが作られます。ベル研にはリサーチとは関係のないUNIXをソフトウエアの開発のために使おうというグループがあって、そこがUNIXをプログラマーのための道具として使うためのに改良しました。 1979年のことです。これがPWB/UNIX 1.0として研究所の外部にもライセンスされるようになります。PWBから分岐して1982年にSystem IIIが作られます。PWB はその後何度かバージョンがアップされますが、1984年にSystem V Relase 2 に統合されます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般市場向けに販売された最初のAT&amp;amp;TブランドUNIXがSystem IIIです。筆者は1983,4年頃にCPUにMC68000を使ったNCR社製マシンでSystem IIIを使った経験があります。GUIもネットワークもありませんが、使い心地は今のLinuxや FreeBSDなとどおなじです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後、後継バージョンとしてSystem Vが出てきます。System IVという名前は幻になっています。実は発売寸前までSystem IVは進んでいたのですが、その内容のひどさにUNIXを生み出したベル研のメンバーは激怒し「今後一切関係はない」といって、マニュアルなどすべてから名前の削除を求めたそうです。それでSystem IVは余儀なく大量の変更が発生し、発売できなくなりました。&lt;br /&gt;
世界最大のUNIXベンダ マイクロソフト&lt;br /&gt;
1980年代前半、世界で最もUNIXの出荷が多かったのは実はマイクロソフト社でした。その頃、SCO (Santa Cruz Operation)社と共同でマイクロソフトは XENIXというIntel 8086上で動くUNIXのバージョンを作成していました。その頃、他はVAXのような大きなマシンばかりでしたので、出荷数から見るとXENIX の数が最大のように見えるのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UNIXの人口爆発 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1985年から1995年までの10年間は、色々なバージョンのUNIXが増殖した時代といえるでしょう。UNIXの流行とともに、色々な会社が色々なUNIXを実装して売り出していきます。日本でも通産省の大失敗プロジェクトであるΣプロジェクトが行われていた頃です。色々な会社のUNIXマシンを製造し、少しでも自分のシェアを独占しようと奔走していたころです。このような背景があってAT&amp;amp;Tが BSDIの邪魔をし、その邪魔ができないと見るやいなや、UCBも含めて訴えていた頃です。なんと情けない時代でしょう。そんなAT&amp;amp;Tや他の企業のドタバタも 95年以降は鎮静化します。理由は簡単です。Windows がディスクトップUNIXのシェアを食い、Windows NTがサーバのシェアを食ったからです。&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== Linuxの誕生前夜 ===&lt;br /&gt;
&lt;br /&gt;
Linuxが生まれる1991年前夜、既にOSのトレンドは新しい世界に入っていました。それはマイクロカーネル技術を使ったOSです。マイクロカーネルのポイントは提供するサービスと、最小限のコントロールのみしか残していない小さなカーネルから出来上がっている所です。 最小限のコントロールとは、メモリ、タスク、プロセス間通信、(最小限必要なハードウェアの)デバイスドライバなどです。ファイルシステム、ネットワーク機能、プロセス管理、仮想記憶管理などなどはサーバプログラムとして動作しています。それまでのUNIXカーネルはOSが果たすべき機能はすべて1つのカーネル内で行われているモノリシック・カーネルとよばれるタイプでした。&lt;br /&gt;
&lt;br /&gt;
=== Linux誕生 ===&lt;br /&gt;
&lt;br /&gt;
フィンランドの大学生 Linus Torvaldsが1991年にLinux version 0.02をリリースしました。1994年にLinux 1.0をリリースしました。 Linuxを一躍有名にしたのは、使い勝手でもなく、新規性でもなく、処理能力でもありません。1992年にあったネットニュース上での大喧嘩でした。&lt;br /&gt;
&lt;br /&gt;
=== Torvalds vs. Tanenbaum ===&lt;br /&gt;
&lt;br /&gt;
1992年にcomp.os.minixで行われたLinuxの生みの親Torvaldsとオペーレーティングシステム研究者の大御所Tanenbaum教授との論争です。&amp;quot;Linux is obsolete&amp;quot;というタイトルで書いた教授の記事の趣旨は「90年代に70年代の技術であるモノリシックカーネルであること」「ポータビリティに欠けること」の2点です。これは&lt;br /&gt;
オープンソフトウェア&amp;lt;ref&amp;gt;http://www.oreilly.com/catalog/opensources/book/appa.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
(オライリージャパン)に収録されいるので、みなさんも是非1度目を通されることをお勧めします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
正直に筆者の意見をいうと教授の言い分は正しいです。ただし、その時代遅れな構造こそがLinuxに味方しました。誰もが知っている時代遅れの枯れた技術を使ったからこそLinuxのカーネルをハックできる人口が多く、そしてまた実現方針も建てやすく、早く簡単に作れたといえます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
マイクロカーネルはモノリシック・カーネルよりオーバーヘッドが発生し処理効率が落ちると言われていますが、これはLinuxができてきた91年であっても古い話です。80年代後半ごろマイクロカーネルの草分けであるMachはのオーバーヘッドの問題はありましたが90年に入るとマイクロカーネル技術は既に、その問題を克服しています。いまだにこの「マイクロカーネルは遅い」という神話を信じている人がいて驚くことがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
またマイクロカーネルの提供する「粒度」というモノリシックカーネルでは存在しえない概念も入っています。ここでの粒度とはマイクロカーネルが実行する処理のサイズだと考えてください。マイクロカーネルはこの粒度という処理を分散する考え方を導入しているためたとえばCPUを何十、何百、何千個搭載した並行処理マシン上で1つ1つのCPUでマイクロカーネルが各々動き、個々のタスクが割り当て、さらに全体としてプロセスを管理するプロセス管理サーバがあるような実装が可能になります。たぶん、このようなことをしたいために日立の並列スーパーコンピュータ SR8000シリーズ の OS は Machをベースとしたマイクロカーネルで実装しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows NTもマイクロカーネルで作られているので同じような効果がでます。たとえばCOMPAQ ProLiant 8500というマルチプロセッサマシンを多数と Microsoft Windows 2000 Advanced Server と Microsoft SQL Server 2000 Enterpriseの組合せでデータベースのベンチマークであるTPC-Cの最高レコードを何度か書き換えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2とか4程度のプロセッサ数ならモノリシックカーネルでも使えるでしょうが、このようなプロセッサ数が多いマルチプロセッサマシンでは上手に動けません(このような劇的なパフォーマンスが出る実装はまだ存在していません)。&lt;br /&gt;
&lt;br /&gt;
== LinuxはUNIXではない ==&lt;br /&gt;
&lt;br /&gt;
こう書くと混乱する人がいるかも知れません。まずLinuxはUNIXではありません。BSDにしても、他の多くのUNIXベンダのOSにしても、前身となるUNIXシステムがあるものがほとんどです。その前身をたどっていくと、最後はベル研の UNIXにたどり着きます。Linuxは、その流れから完全に独立しています。現在のLinuxの原点は、今や伝説ともなったLinus Torvaldsというフィンランドの1 大学生が386CPUベースのPC上で勉強のために作り始めたものです。それ以前をひきついでいません。LinuxはLinuxから出発しているのです。つまり元祖なのです。これは、かなりユニークなポジションにいます。たとえばThe Design and Implementation of the 4.4BSD Operating SystemのHistory of the UNIX Systemの章にあるUNIXの家系図を見ると、前身がないOSはPlan9とLinuxしかありません。 家系図の解釈にはいろいろな流儀があり、たとえばPlan9がUNIX V8から分岐したとか、Linuxがminixから分岐したと表現しているものがあります。しかし、影響を受けたというならまたしも、これらのあいだではソースコードの流用はありません。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはUNIX互換ではない ===&lt;br /&gt;
&lt;br /&gt;
LinuxはUNIX互換として作られたわけではなくPOSIX 1003.1仕様のOSです。 POSIX 1003.1とはポータブルOSの互換性を保つための規格です。POSIX 1003.1 はUNIXを参考にして作られていますがUNIXの規格ではありません。よって POSIX 1003.1準拠のOSであるLinuxはUNIX互換ではないということです。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはLinuxではない ===&lt;br /&gt;
&lt;br /&gt;
システムはカーネルだけあっても、何もサービスはできません。サービスを行うためのソフトウェア環境が揃って始めてシステムとなります。その取り巻く環境をミドルウェアと呼ぶ場合もありますが、ここではもっと広い意味でユーザにサービスを提供する総体としてシステムと呼びます。Linuxはカーネルです。そのカーネル上でサービスを提供するための数々のソフトウエアはフリーソフトウェアであるGNUが使われています。よってシステムとして呼ぶ場合は GNU/Linuxと呼ぶのが正しい呼び方です。&lt;br /&gt;
&lt;br /&gt;
===  Linuxは新しいOSなのか ===&lt;br /&gt;
&lt;br /&gt;
誕生した時期は「新しい」と言えますが、その中身の構造は非常に「古典的」です。それはTanenbaumがLinuxを切捨てた通りです。ではLinuxの目標は何なのでしょうか?それは「POSIX準拠した本格的な機能を持ったフリーのOSを作ること」だと言えます。技術的野心に燃えて新しいことをするのではなく、自分達が自由に使えるOSを作るということが明確だったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Torvaldsは最初は、そんなに目標が明確だったわけではなかったと思います。しかし、Torvalds vs. Tanenbaumの論争の中でLinuxの方向性は決っていきます。それは完全にフリーソフトウェアであること、将来の発展よりまず現在のマシン上で十分に動かせることです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
フリーソフトウェア運動の指導者リチャード・ストールマンがGNUプロジェクトの性質に対してこういったのを筆者は聞いたことがあります。「GNUソフトウェアはわくわくするような新しいものを研究し画期的なソフトウェアを生みだすためのプロジェクトではない。ソフトウェアをフリーなものに置き換えるむしろ後追いの地味なプロジェクトだ」&lt;br /&gt;
&lt;br /&gt;
=== なぜLinuxがこれだけ広まったか ===&lt;br /&gt;
&lt;br /&gt;
Linuxが現れた頃、既に同様にフリーである386BSDがありました。しかしLinux の開発の方が一歩リードしていたようです。FSFの機関誌であったGNUダイジェストのバックログをおってみるとよくわかります。386BSDとLinuxがGNUダイジェスト(GNU&#039;s Bulletin)に紹介されるのは、1992年6月発行の13号です。&amp;lt;ref&amp;gt; GNU&#039;s Bulletinは次のURLから入手できます。ftp://ftp.sra.co.jp/pub/gnu/sra/Bull-j/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNUダイジェスト1992年6月号から引用してみましょう。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* Linux (386マシン用のフリーなUnixシステム)&lt;br /&gt;
:Linux (Linus Torvalds にちなんで名前が付けられた) は、フリーな Unix シス テムのクーロンであり、System V や POSIX の機能のサブセットを実現する。 Linux はまったく最初から作成され、カーネル内には独占的なコードを含まない。 非常に多くのユーティリティやライブラリは、GNU ソフトウェアを使っている。 Linux は 386/486 AT バスマシンでのみ動作する。Intel 386 以外への移植は非 常に困難であろう。カーネルで広範囲に、386 メモリ管理システムやタスク・プ リミティブを使っているからである。Linux は次のサイトから anonymous FTP で入手可能である。`tsx-11.mit.edu:/pub/linux&#039; (アメリカ)、 `nic.funet.fi:/pub/OS/Linux&#039; (ヨーロッパ)。 Linus に関して討論する `comp.os.linux&#039; というニュース・グループがあ る。メイリング・リストに関する問い合わせは `linux-activists-request@niksula.hut.fi&#039; まで。&lt;br /&gt;
&lt;br /&gt;
* フリーな 386 BSD&lt;br /&gt;
:経験のあるハッカーは、William F. Jolitz らによって移植された BSD Unix の 386 へ移植したバージョンのアルファ・テストに興味を抱くかもしれない。この カーネルは AT&amp;amp;T コードを含まないフリーなもので、自由に再配布可能である。 詳細な情報は `sokol@reyes.stanford.edu&#039; から入手可能である。初 期のバージョンは安定していないので、あるシステムではブート時に問題が発生 する点に注意されたい。&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ここからわかるのは、386BSDよりもLinuxの方が安定して動作していることと、既にftpサーバが用意されていて、誰でも容易に入手できる体制がアナウンスされていたことです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この文章からもLinuxはIntel CPUアーキテクチャーにべっとり依存していたことがわかります。この頃のUNIXユーザはパワーのないPCアーキテクチャーのマシン、いわゆるパソコンなど使わず、SUNやVAXといったワークステーションを使っていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
教科書通りの考え方だと単一アーキテクチャーしか使えないOSかつ、パワーないCPU上でしか動かないOSなので魅力がなさそうに見えます。ところが、実際は既にたくさんのPCが世の中に存在していて、かつ、その後のウインテルと揶揄されるWindowsとIntel CPUの組合せでIntel CPUの能力が格段に発達しました。その時流にLinuxはちょうど乗っかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
386BSDは4.3BSD NET/2からブランチしています。ここが利用者を躊躇させる1 つの要因になったようにみえます。既に本家4.3BSD NET/2は4.4BSDへアップするための作業が進んでいました。その後、386BSDはFreeBSDとNetBSDという2つにカーネルが分岐してしまいます。また本家4.4BSD自体がIntel CPUをサポートする予定です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このような状況でユーザはどれがステーブルなBSDであるかを選択できるでしょうか。筆者なら386BSD(FreeBSDやNetBSD)を選択しません。4.4BSDまで待ちます。一方で、今、手元にあるPCでフリーのUNIXを使いたいと思ったら? 筆者なら将来のマップが見えない386BSDよりもLinuxを選びます。筆者の目からみれば、出発点で技術的に不利と思われていたLinuxですが、今振り返ると広がるべくして広がったように見えます。&lt;br /&gt;
&lt;br /&gt;
== 1994年以降 ==&lt;br /&gt;
&lt;br /&gt;
1994年以降のLinuxの繁栄に関しては筆者よりもきっとSoftwareDesignの読者のみなさんの方が色々な情報を知っていると思います。ではLinuxの現代史は、また別の機会に。&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=988</id>
		<title>OS誕生からLinuxまでの歴史</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=OS%E8%AA%95%E7%94%9F%E3%81%8B%E3%82%89Linux%E3%81%BE%E3%81%A7%E3%81%AE%E6%AD%B4%E5%8F%B2&amp;diff=988"/>
		<updated>2014-02-11T14:37:53Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* MULTICSも忘れちゃいけない */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; 注意:   本文は1994年にソフトウェアデザイン誌に連載していたOS入門の原稿をベースにしています。ですからこの文章は1994年当時の状況をベースにしてかかれています。現在ではGNU/Linuxをシステム全体、Linuxをカーネルと区別しますが、本文中ではGNU/LinuxシステムをLinuxと呼んでいます。これは1994年当時の状況をそのまま残しているためです。&lt;br /&gt;
&lt;br /&gt;
== OS誕生 ==&lt;br /&gt;
&lt;br /&gt;
OSの歴史は、コンピュータが産まれてから20年ほど経った1960年代中期からスタートします。1960年中期にIBMが開発した商用コンピュータ・システム IBM System/360は、本格的なOS (OS/360)を搭載していました。それ以前のコンピュータ・システムは、部分的にはOSとしての機能を満たしたものがありますが、OS として機能及び概念が確立はしていません。IBM System/360が始めてOSの機能と概念を確立させました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:60年代のアメリカは公民権運動、ベトナム反戦運動、ウッドストックなどを後世に残すと同時にOSも後世に残したのでした。 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
それまでのIBMのコンピュータは、そのハードウェアの製品ライン毎にソフトウェアが必要で、各々の製品ラインの違うコンピュータ・システムには、ソフトウェアの互換性がありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これは、私たちが現在、アプリケーション・プログラムと呼んでいるような、ある特定目的のために動作するソフトウェアが、OSというクッションを持たず、システム全体のソフトウェアと密接に絡み合っていたからです。つまり、アプリケーションがリソースを管理しなければならなかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
例えば、事務には事務専用システムおよびソフトウェアを、科学計算には科学技術専用システムおよびソフトウェアを用意していました。また、同じ専用システムでも最大メモリやプロセッサのスピード、IOデバイスの数などのシステムの構成が違えば、それだけでソフトウェアの互換性は保てませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OSを導入することによってリソース管理をアプリケーションから切り離します。以前のシステム構成に特化したソフトウェアしか動かないコンピュータ・システムの世界から今度は色々なソフトウェアを動かすことができる、汎用なコンピュータ・システム世界に変化していきます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後System 360は、370、4300、3080、3090といったIBMシリーズに続き継がれます。それらのシステムは『汎用機』と呼ばれるコンピュータ・システムの代表です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MULTICSも忘れちゃいけない ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
同世代で、忘れてはいけないのがタイムシアリング・システムと呼ばれる処理方法を用いたCTSSと、それに引き続く今日のOSの原型でともいえるMULTICS&amp;lt;ref&amp;gt;http://www.multicians.org/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://web.mit.edu/multics-history/&amp;lt;/ref&amp;gt; です。CTSSは1963年にMITで使われていた原始的なOSでIBM System / 360よりも古いIBM 7094というシステム上で実現されています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
タイムシアリング・システムとは、複数のユーザが実行している各々のプログラムの処理をある一定時間毎(あるいは入出力が発生しI/O待ちになった場合)に切替えて、各々のユーザがあたかも同時に1つのコンピュータを使っているかのように見せかせるシステムです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSのプログラムの切替えは非常に単純です。ユーザの動かしているプログラムをまるごと主記憶装置から補助記憶装置に追い出し、次に動かすプログラムをロードしてくるというものでした&amp;lt;ref&amp;gt;これは、まだマルチプログラミングまで進化していません。混同しやすいので要注意のこと。 &amp;lt;/ref&amp;gt;。複数のプログラムを切替える能力はありましたが、リソース管理という点では、OSと呼ぶには十分ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CTSSがうまくいったので1965年にMITとAT&amp;amp;Tベル研究所とジェネラル・エレクトリック社&lt;br /&gt;
&amp;lt;ref&amp;gt;当時のジェネラル・エレクトリックは大手コンピュータ・ メーカーであった。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
が、共同で、現在のOSと比較しても見劣りしないような数々のスペックを持った、多目的なOSを作ろうとしました。それがMULTICSです。現在、私たちがOSの機能と呼んでいる数々の機能はMULTICSで現れたものです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
がしかし、1965年当時それらを実現するにはそもそもハードウェアの能力が足りませんし&lt;br /&gt;
&amp;lt;ref&amp;gt;あまりに古くて、正確な資料がないのですが、MULTICSのターゲッ ト・ハードウェアだったGE-645の処理パワーは、i386マシンぐらいだっ たようです。 &amp;lt;/ref&amp;gt;&lt;br /&gt;
、それだけのアイデアを完全に実現するだけのソフトウェア技術もまだ存在しないという、かなり無謀なプロジェクトでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
途中でベル研がプロジェクトから抜け、ジェネラル・エレクトリック社がコンピュータ市場自体から撤退しました。MULTICSはその後、MIT内部と数十のサイトで利用されました。おどろくことに細々とまだ存在しているのですが、多くの人の記憶からは既に消え去ってしまっています。しかしMULTICSで考えられた数々のアイデア、例えば、仮想記憶、プロセスの概念、プロテクションの概念、他にも多くの重要なアイデアが、今日のOSの中に生きています。&lt;br /&gt;
&lt;br /&gt;
== UNIX誕生! ==&lt;br /&gt;
&lt;br /&gt;
MULTICSプロジェクトにはベル研のKen ThompsonとDennis Ritchieがいました。彼らはベル研に戻り、廃棄同然のDEC PDP-7という小型のコンピュータの上に OSを書きます&lt;br /&gt;
&amp;lt;ref&amp;gt;Ken ThompsonはMultics上で動いていたスペースゲームをベル研に持ち帰ってきたはいいがのですが、遊ぶのに適当なマシンがなかったので放置されていたDEC PDP-7を使い始めたと言われています。 &amp;lt;/ref&amp;gt;。&lt;br /&gt;
1968年のことです。それはMULTICSのような大きなスペックを持つOSではなく、もっとコンパクトなOSなので、彼らはMULTICSをもじってUNICSと命名します。後にUNICSはUNIXと改名し、そのままの名前が定着します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
たまに『UNIXはMULTICSの否定である』とか、その反対に『MULTICSの後継がUNIXである』とか書いてある説明を見かけます。これは正しくもあり間違ってもいます。思い出して欲しいのですが今日的なOSの基礎となる沢山のアイデアが導入されているのがMULTICSです。つまり今日的なOSの多くのアイデアそのものはMULTICSを源流にもちます。ただし、MULTICSは、たくさんのアイデアをつめこんだためにシステムが肥大化しプロジェクト自体は失敗に終っています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
もちろん今日的OSであるUNIXにはMULTICSの数々のアイデアが採り入れています。しかしながらUNIXはMULTICSの最大の特徴(かつ致命的な問題となっていた)である多目的で複雑である部分を否定しています。言うまでもないですがUNIXはMULTICSをもう一度作ろうとしたものでもありません。もしUNIXと MULTICSの関係性を表現するとするならば「MULTICSの失敗を教訓にしたOS」と言えるでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ちなみにMULTICSが複雑で大きなOSでUNIXがシンプルで小さいOSだったというのは初期のUNIXを指していうことであって、現在の基準では当てはまりません。その後のUNIXは肥大化の道を歩んでいます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
現在、UNIXを作ったKen ThompsonやDennis Ritchieといったベル研の人達は既にUNIXは利用せずPlan9という異なるタイプの新しいOSを開発し、利用しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BSDへの分岐 ===&lt;br /&gt;
&lt;br /&gt;
PDP-7の上で産声をあげたUNIXは、まだ正式なバージョンが付けられていません。ですから、正確にはまだUNIXではないとしてカッコつきで(PDP-7)として分類している本もあります。First Editionと呼ばれるのは、PDP-11/20上で動き始めたUNIXからです。それまでアセンブラで書かれていたUNIXがCで書き換えられFourth Editionとなります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
どうしてEditionという言葉を使っているかというと、ベル研究でのバージョンはマニュアルのバージョンで区別しているのだそうです。なぜなら、いつもUNIXのソースコードに手を入れていたため常にソースコードが変わっていてソースコードでのバージョン管理は不可能だったためだそうです。唯一のバージョンコントロールというのはマニュアルだったというわけです。一般には Sixth Edition と言わずにV6 (Version 6)という具合にVersion を使う方を目にする方が多いかも知れません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1976年のSixth EditionをベースとしてUNIXはPWB3.0とBSDが分岐します。PWB はProgrammer Work Banechの略です。この流れは、後にSystem IIIへつながります。BSDはBerkeley Software Distributionsの略で、UCB (University of California Berkeley)のCSRG (Computer System Research Group)で作られていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1BSDと呼ばれる、最初のバージョンはPDP-11上で動いていました。これが2BSD になり2.xBSDになります(xは1,2,3といった数字が入ります)。2.xはPDP-11をプラットフォームにしています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一方、2BSDからVAXで動く3BSDに分岐し、後に4.0BSDになります。以降、 4.1BSD、4.2BSD、4.3BSD、4.4BSDとなります。もともとのUNIXのプログラムワークベンチとしての使い勝手の良さはもとより、CSRGで加えられた仮想記憶の能力、高速なファイルシステム、TCP/IPの実装プラットフォーム&lt;br /&gt;
&amp;lt;ref&amp;gt;これらの研究は国防総省傘下の研究組織であるDARPAからの研究資金の援助で開発されています。&amp;lt;/ref&amp;gt;&lt;br /&gt;
などの数々の最新技術の投入によるアドバンテージにより、BSDは研究所や大学を中心に急速に広がります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BSD自体は自由にコピーできるのですがベル研で作られたコードが含まれていますので、UNIXを動かすにはAT&amp;amp;Tへのライセンス費用が発生しました。この1980年代前半、AT&amp;amp;Tへのライセンス費用は研究施設では配布実費程度($800)、商用サイトでは($43000)でした。しかしながら高額な科学計算用コンピュータ VAXを所有している所では、この料金は大した問題ではありませんでした。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
最後のリリースが4.4BSDです。ここでCSRGでのBSDの研究開発は終了します。この頃になるとBSDは技術的に研究と呼べる部分が少なくなってきたのは確かですが、それ以上にAT&amp;amp;Tとライセンセンス問題がこじれて研究者の中のモチベーションが保てなくなったのではと筆者は考えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1992年1月、UNIXライセンスを管理するAT&amp;amp;Tの子会社URL社が4.3BSD NET/2をベースに商用BSDを作ったBSDI社を相手に製品出荷差し止め訴訟をおこします。それが判事に却下されたので、今度はUCBとBSDIの両方を相手に製品出荷差し止め訴訟を繰り広げます。また裁判途中でURL社がAT&amp;amp;Tからノベル社に買収されたりとったこともあって、なかなか訴訟も、和解案も進みません。やっとのこと1994年の1月に解決します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
貴重なCSRGメンバーの労力が、このバカバカしい訴訟で浪費されたといっても過言ではありません。1995年6月の4.4BSD-Lite Release 2を最後にCSRGは解散します。もちろん表向きは「新しい時代、新しい人達へのバトンタッチ」ですが、実際は、この世にもバカバカしい訴訟で燃え尽きたといっても過言ではないでしょう。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== まぼろしのSystem IV ===&lt;br /&gt;
&lt;br /&gt;
Sixth Editionから分岐してPWBが作られます。ベル研にはリサーチとは関係のないUNIXをソフトウエアの開発のために使おうというグループがあって、そこがUNIXをプログラマーのための道具として使うためのに改良しました。 1979年のことです。これがPWB/UNIX 1.0として研究所の外部にもライセンスされるようになります。PWBから分岐して1982年にSystem IIIが作られます。PWB はその後何度かバージョンがアップされますが、1984年にSystem V Relase 2 に統合されます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般市場向けに販売された最初のAT&amp;amp;TブランドUNIXがSystem IIIです。筆者は1983,4年頃にCPUにMC68000を使ったNCR社製マシンでSystem IIIを使った経験があります。GUIもネットワークもありませんが、使い心地は今のLinuxや FreeBSDなとどおなじです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
その後、後継バージョンとしてSystem Vが出てきます。System IVという名前は幻になっています。実は発売寸前までSystem IVは進んでいたのですが、その内容のひどさにUNIXを生み出したベル研のメンバーは激怒し「今後一切関係はない」といって、マニュアルなどすべてから名前の削除を求めたそうです。それでSystem IVは余儀なく大量の変更が発生し、発売できなくなりました。&lt;br /&gt;
世界最大のUNIXベンダ マイクロソフト&lt;br /&gt;
1980年代前半、世界で最もUNIXの出荷が多かったのは実はマイクロソフト社でした。その頃、SCO (Santa Cruz Operation)社と共同でマイクロソフトは XENIXというIntel 8086上で動くUNIXのバージョンを作成していました。その頃、他はVAXのような大きなマシンばかりでしたので、出荷数から見るとXENIX の数が最大のように見えるのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UNIXの人口爆発 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1985年から1995年までの10年間は、色々なバージョンのUNIXが増殖した時代といえるでしょう。UNIXの流行とともに、色々な会社が色々なUNIXを実装して売り出していきます。日本でも通産省の大失敗プロジェクトであるΣプロジェクトが行われていた頃です。色々な会社のUNIXマシンを製造し、少しでも自分のシェアを独占しようと奔走していたころです。このような背景があってAT&amp;amp;Tが BSDIの邪魔をし、その邪魔ができないと見るやいなや、UCBも含めて訴えていた頃です。なんと情けない時代でしょう。そんなAT&amp;amp;Tや他の企業のドタバタも 95年以降は鎮静化します。理由は簡単です。Windows がディスクトップUNIXのシェアを食い、Windows NTがサーバのシェアを食ったからです。&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== Linuxの誕生前夜 ===&lt;br /&gt;
&lt;br /&gt;
Linuxが生まれる1991年前夜、既にOSのトレンドは新しい世界に入っていました。それはマイクロカーネル技術を使ったOSです。マイクロカーネルのポイントは提供するサービスと、最小限のコントロールのみしか残していない小さなカーネルから出来上がっている所です。 最小限のコントロールとは、メモリ、タスク、プロセス間通信、(最小限必要なハードウェアの)デバイスドライバなどです。ファイルシステム、ネットワーク機能、プロセス管理、仮想記憶管理などなどはサーバプログラムとして動作しています。それまでのUNIXカーネルはOSが果たすべき機能はすべて1つのカーネル内で行われているモノリシック・カーネルとよばれるタイプでした。&lt;br /&gt;
&lt;br /&gt;
=== Linux誕生 ===&lt;br /&gt;
&lt;br /&gt;
フィンランドの大学生 Linus Torvaldsが1991年にLinux version 0.02をリリースしました。1994年にLinux 1.0をリリースしました。 Linuxを一躍有名にしたのは、使い勝手でもなく、新規性でもなく、処理能力でもありません。1992年にあったネットニュース上での大喧嘩でした。&lt;br /&gt;
&lt;br /&gt;
=== Torvalds vs. Tanenbaum ===&lt;br /&gt;
&lt;br /&gt;
1992年にcomp.os.minixで行われたLinuxの生みの親Torvaldsとオペーレーティングシステム研究者の大御所Tanenbaum教授との論争です。&amp;quot;Linux is obsolete&amp;quot;というタイトルで書いた教授の記事の趣旨は「90年代に70年代の技術であるモノリシックカーネルであること」「ポータビリティに欠けること」の2点です。これは&lt;br /&gt;
オープンソフトウェア&amp;lt;ref&amp;gt;http://www.oreilly.com/catalog/opensources/book/appa.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
(オライリージャパン)に収録されいるので、みなさんも是非1度目を通されることをお勧めします。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
正直に筆者の意見をいうと教授の言い分は正しいです。ただし、その時代遅れな構造こそがLinuxに味方しました。誰もが知っている時代遅れの枯れた技術を使ったからこそLinuxのカーネルをハックできる人口が多く、そしてまた実現方針も建てやすく、早く簡単に作れたといえます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
マイクロカーネルはモノリシック・カーネルよりオーバーヘッドが発生し処理効率が落ちると言われていますが、これはLinuxができてきた91年であっても古い話です。80年代後半ごろマイクロカーネルの草分けであるMachはのオーバーヘッドの問題はありましたが90年に入るとマイクロカーネル技術は既に、その問題を克服しています。いまだにこの「マイクロカーネルは遅い」という神話を信じている人がいて驚くことがあります。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
またマイクロカーネルの提供する「粒度」というモノリシックカーネルでは存在しえない概念も入っています。ここでの粒度とはマイクロカーネルが実行する処理のサイズだと考えてください。マイクロカーネルはこの粒度という処理を分散する考え方を導入しているためたとえばCPUを何十、何百、何千個搭載した並行処理マシン上で1つ1つのCPUでマイクロカーネルが各々動き、個々のタスクが割り当て、さらに全体としてプロセスを管理するプロセス管理サーバがあるような実装が可能になります。たぶん、このようなことをしたいために日立の並列スーパーコンピュータ SR8000シリーズ の OS は Machをベースとしたマイクロカーネルで実装しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows NTもマイクロカーネルで作られているので同じような効果がでます。たとえばCOMPAQ ProLiant 8500というマルチプロセッサマシンを多数と Microsoft Windows 2000 Advanced Server と Microsoft SQL Server 2000 Enterpriseの組合せでデータベースのベンチマークであるTPC-Cの最高レコードを何度か書き換えています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2とか4程度のプロセッサ数ならモノリシックカーネルでも使えるでしょうが、このようなプロセッサ数が多いマルチプロセッサマシンでは上手に動けません(このような劇的なパフォーマンスが出る実装はまだ存在していません)。&lt;br /&gt;
&lt;br /&gt;
== LinuxはUNIXではない ==&lt;br /&gt;
&lt;br /&gt;
こう書くと混乱する人がいるかも知れません。まずLinuxはUNIXではありません。BSDにしても、他の多くのUNIXベンダのOSにしても、前身となるUNIXシステムがあるものがほとんどです。その前身をたどっていくと、最後はベル研の UNIXにたどり着きます。Linuxは、その流れから完全に独立しています。現在のLinuxの原点は、今や伝説ともなったLinus Torvaldsというフィンランドの1 大学生が386CPUベースのPC上で勉強のために作り始めたものです。それ以前をひきついでいません。LinuxはLinuxから出発しているのです。つまり元祖なのです。これは、かなりユニークなポジションにいます。たとえばThe Design and Implementation of the 4.4BSD Operating SystemのHistory of the UNIX Systemの章にあるUNIXの家系図を見ると、前身がないOSはPlan9とLinuxしかありません。 家系図の解釈にはいろいろな流儀があり、たとえばPlan9がUNIX V8から分岐したとか、Linuxがminixから分岐したと表現しているものがあります。しかし、影響を受けたというならまたしも、これらのあいだではソースコードの流用はありません。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはUNIX互換ではない ===&lt;br /&gt;
&lt;br /&gt;
LinuxはUNIX互換として作られたわけではなくPOSIX 1003.1仕様のOSです。 POSIX 1003.1とはポータブルOSの互換性を保つための規格です。POSIX 1003.1 はUNIXを参考にして作られていますがUNIXの規格ではありません。よって POSIX 1003.1準拠のOSであるLinuxはUNIX互換ではないということです。&lt;br /&gt;
&lt;br /&gt;
=== LinuxはLinuxではない ===&lt;br /&gt;
&lt;br /&gt;
システムはカーネルだけあっても、何もサービスはできません。サービスを行うためのソフトウェア環境が揃って始めてシステムとなります。その取り巻く環境をミドルウェアと呼ぶ場合もありますが、ここではもっと広い意味でユーザにサービスを提供する総体としてシステムと呼びます。Linuxはカーネルです。そのカーネル上でサービスを提供するための数々のソフトウエアはフリーソフトウェアであるGNUが使われています。よってシステムとして呼ぶ場合は GNU/Linuxと呼ぶのが正しい呼び方です。&lt;br /&gt;
&lt;br /&gt;
===  Linuxは新しいOSなのか ===&lt;br /&gt;
&lt;br /&gt;
誕生した時期は「新しい」と言えますが、その中身の構造は非常に「古典的」です。それはTanenbaumがLinuxを切捨てた通りです。ではLinuxの目標は何なのでしょうか?それは「POSIX準拠した本格的な機能を持ったフリーのOSを作ること」だと言えます。技術的野心に燃えて新しいことをするのではなく、自分達が自由に使えるOSを作るということが明確だったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Torvaldsは最初は、そんなに目標が明確だったわけではなかったと思います。しかし、Torvalds vs. Tanenbaumの論争の中でLinuxの方向性は決っていきます。それは完全にフリーソフトウェアであること、将来の発展よりまず現在のマシン上で十分に動かせることです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
フリーソフトウェア運動の指導者リチャード・ストールマンがGNUプロジェクトの性質に対してこういったのを筆者は聞いたことがあります。「GNUソフトウェアはわくわくするような新しいものを研究し画期的なソフトウェアを生みだすためのプロジェクトではない。ソフトウェアをフリーなものに置き換えるむしろ後追いの地味なプロジェクトだ」&lt;br /&gt;
&lt;br /&gt;
=== なぜLinuxがこれだけ広まったか ===&lt;br /&gt;
&lt;br /&gt;
Linuxが現れた頃、既に同様にフリーである386BSDがありました。しかしLinux の開発の方が一歩リードしていたようです。FSFの機関誌であったGNUダイジェストのバックログをおってみるとよくわかります。386BSDとLinuxがGNUダイジェスト(GNU&#039;s Bulletin)に紹介されるのは、1992年6月発行の13号です。 GNU&#039;s Bulletinは次のURLから入手できます。 ftp://ftp.sra.co.jp/pub/gnu/sra/Bull-j/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNUダイジェスト1992年6月号から引用してみましょう。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BLOCKQUOTE&amp;gt;&lt;br /&gt;
* Linux (386マシン用のフリーなUnixシステム)&lt;br /&gt;
:Linux (Linus Torvalds にちなんで名前が付けられた) は、フリーな Unix シス テムのクーロンであり、System V や POSIX の機能のサブセットを実現する。 Linux はまったく最初から作成され、カーネル内には独占的なコードを含まない。 非常に多くのユーティリティやライブラリは、GNU ソフトウェアを使っている。 Linux は 386/486 AT バスマシンでのみ動作する。Intel 386 以外への移植は非 常に困難であろう。カーネルで広範囲に、386 メモリ管理システムやタスク・プ リミティブを使っているからである。Linux は次のサイトから anonymous FTP で入手可能である。`tsx-11.mit.edu:/pub/linux&#039; (アメリカ)、 `nic.funet.fi:/pub/OS/Linux&#039; (ヨーロッパ)。 Linus に関して討論する `comp.os.linux&#039; というニュース・グループがあ る。メイリング・リストに関する問い合わせは `linux-activists-request@niksula.hut.fi&#039; まで。&lt;br /&gt;
&lt;br /&gt;
* フリーな 386 BSD&lt;br /&gt;
:経験のあるハッカーは、William F. Jolitz らによって移植された BSD Unix の 386 へ移植したバージョンのアルファ・テストに興味を抱くかもしれない。この カーネルは AT&amp;amp;T コードを含まないフリーなもので、自由に再配布可能である。 詳細な情報は `sokol@reyes.stanford.edu&#039; から入手可能である。初 期のバージョンは安定していないので、あるシステムではブート時に問題が発生 する点に注意されたい。&lt;br /&gt;
&amp;lt;/BLOCKQUOTE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ここからわかるのは、386BSDよりもLinuxの方が安定して動作していることと、既にftpサーバが用意されていて、誰でも容易に入手できる体制がアナウンスされていたことです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この文章からもLinuxはIntel CPUアーキテクチャーにべっとり依存していたことがわかります。この頃のUNIXユーザはパワーのないPCアーキテクチャーのマシン、いわゆるパソコンなど使わず、SUNやVAXといったワークステーションを使っていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
教科書通りの考え方だと単一アーキテクチャーしか使えないOSかつ、パワーないCPU上でしか動かないOSなので魅力がなさそうに見えます。ところが、実際は既にたくさんのPCが世の中に存在していて、かつ、その後のウインテルと揶揄されるWindowsとIntel CPUの組合せでIntel CPUの能力が格段に発達しました。その時流にLinuxはちょうど乗っかったのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
386BSDは4.3BSD NET/2からブランチしています。ここが利用者を躊躇させる1 つの要因になったようにみえます。既に本家4.3BSD NET/2は4.4BSDへアップするための作業が進んでいました。その後、386BSDはFreeBSDとNetBSDという2つにカーネルが分岐してしまいます。また本家4.4BSD自体がIntel CPUをサポートする予定です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
このような状況でユーザはどれがステーブルなBSDであるかを選択できるでしょうか。筆者なら386BSD(FreeBSDやNetBSD)を選択しません。4.4BSDまで待ちます。一方で、今、手元にあるPCでフリーのUNIXを使いたいと思ったら? 筆者なら将来のマップが見えない386BSDよりもLinuxを選びます。筆者の目からみれば、出発点で技術的に不利と思われていたLinuxですが、今振り返ると広がるべくして広がったように見えます。&lt;br /&gt;
&lt;br /&gt;
== 1994年以降 ==&lt;br /&gt;
&lt;br /&gt;
1994年以降のLinuxの繁栄に関しては筆者よりもきっとSoftwareDesignの読者のみなさんの方が色々な情報を知っていると思います。ではLinuxの現代史は、また別の機会に。&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=987</id>
		<title>TCP/IP</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=987"/>
		<updated>2014-02-11T14:12:33Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== まずはじめに ==&lt;br /&gt;
&lt;br /&gt;
本章でのTCP/IPの取り上げるスタンスについて説明します。&lt;br /&gt;
本章では、UNIXとTCP/IPの関係性を取り上げ、GNU/Linuxの中でどう扱われているかの議論を試みます。TCP/IP自体の説明、また、インターネット自体の説明は本章の趣旨ではないので本章では扱いません。またTCP/IPに関する基本知識(例えば 3 way handshakeなど)は既に学習しているものとして話を進めます。&lt;br /&gt;
&lt;br /&gt;
GNU/LinuxはTCP/IPだけではなく、Appletalk、DECNETなど多数のプロトコルをサポートしていますが、本章では主要な論点であるTCP/IPのみ取り上げます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UNIXとTCP/IP == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPとは1970年代初頭にDRAPAの研究成果として既に出来上がったネットワーク通信用プロトコルで、元々はUNIXにはなかった機能です。米カリフォルニア大学バークレー校の研究グループ&amp;lt;ref&amp;gt;What, a real UNIX®? http://www.freebsd.org/doc/en/articles/explaining-bsd/what-a-real-unix.html&amp;lt;/ref&amp;gt;がDARPAからの研究資金を得て、4.1bBSD(1982年8月)に対してBBN Technologiesで実装されていたTCP/IPコードをベースとして組入れるという作業が始まり4.2BSDで正式にTCP/IPを含んでリリース(1983年8月)となりました。ここでは「BBNの実装ベースで」とあっさり書いていますが、実際にはもうちょっと複雑な話になっています。&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
詳しくは Open Sources: Voices from the Open Source Revolution に納められているMarshall Kirk McKusickが書いたTwenty Years of Berkeley Unix From AT&amp;amp;T-Owned to Freely Redistributable を読むことをお勧めします。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPというとインターネット用プロトコルというイメージがありますが、当時のBSDの実装はイーサーネット接続されたLANやキャンパスネットワークで高速に情報を伝達するのに適したものになっています。一方でオリジナルのBBNの実装は広域なネットワークであるインターネットで使うことを前提としているもので、そのため80年代当時の低速なネットワーク向けに作られています。このようにターゲットとなるネットワークの前提が違うため、BBNの実装をそのままBSDに組み込んだような単純な話ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この期間でのエポックとしては1983年1月1日にARPANETの公式プロトコルはTCP/IPに切り替わっています。 &amp;lt;ref&amp;gt; 核戦争にも耐えうる軍事ネットワークを作るためにインターネットを作ったという俗説がまことしやかに流れていますが、そのような事実はありません。Internet Society のサイトにある [http://www.internetsociety.org/internet/what-internet/history-internet/brief-history-internet Brief History of the Internet] に目を通して正しいインターネットの歴史の全体像を知っておきましょう。 &amp;lt;/ref&amp;gt; 当時TCP/IPの実装を持っていたオペレーティング・システムはそんなに多くはなく、BSDの他の名の知れたシステムはDEC社のTOPS-20 system &amp;lt;ref&amp;gt; http://panda.com/tops-20/ by Mark Crispin &amp;lt;/ref&amp;gt; ぐらいです。当時、DARPAの資金で開発した、他に参考となる実装が多くなく、ソースコードが公開されているなどのいくつかの要因により実質BSDがコンピュータにおけるTCP/IPのリファレンス実装となっていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
リファレンス実装であったというおもしろい傍証は1997-8年頃に問題となった [http://en.wikipedia.org/wiki/Ping_of_death Ping of Death] のケースが良いかも知れません。これは規定外サイズのICMPパケットを脆弱性を持つシステムに送るとオペレーティングシステムごとハングアップしてしまうというものです。そもそもの原因はBSDのコードがパケットの分割を考えていなかった実装だったからです。分割されるケースを設計時点で考慮に入れなかったある意味、単純なバグで、そんなに深い意味はありません。もし、IPパケットとICMPパケットの仕様&amp;lt;ref&amp;gt;[http://tools.ietf.org/html/rfc791 RFC791]&amp;lt;/ref&amp;gt;だけで作っていたら設計時に考慮し、この脆弱性はたぶん現れないでしょう。しかし実際にはGNU/LinuxだけではなくMacintoshやWindowsにも同じ脆弱性が現れました。このことから仕様ドキュメントから設計をしたわけではなく、商用のオペレーティングシステムもオープンなコードであるBSDのTCP/IPコードをリファレンスとしていたのではないかといわれています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xerox PARCで開発されたイーサーネット、TCP/IP、そしてBSDの組み合わせによって構築されたLANがARPANET経由でエンド・ツー・エンドで接続し広域ネットワークを構築してしまうという当時は技術的にかなり画期的な仕組みであり、これこそ今日私たちがインターネットと呼んでいるものそのものです。ですからUNIXの存在はインターネットの大きな礎としての存在であったといっても決して過言ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Internet Protocol Suite ===&lt;br /&gt;
&lt;br /&gt;
BSD由来のTCP/IPの特徴は、クライアントだけでなく、サーバだけでもなく、ルーターだけでもない、TCP/IPの機能一式をもったInternet Protocol Suiteの実装であるということです。つまり、UNIXはサーバとしても使え、クライアントとしても使え、そしてまたルーターとしても使えるということです。もちろんその上で動作するアプリケーションは、TCP/IPの機能をフルに使うことができます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNU/Linuxベースのサーバーやクライアントはインターネットにおける日常の風景的な部分ではありますが、形をかえて組み込み系でも市販のルータの中身がGNU/Linuxベースであったりするものよく見かけます。もちろんGNU/Linuxは、Internet Protocol Suiteで一式揃えているので、サーバとクライアントとルータやブリッジを同時に兼ねることも当然可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
典型的なのがGNU/Linux上で動作するバーチャルマシン・モニタXenのネットワーク構成です。Xenのドメイン0 (他の仮想マシンを動かすためのベースとなる環境）では、内部的にブリッジの機能を作り、ドメインU（個々の仮想マシン）からはそこに仮想的に接続する形を取りネットワークを形成します。このために特別なプロトコルスタックを用意するわけではありません。既にGNU/Linuxには必要なネットワークの能力が用意されているのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般にTCP/IPのようなプロトコルが重ねられている構造のことをプロトコルスタック ( Protocol Stack ) と呼びます。&lt;br /&gt;
そして各々のプロトコルのメカニズムあるいは実装のことを、その層のスタック、たとえばTCPであればTCPスタック、IPであればIPスタックと呼びます。意味は、TCPの層だけではなく、その下層も含めたメカニズムあるいは実装をさしています。&lt;br /&gt;
&lt;br /&gt;
== GNU/Linux での TCP/IP ==&lt;br /&gt;
&lt;br /&gt;
まずEthernetを前提に基本的な部分を説明したいと思います。&lt;br /&gt;
GNU/LinuxではEthernetのデバイスは基本的にeth0から順番に割り当てられます。&lt;br /&gt;
むかしはNIC (Network Interface Card)に対応するデバイスファイル /dev/eth0 というのがあったのですが、今ではそれが存在せず内部的にeth0、eth1という仮想的なネットワークデバイスになっています。&lt;br /&gt;
慣用的にloはローカルホスト、eth0はEternet、wlan0は無線LANの仮想ネットワークデバイスとして命名されていますが、これは任意な名前であり、たとえば、新たにPPP (シリアル経由でpoint-to-point接続するプロトコル)で接続を作る時はppp0や、 easytether (AndroidをUSBで接続しテザリングをするツールを利用)など仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えます(eth0, eth1, ... )。&lt;br /&gt;
&lt;br /&gt;
* lo ローカルホストのための仮想ネットワークデバイス&lt;br /&gt;
* eth0 Ethernetのための仮想ネットワークデバイス&lt;br /&gt;
* wlan0 無線LANのための仮想ネットワークデバイス&lt;br /&gt;
&lt;br /&gt;
その仮想ネットワークデバイスにIPアドレスを設定しTCP/IPで利用する形にします。&lt;br /&gt;
&lt;br /&gt;
===  ifconfig ===&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスにTCP/IPに必要なパラメータを設定するのはifconfigコマンドです。これは米カリフォルニア大学バークレー校でBSDに組み込んだTCP/IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。&lt;br /&gt;
&lt;br /&gt;
低いレベルでコントロールする方法を理解したい、あるいはツールを作成したいと思った時は netdevice のオンラインマニュアルにヒントがあります。&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfigをオプションなしに実行すると、現在のeth0やloが表示されます。&lt;br /&gt;
&lt;br /&gt;
  $ ifconfig&lt;br /&gt;
  eth0      Link encap:Ethernet  HWaddr 00:15:c5:41:95:a0  &lt;br /&gt;
          inet addr:192.168.100.18  Bcast:192.168.100.255  Mask:255.255.255.0&lt;br /&gt;
          inet6 addr: fe80::215:c5ff:fe41:95a0/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:350974 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:291913 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:329347998 (329.3 MB)  TX bytes:36362966 (36.3 MB)&lt;br /&gt;
          Interrupt:18 &lt;br /&gt;
  lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:340 (340.0 B)  TX bytes:340 (340.0 B)&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスeth0はEthernetに接続され、IPアドレス192.168.100.18が設定されています。&lt;br /&gt;
&lt;br /&gt;
loはローカルホストです。これは127.0.0.1が割り当てられます。127.0.0.1は特殊なアドレスでこれは自分自身のマシンを指します。&lt;br /&gt;
ホスト名はlocalhostとなっています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ブート時にはIPアドレスの設定などifconfigコマンドを使っています。デスクトップやノートパソコン、特にモバイルのように色々なネットワーク上で動作させるようなコンピュータはDHCP&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
ISC DHCP &lt;br /&gt;
https://www.isc.org/downloads/dhcp/&lt;br /&gt;
ここにDHCPのリファレンス実装があります。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
を使ってそのネットワーク上で自動割り当てされるのが一般的ですが、ここではまず固定IPの話から進めましょう。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 up&lt;br /&gt;
&lt;br /&gt;
これはeth0のインタフェースを利用可能にします。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 192.168.201.3/24&lt;br /&gt;
&lt;br /&gt;
こう実行することによってeth0にはIPアドレス192.168.1.3、ブロードキャスト:192.168.1.255、マスク:255.255.255.0が設定されます。&lt;br /&gt;
&lt;br /&gt;
ここではeth0に設定していますが物理的に1つのNICに複数のIPアドレスを付与できます。&lt;br /&gt;
むかしならNIC(network interface card)に1つのIPアドレスしか付加できませんでしたが、&lt;br /&gt;
複数のIPアドレスが設定する場合、eth0:1、eth0:2といった形でMACアドレスが同じである&lt;br /&gt;
eth0のインタフェースが作られます。&lt;br /&gt;
&lt;br /&gt;
  $ sudo ifconfig eth0:1 192.168.100.99/24&lt;br /&gt;
  $ ifconfig eth0:1&lt;br /&gt;
 ifconfig eth0:1&lt;br /&gt;
 eth0:1    Link encap:イーサネット  ハードウェアアドレス 14:da:e9:71:cd:35  &lt;br /&gt;
          inetアドレス:192.168.100.99  ブロードキャスト:192.168.100.255  マスク:255.255.255.0&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1&lt;br /&gt;
          割り込み:47 ベースアドレス:0xc000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(TBD)&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=986</id>
		<title>TCP/IP</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=986"/>
		<updated>2014-02-11T14:09:24Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* ifconfig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== まずはじめに ==&lt;br /&gt;
&lt;br /&gt;
本章でのTCP/IPの取り上げるスタンスについて説明します。&lt;br /&gt;
本章では、UNIXとTCP/IPの関係性を取り上げ、GNU/Linuxの中でどう扱われているかの議論を試みます。TCP/IP自体の説明、また、インターネット自体の説明は本章の趣旨ではないので本章では扱いません。またTCP/IPに関する基本知識(例えば 3 way handshakeなど)は既に学習しているものとして話を進めます。&lt;br /&gt;
&lt;br /&gt;
GNU/LinuxはTCP/IPだけではなく、Appletalk、DECNETなど多数のプロトコルをサポートしていますが、本章では主要な論点であるTCP/IPのみ取り上げます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UNIXとTCP/IP == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPとは1970年代初頭にDRAPAの研究成果として既に出来上がったネットワーク通信用プロトコルで、元々はUNIXにはなかった機能です。DARPAからの研究資金を得て、4.1bBSD(1982年8月)に対してBBN Technologiesで実装されていたTCP/IPコードをベースとして組入れるという作業が始まり4.2BSDで正式にTCP/IPを含んでリリース(1983年8月)となりました。ここでは「BBNの実装ベースで」とあっさり書いていますが、実際にはもうちょっと複雑な話になっています。&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
詳しくは Open Sources: Voices from the Open Source Revolution に納められているMarshall Kirk McKusickが書いたTwenty Years of Berkeley Unix From AT&amp;amp;T-Owned to Freely Redistributable を読むことをお勧めします。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPというとインターネット用プロトコルというイメージがありますが、当時のBSDの実装はイーサーネット接続されたLANやキャンパスネットワークで高速に情報を伝達するのに適したものになっています。一方でオリジナルのBBNの実装は広域なネットワークであるインターネットで使うことを前提としているもので、そのため80年代当時の低速なネットワーク向けに作られています。このようにターゲットとなるネットワークの前提が違うため、BBNの実装をそのままBSDに組み込んだような単純な話ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この期間でのエポックとしては1983年1月1日にARPANETの公式プロトコルはTCP/IPに切り替わっています。 &amp;lt;ref&amp;gt; 核戦争にも耐えうる軍事ネットワークを作るためにインターネットを作ったという俗説がまことしやかに流れていますが、そのような事実はありません。Internet Society のサイトにある [http://www.internetsociety.org/internet/what-internet/history-internet/brief-history-internet Brief History of the Internet] に目を通して正しいインターネットの歴史の全体像を知っておきましょう。 &amp;lt;/ref&amp;gt; 当時TCP/IPの実装を持っていたオペレーティング・システムはそんなに多くはなく、BSDの他の名の知れたシステムはDEC社のTOPS-20 system &amp;lt;ref&amp;gt; http://panda.com/tops-20/ by Mark Crispin &amp;lt;/ref&amp;gt; ぐらいです。当時、DARPAの資金で開発した、他に参考となる実装が多くなく、ソースコードが公開されているなどのいくつかの要因により実質BSDがコンピュータにおけるTCP/IPのリファレンス実装となっていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
リファレンス実装であったというおもしろい傍証は1997-8年頃に問題となった [http://en.wikipedia.org/wiki/Ping_of_death Ping of Death] のケースが良いかも知れません。これは規定外サイズのICMPパケットを脆弱性を持つシステムに送るとオペレーティングシステムごとハングアップしてしまうというものです。そもそもの原因はBSDのコードがパケットの分割を考えていなかった実装だったからです。分割されるケースを設計時点で考慮に入れなかったある意味、単純なバグで、そんなに深い意味はありません。もし、IPパケットとICMPパケットの仕様&amp;lt;ref&amp;gt;[http://tools.ietf.org/html/rfc791 RFC791]&amp;lt;/ref&amp;gt;だけで作っていたら設計時に考慮し、この脆弱性はたぶん現れないでしょう。しかし実際にはGNU/LinuxだけではなくMacintoshやWindowsにも同じ脆弱性が現れました。このことから仕様ドキュメントから設計をしたわけではなく、商用のオペレーティングシステムもオープンなコードであるBSDのTCP/IPコードをリファレンスとしていたのではないかといわれています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xerox PARCで開発されたイーサーネット、TCP/IP、そしてBSDの組み合わせによって構築されたLANがARPANET経由でエンド・ツー・エンドで接続し広域ネットワークを構築してしまうという当時は技術的にかなり画期的な仕組みであり、これこそ今日私たちがインターネットと呼んでいるものそのものです。ですからUNIXの存在はインターネットの大きな礎としての存在であったといっても決して過言ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Internet Protocol Suite ===&lt;br /&gt;
&lt;br /&gt;
BSD由来のTCP/IPの特徴は、クライアントだけでなく、サーバだけでもなく、ルーターだけでもない、TCP/IPの機能一式をもったInternet Protocol Suiteの実装であるということです。つまり、UNIXはサーバとしても使え、クライアントとしても使え、そしてまたルーターとしても使えるということです。もちろんその上で動作するアプリケーションは、TCP/IPの機能をフルに使うことができます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNU/Linuxベースのサーバーやクライアントはインターネットにおける日常の風景的な部分ではありますが、形をかえて組み込み系でも市販のルータの中身がGNU/Linuxベースであったりするものよく見かけます。もちろんGNU/Linuxは、Internet Protocol Suiteで一式揃えているので、サーバとクライアントとルータやブリッジを同時に兼ねることも当然可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
典型的なのがGNU/Linux上で動作するバーチャルマシン・モニタXenのネットワーク構成です。Xenのドメイン0 (他の仮想マシンを動かすためのベースとなる環境）では、内部的にブリッジの機能を作り、ドメインU（個々の仮想マシン）からはそこに仮想的に接続する形を取りネットワークを形成します。このために特別なプロトコルスタックを用意するわけではありません。既にGNU/Linuxには必要なネットワークの能力が用意されているのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般にTCP/IPのようなプロトコルが重ねられている構造のことをプロトコルスタック ( Protocol Stack ) と呼びます。&lt;br /&gt;
そして各々のプロトコルのメカニズムあるいは実装のことを、その層のスタック、たとえばTCPであればTCPスタック、IPであればIPスタックと呼びます。意味は、TCPの層だけではなく、その下層も含めたメカニズムあるいは実装をさしています。&lt;br /&gt;
&lt;br /&gt;
== GNU/Linux での TCP/IP ==&lt;br /&gt;
&lt;br /&gt;
まずEthernetを前提に基本的な部分を説明したいと思います。&lt;br /&gt;
GNU/LinuxではEthernetのデバイスは基本的にeth0から順番に割り当てられます。&lt;br /&gt;
むかしはNIC (Network Interface Card)に対応するデバイスファイル /dev/eth0 というのがあったのですが、今ではそれが存在せず内部的にeth0、eth1という仮想的なネットワークデバイスになっています。&lt;br /&gt;
慣用的にloはローカルホスト、eth0はEternet、wlan0は無線LANの仮想ネットワークデバイスとして命名されていますが、これは任意な名前であり、たとえば、新たにPPP (シリアル経由でpoint-to-point接続するプロトコル)で接続を作る時はppp0や、 easytether (AndroidをUSBで接続しテザリングをするツールを利用)など仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えます(eth0, eth1, ... )。&lt;br /&gt;
&lt;br /&gt;
* lo ローカルホストのための仮想ネットワークデバイス&lt;br /&gt;
* eth0 Ethernetのための仮想ネットワークデバイス&lt;br /&gt;
* wlan0 無線LANのための仮想ネットワークデバイス&lt;br /&gt;
&lt;br /&gt;
その仮想ネットワークデバイスにIPアドレスを設定しTCP/IPで利用する形にします。&lt;br /&gt;
&lt;br /&gt;
===  ifconfig ===&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスにTCP/IPに必要なパラメータを設定するのはifconfigコマンドです。これは米カリフォルニア大学バークレー校でBSDに組み込んだTCP/IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。&lt;br /&gt;
&lt;br /&gt;
低いレベルでコントロールする方法を理解したい、あるいはツールを作成したいと思った時は netdevice のオンラインマニュアルにヒントがあります。&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfigをオプションなしに実行すると、現在のeth0やloが表示されます。&lt;br /&gt;
&lt;br /&gt;
  $ ifconfig&lt;br /&gt;
  eth0      Link encap:Ethernet  HWaddr 00:15:c5:41:95:a0  &lt;br /&gt;
          inet addr:192.168.100.18  Bcast:192.168.100.255  Mask:255.255.255.0&lt;br /&gt;
          inet6 addr: fe80::215:c5ff:fe41:95a0/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:350974 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:291913 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:329347998 (329.3 MB)  TX bytes:36362966 (36.3 MB)&lt;br /&gt;
          Interrupt:18 &lt;br /&gt;
  lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:340 (340.0 B)  TX bytes:340 (340.0 B)&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスeth0はEthernetに接続され、IPアドレス192.168.100.18が設定されています。&lt;br /&gt;
&lt;br /&gt;
loはローカルホストです。これは127.0.0.1が割り当てられます。127.0.0.1は特殊なアドレスでこれは自分自身のマシンを指します。&lt;br /&gt;
ホスト名はlocalhostとなっています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ブート時にはIPアドレスの設定などifconfigコマンドを使っています。デスクトップやノートパソコン、特にモバイルのように色々なネットワーク上で動作させるようなコンピュータはDHCP&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
ISC DHCP &lt;br /&gt;
https://www.isc.org/downloads/dhcp/&lt;br /&gt;
ここにDHCPのリファレンス実装があります。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
を使ってそのネットワーク上で自動割り当てされるのが一般的ですが、ここではまず固定IPの話から進めましょう。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 up&lt;br /&gt;
&lt;br /&gt;
これはeth0のインタフェースを利用可能にします。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 192.168.201.3/24&lt;br /&gt;
&lt;br /&gt;
こう実行することによってeth0にはIPアドレス192.168.1.3、ブロードキャスト:192.168.1.255、マスク:255.255.255.0が設定されます。&lt;br /&gt;
&lt;br /&gt;
ここではeth0に設定していますが物理的に1つのNICに複数のIPアドレスを付与できます。&lt;br /&gt;
むかしならNIC(network interface card)に1つのIPアドレスしか付加できませんでしたが、&lt;br /&gt;
複数のIPアドレスが設定する場合、eth0:1、eth0:2といった形でMACアドレスが同じである&lt;br /&gt;
eth0のインタフェースが作られます。&lt;br /&gt;
&lt;br /&gt;
  $ sudo ifconfig eth0:1 192.168.100.99/24&lt;br /&gt;
  $ ifconfig eth0:1&lt;br /&gt;
 ifconfig eth0:1&lt;br /&gt;
 eth0:1    Link encap:イーサネット  ハードウェアアドレス 14:da:e9:71:cd:35  &lt;br /&gt;
          inetアドレス:192.168.100.99  ブロードキャスト:192.168.100.255  マスク:255.255.255.0&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1&lt;br /&gt;
          割り込み:47 ベースアドレス:0xc000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(TBD)&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=985</id>
		<title>TCP/IP</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=TCP/IP&amp;diff=985"/>
		<updated>2014-02-11T14:07:51Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* UNIXとTCP/IP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== まずはじめに ==&lt;br /&gt;
&lt;br /&gt;
本章でのTCP/IPの取り上げるスタンスについて説明します。&lt;br /&gt;
本章では、UNIXとTCP/IPの関係性を取り上げ、GNU/Linuxの中でどう扱われているかの議論を試みます。TCP/IP自体の説明、また、インターネット自体の説明は本章の趣旨ではないので本章では扱いません。またTCP/IPに関する基本知識(例えば 3 way handshakeなど)は既に学習しているものとして話を進めます。&lt;br /&gt;
&lt;br /&gt;
GNU/LinuxはTCP/IPだけではなく、Appletalk、DECNETなど多数のプロトコルをサポートしていますが、本章では主要な論点であるTCP/IPのみ取り上げます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UNIXとTCP/IP == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPとは1970年代初頭にDRAPAの研究成果として既に出来上がったネットワーク通信用プロトコルで、元々はUNIXにはなかった機能です。DARPAからの研究資金を得て、4.1bBSD(1982年8月)に対してBBN Technologiesで実装されていたTCP/IPコードをベースとして組入れるという作業が始まり4.2BSDで正式にTCP/IPを含んでリリース(1983年8月)となりました。ここでは「BBNの実装ベースで」とあっさり書いていますが、実際にはもうちょっと複雑な話になっています。&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
詳しくは Open Sources: Voices from the Open Source Revolution に納められているMarshall Kirk McKusickが書いたTwenty Years of Berkeley Unix From AT&amp;amp;T-Owned to Freely Redistributable を読むことをお勧めします。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TCP/IPというとインターネット用プロトコルというイメージがありますが、当時のBSDの実装はイーサーネット接続されたLANやキャンパスネットワークで高速に情報を伝達するのに適したものになっています。一方でオリジナルのBBNの実装は広域なネットワークであるインターネットで使うことを前提としているもので、そのため80年代当時の低速なネットワーク向けに作られています。このようにターゲットとなるネットワークの前提が違うため、BBNの実装をそのままBSDに組み込んだような単純な話ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
この期間でのエポックとしては1983年1月1日にARPANETの公式プロトコルはTCP/IPに切り替わっています。 &amp;lt;ref&amp;gt; 核戦争にも耐えうる軍事ネットワークを作るためにインターネットを作ったという俗説がまことしやかに流れていますが、そのような事実はありません。Internet Society のサイトにある [http://www.internetsociety.org/internet/what-internet/history-internet/brief-history-internet Brief History of the Internet] に目を通して正しいインターネットの歴史の全体像を知っておきましょう。 &amp;lt;/ref&amp;gt; 当時TCP/IPの実装を持っていたオペレーティング・システムはそんなに多くはなく、BSDの他の名の知れたシステムはDEC社のTOPS-20 system &amp;lt;ref&amp;gt; http://panda.com/tops-20/ by Mark Crispin &amp;lt;/ref&amp;gt; ぐらいです。当時、DARPAの資金で開発した、他に参考となる実装が多くなく、ソースコードが公開されているなどのいくつかの要因により実質BSDがコンピュータにおけるTCP/IPのリファレンス実装となっていました。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
リファレンス実装であったというおもしろい傍証は1997-8年頃に問題となった [http://en.wikipedia.org/wiki/Ping_of_death Ping of Death] のケースが良いかも知れません。これは規定外サイズのICMPパケットを脆弱性を持つシステムに送るとオペレーティングシステムごとハングアップしてしまうというものです。そもそもの原因はBSDのコードがパケットの分割を考えていなかった実装だったからです。分割されるケースを設計時点で考慮に入れなかったある意味、単純なバグで、そんなに深い意味はありません。もし、IPパケットとICMPパケットの仕様&amp;lt;ref&amp;gt;[http://tools.ietf.org/html/rfc791 RFC791]&amp;lt;/ref&amp;gt;だけで作っていたら設計時に考慮し、この脆弱性はたぶん現れないでしょう。しかし実際にはGNU/LinuxだけではなくMacintoshやWindowsにも同じ脆弱性が現れました。このことから仕様ドキュメントから設計をしたわけではなく、商用のオペレーティングシステムもオープンなコードであるBSDのTCP/IPコードをリファレンスとしていたのではないかといわれています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xerox PARCで開発されたイーサーネット、TCP/IP、そしてBSDの組み合わせによって構築されたLANがARPANET経由でエンド・ツー・エンドで接続し広域ネットワークを構築してしまうという当時は技術的にかなり画期的な仕組みであり、これこそ今日私たちがインターネットと呼んでいるものそのものです。ですからUNIXの存在はインターネットの大きな礎としての存在であったといっても決して過言ではありません。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Internet Protocol Suite ===&lt;br /&gt;
&lt;br /&gt;
BSD由来のTCP/IPの特徴は、クライアントだけでなく、サーバだけでもなく、ルーターだけでもない、TCP/IPの機能一式をもったInternet Protocol Suiteの実装であるということです。つまり、UNIXはサーバとしても使え、クライアントとしても使え、そしてまたルーターとしても使えるということです。もちろんその上で動作するアプリケーションは、TCP/IPの機能をフルに使うことができます。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GNU/Linuxベースのサーバーやクライアントはインターネットにおける日常の風景的な部分ではありますが、形をかえて組み込み系でも市販のルータの中身がGNU/Linuxベースであったりするものよく見かけます。もちろんGNU/Linuxは、Internet Protocol Suiteで一式揃えているので、サーバとクライアントとルータやブリッジを同時に兼ねることも当然可能です。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
典型的なのがGNU/Linux上で動作するバーチャルマシン・モニタXenのネットワーク構成です。Xenのドメイン0 (他の仮想マシンを動かすためのベースとなる環境）では、内部的にブリッジの機能を作り、ドメインU（個々の仮想マシン）からはそこに仮想的に接続する形を取りネットワークを形成します。このために特別なプロトコルスタックを用意するわけではありません。既にGNU/Linuxには必要なネットワークの能力が用意されているのです。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一般にTCP/IPのようなプロトコルが重ねられている構造のことをプロトコルスタック ( Protocol Stack ) と呼びます。&lt;br /&gt;
そして各々のプロトコルのメカニズムあるいは実装のことを、その層のスタック、たとえばTCPであればTCPスタック、IPであればIPスタックと呼びます。意味は、TCPの層だけではなく、その下層も含めたメカニズムあるいは実装をさしています。&lt;br /&gt;
&lt;br /&gt;
== GNU/Linux での TCP/IP ==&lt;br /&gt;
&lt;br /&gt;
まずEthernetを前提に基本的な部分を説明したいと思います。&lt;br /&gt;
GNU/LinuxではEthernetのデバイスは基本的にeth0から順番に割り当てられます。&lt;br /&gt;
むかしはNIC (Network Interface Card)に対応するデバイスファイル /dev/eth0 というのがあったのですが、今ではそれが存在せず内部的にeth0、eth1という仮想的なネットワークデバイスになっています。&lt;br /&gt;
慣用的にloはローカルホスト、eth0はEternet、wlan0は無線LANの仮想ネットワークデバイスとして命名されていますが、これは任意な名前であり、たとえば、新たにPPP (シリアル経由でpoint-to-point接続するプロトコル)で接続を作る時はppp0や、 easytether (AndroidをUSBで接続しテザリングをするツールを利用)など仮想ネットワークデバイスは自由度の高い名前をつけることができます。同種類のデバイスが増えるたびに番数が増えます(eth0, eth1, ... )。&lt;br /&gt;
&lt;br /&gt;
* lo ローカルホストのための仮想ネットワークデバイス&lt;br /&gt;
* eth0 Ethernetのための仮想ネットワークデバイス&lt;br /&gt;
* wlan0 無線LANのための仮想ネットワークデバイス&lt;br /&gt;
&lt;br /&gt;
その仮想ネットワークデバイスにIPアドレスを設定しTCP/IPで利用する形にします。&lt;br /&gt;
&lt;br /&gt;
===  ifconfig ===&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスにTCP/IPに必要なパラメータを設定するのはifconfigコマンドです。これはバークレー大学でBSDに組み込んだTCP/IPの実装が作られた時に、IPアドレスやネットマスクなどのパラメータを設定する、あるいは参照するのに作られたコマンドですが、そのまま今もスタイルを変えず使われています。グラフィカルインタフェース〜といっても項目をリストアップする程度のものですが〜を使って設定するツールは存在しますが、システムがブートする段階でIPの制御を行うのがifconfigです。&lt;br /&gt;
&lt;br /&gt;
低いレベルでコントロールする方法を理解したい、あるいはツールを作成したいと思った時は netdevice のオンラインマニュアルにヒントがあります。&lt;br /&gt;
&lt;br /&gt;
/sbin/ifconfigをオプションなしに実行すると、現在のeth0やloが表示されます。&lt;br /&gt;
&lt;br /&gt;
  $ ifconfig&lt;br /&gt;
  eth0      Link encap:Ethernet  HWaddr 00:15:c5:41:95:a0  &lt;br /&gt;
          inet addr:192.168.100.18  Bcast:192.168.100.255  Mask:255.255.255.0&lt;br /&gt;
          inet6 addr: fe80::215:c5ff:fe41:95a0/64 Scope:Link&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
          RX packets:350974 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:291913 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:1000 &lt;br /&gt;
          RX bytes:329347998 (329.3 MB)  TX bytes:36362966 (36.3 MB)&lt;br /&gt;
          Interrupt:18 &lt;br /&gt;
  lo        Link encap:Local Loopback  &lt;br /&gt;
          inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
          inet6 addr: ::1/128 Scope:Host&lt;br /&gt;
          UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
          collisions:0 txqueuelen:0 &lt;br /&gt;
          RX bytes:340 (340.0 B)  TX bytes:340 (340.0 B)&lt;br /&gt;
&lt;br /&gt;
仮想ネットワークデバイスeth0はEthernetに接続され、IPアドレス192.168.100.18が設定されています。&lt;br /&gt;
&lt;br /&gt;
loはローカルホストです。これは127.0.0.1が割り当てられます。127.0.0.1は特殊なアドレスでこれは自分自身のマシンを指します。&lt;br /&gt;
ホスト名はlocalhostとなっています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ブート時にはIPアドレスの設定などifconfigコマンドを使っています。デスクトップやノートパソコン、特にモバイルのように色々なネットワーク上で動作させるようなコンピュータはDHCP&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
ISC DHCP &lt;br /&gt;
https://www.isc.org/downloads/dhcp/&lt;br /&gt;
ここにDHCPのリファレンス実装があります。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
を使ってそのネットワーク上で自動割り当てされるのが一般的ですが、ここではまず固定IPの話から進めましょう。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 up&lt;br /&gt;
&lt;br /&gt;
これはeth0のインタフェースを利用可能にします。&lt;br /&gt;
&lt;br /&gt;
 # ifconfig eth0 192.168.201.3/24&lt;br /&gt;
&lt;br /&gt;
こう実行することによってeth0にはIPアドレス192.168.1.3、ブロードキャスト:192.168.1.255、マスク:255.255.255.0が設定されます。&lt;br /&gt;
&lt;br /&gt;
ここではeth0に設定していますが物理的に1つのNICに複数のIPアドレスを付与できます。&lt;br /&gt;
むかしならNIC(network interface card)に1つのIPアドレスしか付加できませんでしたが、&lt;br /&gt;
複数のIPアドレスが設定する場合、eth0:1、eth0:2といった形でMACアドレスが同じである&lt;br /&gt;
eth0のインタフェースが作られます。&lt;br /&gt;
&lt;br /&gt;
  $ sudo ifconfig eth0:1 192.168.100.99/24&lt;br /&gt;
  $ ifconfig eth0:1&lt;br /&gt;
 ifconfig eth0:1&lt;br /&gt;
 eth0:1    Link encap:イーサネット  ハードウェアアドレス 14:da:e9:71:cd:35  &lt;br /&gt;
          inetアドレス:192.168.100.99  ブロードキャスト:192.168.100.255  マスク:255.255.255.0&lt;br /&gt;
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1&lt;br /&gt;
          割り込み:47 ベースアドレス:0xc000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(TBD)&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[目次]]へ&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:DRM20080110.pdf&amp;diff=984</id>
		<title>ファイル:DRM20080110.pdf</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:DRM20080110.pdf&amp;diff=984"/>
		<updated>2014-02-11T13:47:50Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: UnixWikiMaster 「ファイル:DRM20080110.pdf」の新しい版をアップロードしました&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DRM 今そこにある危機&lt;br /&gt;
講演資料&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:FreeSoftware20080110.pdf&amp;diff=979</id>
		<title>ファイル:FreeSoftware20080110.pdf</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:FreeSoftware20080110.pdf&amp;diff=979"/>
		<updated>2014-02-11T13:45:06Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: UnixWikiMaster 「ファイル:FreeSoftware20080110.pdf」をアップロードしました&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;フリーソフトウェアをめぐる状況 2008年1月版&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=UNIX%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=978</id>
		<title>UNIXオペレーティングシステム</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=UNIX%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0&amp;diff=978"/>
		<updated>2014-02-11T12:43:43Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* QRコード */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
このサイトはGNU/Linuxを通してUNIXオペレーティングシステムを学ぶ授業で使うテキストを掲載しています。詳しくは[[このサイトについて]]のページを参照ください。また何故Linuxを取り上げるのかは「[[なぜUNIXオペレーティングシステムの授業にGNU/Linuxを取り上げるのか]]」を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== テキストの[[目次]] ===&lt;br /&gt;
&lt;br /&gt;
* 第一章 [[オペレーティングシステムとは何か]]&lt;br /&gt;
** 第一章:補遺:1 [[UNIXとは何か]]&lt;br /&gt;
** 第一章:補遺:2 [[OS誕生からLinuxまでの歴史]]&lt;br /&gt;
* 第二章  [[実際にLinuxを使ってみよう]]&lt;br /&gt;
** 第二章:補遺:1 [[KNOPPIXを使ってみよう]]&lt;br /&gt;
** 第二章:補遺:2 [[Ubuntuインストール方法]]&lt;br /&gt;
* 第三章 [[システム環境を考えてみる]]&lt;br /&gt;
* 第四章 [[カーネルの構造と機能]]&lt;br /&gt;
* 第五章 [[プロセス管理]]&lt;br /&gt;
* 第六章 [[記憶管理]]&lt;br /&gt;
* 第七章 [[デバイススペシャルファイル]]&lt;br /&gt;
** 第七章: 補遺:1 [[Linux LVM]]&lt;br /&gt;
* 第八章 [[ファイルシステム]]&lt;br /&gt;
* 第九章 [[ユーザ権限とアクセス制御]]&lt;br /&gt;
** 第九章: 補遺:1 [[パスワードファイル]]&lt;br /&gt;
* 第十章 [[プロセス間通信]]&lt;br /&gt;
* 第十一章 [[TCP/IP]] (TBD)&lt;br /&gt;
&lt;br /&gt;
テキストの[[目次]]はこちらからも参照できます。&lt;br /&gt;
&lt;br /&gt;
=== QRコード ===&lt;br /&gt;
&lt;br /&gt;
このページへのQRコードです。&lt;br /&gt;
iPhone や Android からアクセスする際にお使いください。&lt;br /&gt;
&lt;br /&gt;
[[image:QRcode.png|150px]]&lt;br /&gt;
&lt;br /&gt;
=== 授業用Wikiページ ===&lt;br /&gt;
&lt;br /&gt;
課題、授業スケジュール、連絡など授業に関する情報は以下のURLからたどることができるpukiwikiに掲載しています。尚、こちらのpukiwikiはbasic認証が必要です。&lt;br /&gt;
&lt;br /&gt;
* http://uc.h2np.net/senshu-u/&lt;br /&gt;
&lt;br /&gt;
*  2008年1月11日の講演スライドはこちらで公開しています [[外部向け資料配布用ページ]]&lt;br /&gt;
&lt;br /&gt;
=== 参考になる本 ===&lt;br /&gt;
&lt;br /&gt;
参考になる本をアマゾンでピックアップしておきました。&lt;br /&gt;
&lt;br /&gt;
* http://astore.amazon.co.jp/h2npbook-22&lt;br /&gt;
&lt;br /&gt;
=== 過去の資料 ===&lt;br /&gt;
&lt;br /&gt;
* [[2007年リチャードストールマン講演会]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
過去に掲示した内容等は[[過去掲示分]]からもたどれます。&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:QRcode.png&amp;diff=977</id>
		<title>ファイル:QRcode.png</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:QRcode.png&amp;diff=977"/>
		<updated>2014-02-11T12:43:01Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: UnixWikiMaster 「ファイル:QRcode.png」の新しい版をアップロードしました&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;このサイトへのQRコード&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:QRcode.png&amp;diff=976</id>
		<title>ファイル:QRcode.png</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:QRcode.png&amp;diff=976"/>
		<updated>2014-02-11T12:39:17Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: UnixWikiMaster 「ファイル:QRcode.png」の新しい版をアップロードしました&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;このサイトへのQRコード&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
	<entry>
		<id>https://uc2.h2np.net/index.php?title=Ubuntu%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB:Step_1&amp;diff=975</id>
		<title>Ubuntuマシンインストール:Step 1</title>
		<link rel="alternate" type="text/html" href="https://uc2.h2np.net/index.php?title=Ubuntu%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB:Step_1&amp;diff=975"/>
		<updated>2014-02-11T12:32:48Z</updated>

		<summary type="html">&lt;p&gt;UnixWikiMaster: /* キーボードを選択する */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Ubuntuマシンインストール方法]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CDでブートしてからキーボード設定まで ==&lt;br /&gt;
ここではCDでブートしてからキーボード設定までのステップを説明します。約３〜５分で程度で終了します。&lt;br /&gt;
&lt;br /&gt;
== 何を行うか選択する ==&lt;br /&gt;
[[画像:Ubuntu_804_3.png]]&lt;br /&gt;
&lt;br /&gt;
CDからブートするためにはBIOSで&amp;quot;CDROMからブート&amp;quot;を最優先にする設定を行うか、&lt;br /&gt;
立ち上がり時にファンクションキー&lt;br /&gt;
&amp;lt;ref&amp;gt;&lt;br /&gt;
DELLのLATITUDEシリーズだとF2キーがBIOSへ、F12がブートメニューの画面に入ります。&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
を押しブートメニュー画面に入り&amp;quot;CDROMからブート&amp;quot;を選択します。&lt;br /&gt;
&lt;br /&gt;
* コンピュータに変更を加えないで Ubuntu を使ってみる&lt;br /&gt;
* Ubuntu インストール&lt;br /&gt;
* CDの異常をチェック&lt;br /&gt;
* メモリーテスト&lt;br /&gt;
* 一番目のハードディスクから起動&lt;br /&gt;
&lt;br /&gt;
インストールですから「Ubuntu インストール」を選択します。&lt;br /&gt;
&lt;br /&gt;
;ちょいアドバイス:最初の「コンピュータに変更を加えないで Ubuntu を使ってみる」は、LiveCDとしてUbuntuを使うことができます。自分でUbuntuインストーラーのISOイメージをダウンロードしCDメディアに焼き付けた人は念のために「CDの異常をチェック」を行うのも良いかもしれません。自作PCで初めて利用する時はメモリーテストを最初に行うのも良いでしょう。&lt;br /&gt;
&lt;br /&gt;
== 言語を選択する == &lt;br /&gt;
&lt;br /&gt;
[[画像:Ubuntu_804_4.png]]&lt;br /&gt;
&lt;br /&gt;
日本語を選択するとシステムのデフォルト言語が日本語に設定されます。ここでは日本語を選択していますが、あなたのお好きな言語を選択してください。&lt;br /&gt;
&lt;br /&gt;
== 利用地域を選択する == &lt;br /&gt;
&lt;br /&gt;
[[画像:Ubuntu_804_5.png]]&lt;br /&gt;
&lt;br /&gt;
これは利用している地域を選択します。都市名で選択します。これによって自動的に最寄りの（日本なら、日本国内の）ダウンロードサーバーが選択されます。また時間帯など地理情報に関係する設定がこの情報によって設定されます。&lt;br /&gt;
&lt;br /&gt;
== キーボードを選択する ==&lt;br /&gt;
&lt;br /&gt;
[[画像:Ubuntu_804_6.png]]&lt;br /&gt;
&lt;br /&gt;
キーボードを選択します。&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:right&amp;quot;&amp;gt;&lt;br /&gt;
[[Ubuntuマシンインストール:Step_2]]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 脚注 ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>UnixWikiMaster</name></author>
	</entry>
</feed>