高森太郎のノート

このページについて

このページは、高森太郎がノート的に何でも書くページです。
主に勉強したこと、自分が知った知識や方法などを中心に、適当に、メモ的に、書き留めてます。

 | 

2011年11月14日 (月曜日)

目次

[][][][]Internet information Service(IIS)でネットワークドライブを仮想ドライブとして指定する方法 Internet information Service(IIS)でネットワークドライブを仮想ドライブとして指定する方法 - 高森太郎のノート を含むブックマーク はてなブックマーク - Internet information Service(IIS)でネットワークドライブを仮想ドライブとして指定する方法 - 高森太郎のノート

先日作ったFreeNASのファイルサーバだが、ダウンロード専用に簡単にファイルを渡したいという要望があった。どちらもLAN内での話だが

  • 先方にデータを送りたいとき、社内で認証など不要な場合も多々あるが、そんなときでもいちいち認証を求めていたのでは非効率である
  • いくらバッチファイルなどの手段があるとはいえ、そういったことがすらすらとできる人ばかりではない

と言う事である。確かにそうだ。と言う事で

  • メールにURLが書いてありリンクをクリックすればダウンロードができる

と言う事を実現したい。

普通ならきちんとしたファイル共有システムやら、アップローダやらを設置してやるとかすればいいのだがそんなにリソースもない。ならばサーバにApacheなどの適当なHTTPdを入れてディレクトリブラウズをできる様にしてやればいいのだが、FreeNAS8系では現状それができない*1

一方、現状別の用途で運用しているWindows Server 2003があり、こちらではIISが稼働している。というわけで

と言う手段をとることにした。*2

これはそれの設定メモである。FreeNASと言っているが、NASと言うかネットワーク共有ドライブならば特に限定はされないはず。またこの手法で行うと認証がされなくなってネットワーク上に大公開という事になるので、セキュリティには他で担保する必要がある。

なお以下の例でそれぞれ、IPアドレス

FreeNASサーバ
192.168.10.254
Windows Server
192.168.10.253

であると仮定し、共有用のディレクトリは「public_share」としている。このほかの設定は前回ファイルサーバを作った時の設定と同じにしてある。

FreeNAS側の下準備 - ユーザを作成する

前提条件として、NAS側にIISがアクセスに使うためのユーザを作って適切にアクセス権限を設定しておく必要がある。またディレクトリも分けて置いた方が無難だろう。

以下FreeNASの例である。

これは前回の記事で作成したFreeNASサーバを前提として書いている。

まずFreeNAS側でWindows Serverからアクセスするためのアカウントを作る。

Web Guiから

ユーザ -> Add ユーザ

で適当なユーザを作る。Windows Serverから使うだけなので、自分はわかりにくい名前にしておこうとアカウント名パスワード共にランダムな文字列を設定した。またこのユーザでシェルへログインする事はあり得ないので、グループを「nogroup」ログインシェルを「nologin」にしておくことを忘れずに。

またディレクトリも作っておいた方がいいだろう。

ここではSSHでログインして

mkdir /mnt/tank/public_share
chgrp all_user /mnt/tank/public_share
chmod 775 /mnt/tank/public_share

とした。

mkdir /mnt/tank/public_share
ディレクトリの作成
chgrp all_user /mnt/tank/public_share
オーナーグループを「all_user」に変更
chmod 775 /mnt/tank/public_share
パーミッションの設定。オーナーとグループは全部許可、それ以外は読み出しのみ許可

また、WebGUIから

共有 -> CIFS Shares -> Add CIFS Share

からこの/mnt/tank/public_shareを共有に出しておく。この時に、Windows Server以外からこの共有にアクセスする事を制限するなどもできる。

この後、前回の設定だと各ユーザのホームディレクトリに/mnt/tank/public_shareへのシンボリックリンクを作成する。

ln -s /mnt/tank/public_share /mnt/tank/home/(ユーザ名)/public_share

を繰り返してユーザディレクトリに作成していく。

面倒なのでこのあたりはシェルスクリプトにして流してしまった方がいいかもしれない。

また当然直接共有に出してしまうなど別の方法でアクセスを担保しても良い。

Windows Serverの下準備

FreeNASで作成したユーザ名、ユーザIDと同じユーザを作成しておく。

当然ながらこの時もログインできないように処置をしておいたほうがいい。

IISでの設定

IIS マネージャから加えたいWebサイトを右クリックして「仮想ディレクトリの追加」として、後は表示通りにやっていくだけ。

