2001.9.21

フリー UNIX 利用のサーバ上での Web,CGI， Samba 共有を利用した学習環境の構築

北海道滝川工業高等学校三浦憲一

おことわり：

(1) ファイルパス名の区切りに￥文字の代わりにバックスラッシュで印刷されているところがあります。 (2) 特に断らない場合， Windows は Microsoft Windows95,Windows98,WindowsNT 等を示します。また単に WindowsNT とあるのは WindowsNT Workstation を表します。

(3) ここで free-UNIX とはパソコン上で動作する使用権フリーの UNIX 仕様の OS を総称したものです。

目次

1 はじめに 2

2 UNIX 2 2.1 UNIX への偏見 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.2 導入の動機 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.3 free-UNIX OS の導入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.4 free-UNIX サーバーの導入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Samba 4 3.1 Samba とはなにか . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Samba で実現した共有環境 5 4.1 仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2 実装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.3 CGI の利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 Samba での課題 7

6 参考ソースリスト 9

1 はじめに

以下の内容は，前任校での実施内容を元に述べたものである。情報処理の授業と，管理責任者になって（されて）しまったときの環境構築である。学校事情により前者の教科指導を優先はさせたが，どの教科・科目，あるいは教科指導以外の領域でも等しく利用可能なシステムとしての構築に努めた。ひとつのシステム環境設計例として見て頂ければありがたい。

今回のレポートにまとめるにあたり，追試を行いたい部分もあったのだが生憎，現任校のパソコンの更新とぶつかり出来なかった。ネットワーク規模に依存しない一部については，自宅内の LAN 上で再度確認したものもある。

また，使用したのは Samba(1.9.18p10),apache(1.3.3) である。特に Samba は 2.0 以降に大幅な機能拡張が行われている。詳しくは Samba 関連のサイト^{1}を参照されたい。

2 UNIX

2.1 UNIX への偏見

自分自身，個人では UNIX に興味が無い訳ではなかった。実際，私の年代では UNIX とは「大型機」で動かすものであり，お家で個人で動かす OS では有り得なかったからである。

同時に，ネットワークを支えているのも UNIX であり，今日の「趣味：インターネット」などという考えてみれば意味がよく分からない使い方に成る程に，ネットワークを社会のインフラとして普及させたシステムを支えているのは UNIX に他ならない。

だから，その面影がいたるところで顔を覗かせる。パソコン通信やプロバイダに接続するときのログイン画面が然り。ただ，インフラだけに地味に影で支えているので気づかぬ人も多いのか，パソコンのエンドユーザーには然程人気が無かった。

パソコンの OS として Windows が席捲すると世人にはパソコンは Windows で動くものといった妄想を巻き起こしてしまった。

実際，「UNIX は Windows より難しい。」とか「Windows は管理が易しい。」とよく言われるし自分自身もそう言われたことがある。管理が物的，技術的，さらに場合によっては人的要素によって難しいのはどちらでも同じである。ここで問題になるのは，仕様などの技術的情報の有無である。

Windows は所詮１企業の製品であり，未公開の内容も多い。一方 UNIX は仕様を共通化した OS であり，商業版でさえその仕様は同じである。それは様々な形で文書化され，書籍にもなっているので，情報を容易にそして安価に手に入れることが出来る。（なかなかこのあたりの予算が貰えない「学校」にあっては魅力だ。）

統一された仕様の上には，開発のしやすさから様々なアプリケーションが実現されている。使用権フリーのものも多い。ひとつの社会が構築されている。「よく枯れた」確実な動作が保証されたものが多いのである。

UNIX は使えるものだと思われるのだが。

2.2 導入の動機

「個人ではいいけど，学校へはどうもな。」

1日本 Samba ユーザー会 http://www.samba.gr.jp

そもそもの私の考えである。操作性や管理の容易さを含めた性能で UNIX は WindowsNT Server に優ることはあっても劣ることは無いのだが^{2}いちいち， UNIX の長所を説明するのも時間がかかる。何より問題なのは，多くの使用者（＝職員）にとっては目の前の自分の使うワープロソフトが動けばいいのであって，管理は他人の問題である。しかも，知っているブランド製品を使いたがる。

