このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

MacのWWWサーバでのファイルセキュリティーについて

発言者:アッシュ
( Date Wednesday, January 24, 2001 11:56:25 )


PowerMac7200/90、OS9.0.4の「web共有」を利用したWWWサーバで
ID,Passwordの認証・登録をしたいと考えています。

PerlやAppleScriptのCGIを一から書く技術が無いので、フリーのUNIX用Perl
CGIを修正して使おうかと思っているのですが・・・
ID,Passwordの記録ファイルを、外部から見られないようにするにはどうすれば
良いのでしょうか?

webフォルダー
 ├ auth.html :auth.cgiを呼ぶフォームの書かれたページ
 ├ auth.cgi  :MacPerlのCGI Scriptファイル
 └ id.dat   :"userid:password \n"が書かれたテキストファイル
         .datである必要は無いですよね(^_^;)

上記の構成でループバックアドレスを使ってテストしてみた結果、
認証・登録はうまく動作したのですが、
http://127.0.0.1/id.dat
を見てみると内容が丸見えです。これじゃあダメですよね。

パスワードを暗号化するルーチンも、フリーのCGI内にあったので
それを使う手もあると思うのですが、それよりもファイルそのものに
アクセス出来ないのが一番望ましいのかと・・・。

過去ログも「パスワード」「セキュリティー」「パーミッション」
「認証」などイロイロ探しては見たのですが、語意不足でしょうか
希望するログは発見できませんでした。

いい方法があればお教え下さい。お願いいたします。

ゆうれい さんからのコメント
( Thursday, January 25, 2001 08:15:55 )

Webページのhtmlの中に
Webサーバへのアクセス権を設定する
で認証するか
datファイルをフォルダで保護すればできるんだっけ

アッシュ さんからのコメント
( Thursday, January 25, 2001 09:37:55 )

もうちょっと詳しく聞かせて下さい。

htmlの中でアクセス権を・・・というのは、MIMEヘッダで指定できた
んでしたっけ? どこかでそんなことを読んだような気がするんですが。
もしサンプルか何かあれば、教えていただけないでしょうか。

あとdatファイルをフォルダで保護というのは?
つまりフォルダに入れておくことで、ディレクトリを知られなければ
安全、そういう意味でしょうか? う〜ん、分からない・・・。

少なくとも、MacOS Web共有にはファイルやフォルダーへのアクセス権
を個別に設定する機能はないので悩んでいます。
Quid Pro Quoだったら出来るんですかねー? ほとんど触ったことが
ないのと、英語を読むのがツライので、できればWeb共有でWebサーバ
にしたいんですが・・・。

よろしくお願いします。

稲垣 さんからのコメント
( Thursday, January 25, 2001 10:37:59 )

 単純にパスワードファイルを、Web共有フォルダの外に出せばいいじゃないですか?

 その為には、cgiでパスワードファイルへのパスを変更する必要があります。
サーバ上のcgiはOSレベルで制限をかけない限り、どのファイルでも読み取れますよ。

田中求之 さんからのコメント
( Thursday, January 25, 2001 12:05:07 )

Web 共有の場合には、アクセスされたら困るものは、公開していないフォルダー
に置いておく(Web ページのフォルダーの外に置く)というのが鉄則です。

稲垣さんのコメントにあるように、パスワードファイルを外に出しておき、
CGI でそのファイルを読み書きしている部分のパスを変更しておく、という
のが確実でしょう。

アッシュ さんからのコメント
( Friday, January 26, 2001 10:19:29 )

稲垣さん、田中先生、ありがとうございます。
なるほど、Web共有フォルダーの外に置いておけばいいのですね。
パスワードファイルもWeb共有フォルダー以下の階層に置いておく必要がある
んだと思っていました。

そこで早速パスを書こうと思ったのですが・・・早々とつまずきました。

Macintosh HD
 ├ Webフォルダー
 │ ├ auth.html
 │ └ auth.cgi
 └ shadowフォルダー
   └ id.dat

上記のような構成で、auth.cgi 内で id.dat のパスを記述する場合
どのようになるのでしょうか? 

$file = ':Macintosh%20HD:shadow:id.dat'; とか
$file = '::shadow:id.dat'; とか

よく分からずに書いてみたのですが、id.datファイルが読めませんでした。
UNIXでは上位の階層を'./'、2階層上を'../'で表すんですよね?
それがMacでは':'、'::'になるのだと思っているんですが、これは正しいの
でしょうか?

勉強不足でスミマセン。上記の例で、という条件だけでかまいませんので
正しいファイルパスの書き方をお教え願えますでしょうか…
よろしくお願いいたします。

稲垣 さんからのコメント
( Friday, January 26, 2001 10:46:27 )

 MacPerlはあまり詳しくないですが・・・。間違えていたらフォローを
お願いします。>詳しい方々

$file = ':Macintosh%20HD:shadow:id.dat';

 は、違うんじゃないですか?UNIXとは違って、頭に:は必要無いはずです。
あと、半角スペースはエスケープでOKかそれともそのままでもOKかは不明
ですが。

$file = '::shadow:id.dat'; 

 は、大丈夫だと思います。相対パスは::で表記できるはずですので、こちら
のほうが安心かと・・・。


アッシュ さんからのコメント
( Friday, January 26, 2001 10:52:22 )

自己レスです。

$file = '::shadow:id.dat';

で、パス通ってました。タイプミスで通らなかったのを記述方法が悪いのだ
と思いこんでしまってました。ただの慌て者です(^_^;)

あと分かってないのが絶対パスの書き方です。
htmlを書く場合は、Webで公開している最上位のフォルダー(Webフォル
ダー)がルートだと思うのですが、MacOSのファイルシステムでのルート
ディレクトリってどこなんでしょうか?
「デスクトップ」なんですかね〜、、、うーん、Mac使ってると普段から
階層構造なんてほとんど考えずに使っているので、いざ考えるとなると
途端に分からなくなります。

GUI・・・恐るべし!(って…そういう問題じゃないですね)

アッシュ さんからのコメント
( Friday, January 26, 2001 11:16:19 )

あぁ・・・自己レス書いている間に、稲垣さんからレスが・・・。
稲垣さん、ありがとうございます。

$file = 'Macintosh%20HD:shadow:id.dat';
$file = 'Desktop%20Folder:Macintosh%20HD:shadow:id.dat';
$file = 'Desktop:Macintosh%20HD:shadow:id.dat';

これらも試してみたのですが、やはりパスが通りません。
う〜ん、Macのファイルシステムのルートって・・・どこなんでしょう?

田中求之 さんからのコメント
( Friday, January 26, 2001 12:33:41 )

ファイルパスですから、URL とは違って、スペースはスペースのままでいいはず
です。URL エンコードする必要はありません。

Mac の絶対パスは、ハードディスクを起点として書いていく形になりますので
たとえば "Macintosh HD:Servers:Web Folder:test.acgi" といった形に
なります。

アッシュ さんからのコメント
( Friday, January 26, 2001 14:54:40 )

出来ました! 田中先生ありがとうございます。
稲垣さんもありがとうございました。

例にあげたケースでは・・・

$file = 'Macintosh HD:shadow:id.dat';

これでCGIスクリプトからファイルを参照することが出来ました。

今後も、なるべく自分で勉強していくつもりですが、また分からないことが
あるときはお世話になるかもしれませんので、そのときはよろしくお願いい
たします。