このあたりは検索して見ると豊富なやり方が出ているのだけれど、この時ネットワークドライブを追加する時の注意点として以下の二点がある。

  • ファイルパスをUNC名で入れなければならない
  • ネットワークドライブにアクセスするためのユーザとパスワードを指定する必要がある

まず全社「ファイルパスをUNC名で」とはどういう事かと言うと、ここでたとえ、このドライブを「Z」などとしてWindows Serverにマウントしていても、このZへマウントしていると言う情報はユーザ依存なので使えないと言う事らしい。*3

つまり

Z:\public_share

と入れても駄目で、参照を押してネットワークドライブを加えようとしてもOKがグレーアウトして押せない。なので、たとえばサーバのアドレスが192.168.10.254であったとすると

\\192.168.10.254\public_share

と入力する必要がある。

これを入力すると、通常は与えるアクセス許可の選択に行くのだが、ネットワークの場合「セキュリティ資格情報」という画面になる。この画面で、「ネットワークディレクトリへのアクセスを検証するときに、認証された資格情報をつねに参照する」をチェックを外し、先ほど作成したネットワークドライブにアクセスする用のユーザを選択し、パスワードを適切に入力してやる必要がある。*4

ウイザードを終了するとこれで仮想ディレクトリはできるが、今回はこのディレクトリの中身を観覧してもらうようにしたい。ということで作成した仮想ディレクトリを右クリックして「プロパティ」を開き、「仮想ディレクトリ」のタブから「ディレクトリの参照」のチェックボックスをつけてOKする。

これによって、アクセスするとそのディレクトリの中身の一覧が見られるようになる。また必要に応じてMIMEも設定してやること。

これで、ウエブブラウザでアクセスしてみる。今回の例だと「http://192.168.10.253/public_share」にアクセスする。

テストアクセスしてみて500とか出る場合は大抵Windows Server/IISNASへのアクセスに失敗しているのでまずそこを確認するのがいいと思う。

完成結果

これでユーザは、

  • ネットワークドライブの自分のホームの中に見えている「Public_share」の中に送りたいファイルを入れる
  • Webブラウザで「http://192.168.10.253/public_share」にアクセスする
  • 自分が今入れたファイル名を右クリックしてリンクアドレスのコピーをする
  • コピーしたアドレスをメールに記載する

と言う事を行うと、受け取ったユーザはメール本文を開いて、リンクURLをクリックするだけでダウンロードが始まると言う事になるのである。

本当はセキュリティ上の様々な懸念があるのでもうちょっと工夫したりしないと駄目なことも多いだろう。認証なども必要に応じて施す。

また当然ながらこいつは信頼できるコンピュータだけがつながっているLANの上で使われる事を前提にしている事も注意が必要だ。外に出すならもっといろいろと考えるべき事は多いだろう。

また、アクセスの量がそれほどでも無い場合はいいが、結構なアクセスが発生するようだとNICを足してスタティックルートを設定、クロスケーブルで直結するなどネットワークの改造をした方がいいかもしれない。

このほか、現状だと送ることはできるが、データを受け取ることが出来ないと言う事になる。この場合WebDAV等を検討する事になるかも知れない。が、認証がポカ避け程度にしか必要無いなら

if exist \\192.168.10.254\public_share goto ACCESS_OK
net use \\192.168.10.254\IPC$ /user:<ユーザ名> <パスワード>
:ACCESS_OK
%windir%\Explorer.exe \\192.168.10.254\public_share

とか言う身も蓋もないバッチファイルを配ってしまってやるとか、FreeNAS側でFTPを有効にしてFTPで入れてもらうとかいろいろと考えられる。

*1:ロードマップを見ると、将来どこかで軽量なHTTPdをプラグインとして組み込むという議論はあるようだが、フォーラムを見ると「そんなもんいらねえだろ」と言う意見もあってそれほど進んでいない。FreeNAS0.7系ならできる

*2:このほかにiSCSIとかWebDAVとかいろいろな手段があるが今回はそこまで必要無いのでやってません

*3:ネットワークドライブのパスはユーザごとに決まっており、別のユーザでは変わってしまう他、IISはサービスとして動作するのでと言う事らしい。このあたり詳しくはMicrosoftサポート情報 マップされたドライブを IIS で使用する方法 でよくわかるんだかわからんのだかと言う文章を参照

*4:アクティブディレクトリ環境などの場合、当然この限りではなく、「ネットワークディレクトリへのアクセスを検証するときに、認証された資格情報をつねに参照する」をONにしたまま、アクティブディレクトリの認証情報をつかっていろいろとできるらしい

 | 
ページの一番上へ