しかし，その管理担当になった者はたまらない。情報処理の授業と，管理責任者の仕事が一度に回ってきたでのその他人が自分のことになってしまったのである。手間は二の次にして，先述の技術情報が乏しいことが大変な理由である。少なくとも近い未来においても，管理のための人と時間は手当てされないとのことなので，少しでも管理に手間と無駄な時間のかからないシステムを作りたいとの考えから導入した。

2.3 free-UNIX OS の導入

目的

1. 管理の容易さ (既述）

2. 教材の提示提出に確実なファイル共有素材となる教材を与えるのに，直接ファイルを渡したい。あるいは受け取りたい。メールで送る方法もあるが，場合によっては 2 個所に同じ内容のファイルが存在することになる可能性もある。何よりイントラネット内にメールサーバを置きたくなかった。また，アプリケーションの大きなファイルをたくさん送り付けられてはこちらがパンクしてしまう。個人毎のホームディレクトリならば管理は自分でやらなければならなくなる。フィードバックループに人間を入れたのである。勿論，共有実現のソフトウェアにはディレクトリ容量制限の機能もあったことも実現を容易にした。ファイル共有が出来るだけなら既にあった OS でよかったのだが，他人のディレクトリが覗けてしまうなどの動作が少なくないとの報告が複数からあり，この点を改善したかった。アクセス権の管理の厳格な実装は，セキュリティの面からも，次に述べる CGI も含めたプログラムを走らせるときの必須条件である。クライアントは WindowsNT なので，その橋渡しとして Samba が必要になった。

3. CGI を含む WWW サーバ学習活動に利用する際に，コンテンツの動的生成機能の有無は学習者にフィードバック出来る内容の個別化を図れるか否かに関係し，利用範囲や効果を高めることが期待出来る。また，指導者が学習者の学習状況やシステム状態を把握するのにも即時的に動的な統計処理が行え，管理的活動の補助となる仕組みが必要であると考えた。この大きくふたつの目的から， WWW サーバには CGI の処理機能を持たせることにした。 CGI の処理は様々な OS，言語で可能でだが，先述のセキュリティや安定性が確保されていて初めて実用になる。また Windows 系の OS の，長いファイル名と短いファイル名の２通りのファイル名の変換が一意でないことも考慮した理由のひとつであった。結局，ごく普通に Perl を使用することにした。

2UNIX ではセキュリティに TCP ポートの 1023 番以下が特に大きく関わる。しかし WWW サーバーが標準で用いる TCP ポートはその中の 80 番である。 Windows 上での実行が有利になる数少ない例である。

2.4 free-UNIX サーバーの導入

基本システムは WindowsNT Server と WindowsNT(OS 未対応のアプリケーション利用の計画もあったので一部に Windows98 も搭載) で納品されていたが，これに free-UNIX マシンを 1 台追加した。

実際には余裕があった生徒用マシンの 1 台に WindowsNT に加え free-UNIX もインストールした。これら二つの OS は LILO と呼ばれる起動ユーティリティで選択も出来るようにした上で平常時は優先的に free-UNIX サーバとして使用した。^{3}クライアント機といえ一昔前のサーバ機をしのぐ処理速度と 2 次記憶容量を持っている。 CGI の処理もここで行う。ただし，熱特性を考えて 24 時間稼動はせず，授業とその準備中にのみ動作させた。

この上で教材提示用の WWW サーバと Samba も走ることになる。^{4}

3 Samba

3.1 Samba とはなにか

Samba はファイルサーバやプリンタサーバとして動作させるためのソフトウェアである。いわゆる Windows マシンで構成したネットワークでファイルサーバやプリンタサーバの機能を

実現しているのは，主にネットワーク共有サービスとネットワーククライアントのふたつである。この 2 者間での”やりとり (SMB ^{5})” と等価なやりとりが出来れば，サーバー機はどの OS でもよいことになる。

Samba は共有サービスに相当する動作を UNIX 上で実行させるためのソフトウェア群である。また， Samba は他の系統の OS とのファイル共有のためのやりとりにも対応しており，最近で

は OS を越えたシステム実現の中核として，商業ベースでも普及してきている。^{6}

3.2 特徴

1. プログラムが軽いこと。元々UNIX 自体が軽いこともあるが，正確な能力の比較は諸条件を加味して行わなければならず，簡単に論じられる問題ではない。ただ「クライアント機が 5 台を超えると Samba が有利」との報告もある。 (前述の Samba のサイト参照。 )

2. 使用権フリーであること。予算不足に悩むことも無い。また，それを理由に，違法コピーが横行することも無い。 3. UNIX(free-UNIX も含めて) 上で動くこと。

3Windows クライアントと free-UNIX サーバでは性格が全く異なるので，ネットワーク上での名前や IP アドレスなどは別個のものとし，トラブルを避けるようにした。

4この時点の Samba はログインの認証の主 (PDC) にはなれなかったので，認証はすでにある WindowsNT Server を使用した。この free-UNIX サーバもその配下にあり，クライアントとして扱われる。ライセンス数に注意を要する。

5Server Message Block プロトコルの略。システムがリモートシステム上のファイルに透過的にアクセスできるように設計されたファイル共有プロトコル

6Apple 機を混在したネットワークなど

すでに記したように free-UNIX は少ないリソースで動く OS である。 Windows マシンとしては古くなったマシンでも，十分に実用になる。また， UNIX は所有者権限やアクセス権などのファイル管理が厳しく，しかも実装されているので安定した動作が望める。 OS によってはこの実装が甘いものもあり注意を要する。また， UNIX 上の様々なソフトウェア群の使用が可能。

4. アクセス権が細かく決められ，設定も容易にできる。

5. UNIX の知識を必要とする。

4 Samba で実現した共有環境

4.1 仕様

1. 使用者の生徒には ID として ”S”+”数字 4 桁” ^{7} が指定されている。教職員には”T”で始まるものなど，カテゴリ分けがされている。

2. 情報処理教室内のマシンの IP アドレスは固定しており， DHCP は用いていない。したがって， IP アドレスとマシン名は固定的に１対１に対応する。

3. 同じ授業でも教室内のどのマシンを使うかは厳密には固定していない。すなわち，同一の生徒でも別のマシン（＝別の IP アドレス）を使用することがある。

4. 生徒も含め使用者には free-UNIX マシンに個人別のホームディレクトリを確保し割り当ててあるが，実際にはこれを homes の名称でこの個人に共有提供する。具体的には各生徒の WindowsNT マシン上で，これをディスクドライブ H: として使用できるようにする。つまり UNIX マシン上のディレクトリ

/home/s1001/ →  生徒 s1001 が使用中のマシンの H:ドライブ
/home/s1002/ →  生徒 s1002 が使用中のマシンの H:ドライブ
/home/s1003/ →  生徒 s1003 が使用中のマシンの H:ドライブ

4.2 実装

Samba 側では次の動作を行う

1. free-UNIX サーバは WindowsNT Server に対しては１クライアントとしてネットワークに参加する。

2. Samba は server モードと呼ばれる設定で動作させる。すなわちログイン認証は WindowsNT Server に任せ，正規に認証されたユーザ名（＝生徒 ID）により，そのホームディレクトリを該当のマシンに対して homes の共有名で提供する。なおこれらの設定については一例を後に示す。 · · · · · ·List3 参照一方，各マシンにおいては， WindowsNT はログイン時に systemroot/system32/Repl/Import/Scripts/netlogon.bat 等を実行する。^{8} したがって，その中に次のコマンドを含め実行させる。

7学年２クラスの学校だったことによる。 (例)3 年 A 組出席番号 1 番＝ S3101

         @echo␣off
         net␣use␣H:␣￥￥free-UNIX-SERVER-NAME￥homes
         echo␣こんにちわ%USERNAME%

echo␣リターンキーを押してください

         pause

以上で各個人ごと別々のホームディレクトリが，ドライブ H:として使用できる。なおこの場所は教材提示，課題提出の為の場所とし，指導者が自由に覗けるものとした。選択

授業での使用であったが，教科指導者用のディレクトリから関係各生徒のディレクトリへリンクを張ることにより，自由に加除訂正が可能である。^{9}

なお，他人の ID とパスワード使っても入れてしまうが，認証上のセキュリティの問題はパスワードの真偽にとどめている。 ID やパスワードの教え合いはシステムで対処出来るものではなく，最終的には「ネチケット」といわれる問題であり，また後述の CGI で作成した出席状況報告画面と生徒の顔を確認すればよいとした。

4.3 CGI の利用

授業時間の開始時にはブラウザを起動する。スタートのページには free-UNIX マシンの WWW サーバのドキュメントルート (http://free-UNIXserver/) が指定されている。このとき補完するファイル名は index.htm なので動作は

1. サーバ上の index.htm ^{10} · · · · · ·(List1 参照) を表示する。

2. index.htm 中に埋め込まれた meta ヘッダの refresh オプションにより， /cgi-bin/lessonnow.cgi に飛ばせて実行。 · · · · · ·List2 参照この CGI により，ブラウザには時刻等を表示させ確認させるとともに， WWW サーバ側ではどこからアクセスしたかマシンの IP アドレスと時刻とを記録する。

3. さらに，同じく refresh の使用で，生徒用の学習開始時のページ/html/lesson/lesson.htm へジャンプする。ここには，各教科等への入り口があり，必要な内容のところを選択させる。標準的なヘルプ集などの入り口もここに設けた。

さて， UNIX のシステム設定や履歴のためのファイルは基本的にテキストファイルなので，中身を見れば直ちにわかる。またそれらを処理し書式を整えることは易しい。 Samba も動作状況を履歴ファイルに吐き出している。書式や吐き出す詳細の程度は設定により変更が可能である。この履歴ファイルを走査し，この日のこの時間のログオンの状況を整理し報告用に書式化すると出席やマシンの使用状況に関する内容が得られる。これらも CGI により実現した。ブラウザ上で確認出来るので，離れていても出来るしどこからでも可能に出来る。^{11}

8MicrosoftWindowsNTWorkstation Resource Kit P.26 ただし Profile での指定に依存する。 9ホームディレクトリの中に提出用と秘密用 ( ？ ) のサブディレクトリを作りそれぞれ共有提供することも可能である。例えば一人の生徒 (ID=S1001) について

/home/s1001/TEISYUTSU/→ドライブ H:

/home/s1001/HIMITSU/→ドライブ J:

など 10Windows や MS-DOS でのファイル作成も有り得たので拡張子は 3 文字としていた

Samba の履歴を利用すれば IP アドレスから生徒 ID がわかり，個人が特定出来る。 CGI は IP アドレスを捕まえられるから，それを元に個人毎の内容を送り返すことが出来ることになる。

5 Samba での課題

1. フリーウェアであること。最近は free-UNIX についても有償サポートがビジネスとして成立しつつある。

2. 漢字コードの問題ファイル名，あるいは共有名に漢字を使った場合の諸問題である。コードが絡むだけに元来複雑な問題である。最近，著しく改善されている。

3. 認証時のパスワード Windows95 OSR1 まで， WindowsNT4.0 SP2 まではログイン時のパスワードが平文であり，このあとの Windows は暗号化されている。混在したときの問題であり，平文が直ちに危ないということではない。

4. プリンタの共有これについては貧弱である。

5. (Samba に限らず) ネットワーク設計運用思想どの OS を選択しても，管理が難しい。また，学校でも著作権などの意識は高くない。「先生はマニュアルをよく読まない。」これは製品について来るものばかりでなく，校内で作成されたものについても同様。

おしまいに最後になりましたが，今回の発表の機会を作ってくださった事務局はじめ運営担当の皆さん，ま

た特に「これをきっかけに書きまとめるものだよ。」と諭して下さった札幌藻岩高校の菅原満先生に深く感謝申し上げます。ありがとうございました。

【(主な) 参考文献】・蔭佐勲ほか「小中学校における情報教育の推進に関する研究」『研究紀要 (第 126 号)』北海道道立教育研究所 (平成 10 年 3 月) ・山田明弘 「インターネットの導入と活用」『研究紀要 No.11』北海道釧路西高等学校 (平成 8 年) ・ AEleen Frish 著，榊正憲訳『UINX システム管理』アスキー， 1995 ・ Paul Albitz,Cricket Liu 著，浅羽登志也，上水流由香訳『BIND and DNS』アスキー， 1995 ・ Olaf Kirch 著，小嶋隆一，高尾哲康訳，山崎康宏監訳『Linux ネットワーク管理』，オーライ

11可能に出来るが，可能にはしておかない。勿論，セキュリティの問題である

リージャパン， 1996

・ Microsoft corporation，富士通ラーニングメディア翻訳『Microsoft WindowsNTWorkstaion 4.0 Resource Kit』アスキー， 1997

・同『Microsoft WindowsNT Server4.0 Resource Kit』アスキー， 1997 ・浅野理森『Samba2.0 による Windows ネットワーク構築入門』技術評論社， 1999 ・ Shishir Gundavaram 著，エディックス訳，田辺茂也監訳『CGI プログラミング』，オーライ

リージャパン， 1996 · · · · · · CGI でここまでやれることを著した

・ Larry Wall , Randal L.Schwarz 著，近藤嘉雪訳『Programming Perl』ソフトバンク， 1993 ・Lincoln Stein,Doug MacEachern 著，田辺茂也, 田和勝訳『Apache 拡張ガイド（上）（下）』オー

ライリージャパン， 2000 · · · · · · Perl を apache 内に等価なモジュールとして組込み高速化する

・ Ben Laurie,Peter Laurie 著，大川久人三代川信義訳，田辺茂也監訳『Apache ハンドブック第 2 版』オーライリージャパン， 2000

・川俣晶『パソコンにおける日本語処理／文字コ−ドハンドブック』技術評論社， 1999

6 参考ソースリスト

何が必要かは学校毎に異なると考えられますので，むしろ万が一，ソースや設定ファイルのイメージがつかみ難い場合の参考程度です。

LIST1 index.htm

 1 : <html>
 2 : <!-- 1999.10.13 (C)K.Miura 1999 -->
 3 : <head>
 4 : <!-- force greeting-cgi(lessonow.cgi) -->
 5 : <meta http-equiv="refresh" content="1;url=/cgi-bin/lessonow.cgi">
 6 : <title>
 7 :  /lesson/index.htm(EUC)
 8 : </title>
 9 : </head>
10 : <body>
11 : hereis /lesson/index.htm(EUC)<b>&copy;K.Miura 1999</b>
12 : </body>
13 : </html>

LIST2 lessonow.cgi

 1 : #!/usr/bin/perl
 2 : #
 3 : # lessonow.cgi

4 : # 授業開始のはじまりページ用の日付時刻表示

 5 : #   (C) K.Miura 1999
 6 : #
 7 : # 1999.10.13.
 8 : # 1999.10.14. add display IP,bugfix wday
 9 : #
10 : ($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime;
11 : $mon++;
12 : @week=('Mon','Tue','Wed','Thr','Fri','Sat','Sun');
13 : #@jweek(' 月',' 火',' 水',' 木',' 金',' 土',' 日');
14 : $wday=@week[$wday-1];
15 : #$jwday=@jweek[$wday];
16 : #
17 : $sec = sprintf( "%.2d" ,$sec );
18 : $min = sprintf( "%.2d" ,$min );
19 : $hour = sprintf( "%.2d",$hour );
20 : $mday = sprintf( "%.2d" ,$mday );
21 : $mon = sprintf( "%.2d" ,$mon );
22 : $year = sprintf( "%.4d", $year + 1900 );
23 : #
24 : $remote_host_addr=$ENV{"REMOTE_ADDR"};
25 : #
26 : print "Content-type: text/html\n\n";
27 : print "<HTML>\n";
28 : print "<HEAD>\n";
29 : print "<META charset=\"euc\" http-equiv=\"refresh\"
                          content=\"5;url=/lesson/lesson.htm\">";
30 : print "<TITLE>\n";

31 : print " lessonow.cgi\n";
32 : print "</TITLE>\n";
33 : print "</HEAD>\n";
34 : print "<BODY>\n";
35 : print "generated by lessonow.cgi <b>&copy;K.Miura 1999</b><br><hr>\n";
36 : print "<center><br>\n";
37 : print "<FONT color=blue size=+4>ようこそ</FONT><br>\n";
38 : print "<FONT  size=+4>情報処理教室へ</FONT><br><br><br><hr>\n";
39 :
40 : print "<BR>\n";
41 :
42 : print "今日は<FONT size=+2> $year 年 $mon 月 $mday 日 ($wday) </FONT><BR>\n";
43 : print "只今の時刻は<FONT size=+2> $hour:$min:$sec </FONT><BR>\n";
44 :
45 : print "<br><br> \n";
46 : print "あなたのコンピュータの IP アドレスは <b>$remote_host_addr</b><br> \n";
47 : print "<font color=\"red\">しばらくお待ち下さい</font><br><br><br> \n";
48 : print "server3.intra.somewhere-h.ed.jp\n";
49 : print "</center>\n";
50 : print "</BODY>\n";
51 : print "</HTML>\n";

LIST3 Samba 設定ファイル smb.conf の内容（抜粋）＃およびセミコロンで始まる行はコメントの扱いとなる。

 1 : #======================= Global Settings =====================================
 2 : [global]
 3 : # workgroup = NT-Domain-Name or Workgroup-Name
 4 :    workgroup = intra.somewhere-h.ed.jp
 5 :
 6 : # server string is the equivalent of the NT Description field
 7 :    server string = server3
 8 :
 9 : # this tells Samba to use a separate log file for each machine
10 : # that connects %U はユーザー名， %m はマシン名に置き換えられる
11 : #   log file = /var/log/samba/log.%m  （履歴ファイル）
12 :     log file = /var/log/samba/%U.log
13 :
14 : # Put a capping on the size of the log files (in Kb).
15 :    max log size = 50
16 :
17 : # Security mode. Most people will want user level security. See
18 : # security_level.txt for details. （認証方式）
19 :    security = server
20 : # Use password server option only with security = server
21 :    password server = <NT-Server-Name>
22 :
23 : # You may wish to use password encryption. Please read
24 : # ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
25 : # Do not enable this option unless you have read those documents
26 :   encrypt passwords = yes    （暗号化パスワード）
27 : ;  smb passwd file = /etc/smbpasswd
28 :

29 : # Using the following line enables you to customise your configuration
30 : # on a per machine basis. The %m gets replaced with the netbios name
31 : # of the machine that is connecting （マシン毎の設定ファイル）
32 : ;   include = /etc/smb.conf.%m
33 :
34 : # if you want to automatically load your printer list rather
35 : # than setting them up individually then you'll need this
36 :    printcap name = /etc/printcap
37 :    load printers = yes
38 :
39 : #============================ Share Definitions ==============================
40 : [homes]
41 :    comment = Home Directories
42 :    browseable = no
43 :    writable = yes
44 :
45 : [printers]
46 :    comment = All Printers
47 :    path = /var/spool/samba
48 :    browseable = no
49 : # Set public = yes to allow user 'guest account' to print
50 :    guest ok = no
51 :    writable = no
52 :    printable = yes
53 :
54 : # a service which has a different directory for each machine that connects
55 : # this allows you to tailor configurations to incoming machines. You could
56 : # also use the %u option to tailor it by user name.
57 : # The %m gets replaced with the machine name that is connecting.
58 : ;[pchome]
59 : ;  comment = PC Directories
60 : ;  path = /usr/pc/%m
61 : ;  public = no
62 : ;  writable = yes
63 :
64 : [web_base]     （作業時の残骸）
65 :     comment = Web document base
66 :     path = /home/httpd/
67 :     public = yes
68 :     writable = yes
69 :     create mode = 777

sambacgi.dvi\begin{matrix}c \\ ◯ \end{matrix}2001 K.Miura