Kouzzy's web file manager (Perl/CGI) Copyright(c)1999-2001 Kouji Morishita all right reserved. version 1.23 1、これは何か? ホームページ上に設ける事の出来る簡易ファイルマネージャーです。 FTPを不要にしファイルのアップロード・ダウンロードに対応します。 2、何が出来るか? これがあれば Netscape 等のブラウザからファイルの送受信を行う事が 出来ます。HPの開設にもはやFTPは不要ですリネームや削除ももちろん 行う事ができディレクトリ操作にも対応しており、オンラインでの テキスト系のファイル編集も出来るようになっています。 BASIC認証やCGI認証を組み合わせると自分のホームページを他の人に 間貸しして運用する事も出来るようになります。管理者機能として パーミッション変更機能を付加しました。ですから、メンバーのファイルを 総括的に操作しCGIファイル等に実行属性を与えたり、ディレクトリに リード・ライト・実行権限を付与したり取り去ったりすることも出来ます。 このCGIは「軽さ」を売りにしています。グラフィカルなものは排除して 作りました。ですから画面表示的には少々寂しさを感じるかも知れません。 でも、ボタンの付け替えなどは簡単ですし色を追加する事もそれほど難しくは ありません。これを利用される方々が改造を施してオリジナルのWFMを 作成してみてはいかがでしょうか? 3、実行に必要な環境等 開発に用いたサーバー環境は RedHat Linux 6.1 for sparc (cartman) apache1.3.9(suEXEC Enabled) + perl5.005_03 及び RedHat Linux6.2J (Zoot) apache1.3.12(suEXEC Enabled) + perl5.005_03 及び Linux slackware 3.6 + PJE1.5.0cm apache1.3.3 + perl5.005_02 及び Windows98 Second Edition apache1.3.22 (Win32) + ActivePerl Build 630 Built under MSWin32 多分、他の組み合わせでも動くでしょう。 但し perl4 では動作未確認です。恐らく動くように改造できます。 (プログラム中 my を local に変えるなどすると良いでしょう。) OSは apache が動いてくれれば FreeBSD等他のUNIXでも構いません。 Ver1.23 からはWindows系OSにも対応しました。但し、CGIの起動が出来る ように apache の設定を調整する事と言うまでもなく、BASIC認証を使用する ときはそれも盛り込む事が必要です。 ver1.23 から ls/du/rm と言う外部コマンドに依存しなくなりました。 同時に Win系OSでもほとんど修正なしで動作できるように調整してあり ます。ActivePerl の場合 \usr のディレクトリにインストールをすると 必然的に \usr\bin\perl が perl へのパスになりますので全くの修正なし でWFMを動作させることができるようになります。 またWin系OSの場合ファイルのパーミッションやオーナー・グループと 言う概念がありませんので、省略や調整して表示するように変更しました。 Win系OSではパーミッションを drwx と記述して、前からディレクトリ、 読み、書き、実行を示すものとなっています。他にもアーカイブや システム、隠しファイルの属性がありますが今回はそれを反映するように はしていません。(要望が多いようでしたら盛り込もうと思います。) 以下パーミッションの説明がある場合Win系OSでお使いのときは記述を 無視してお読みください。 4、インストール方法 提供されている.cgi ファイル2つを同じディレクトリにコピーしてください。 漢字ファイル名に対応するために jcode.pl を必要とします。漢字を必要と しないなら main.cgi 冒頭部分の KReadParse(xxx) の xxx の部分を削除 して下さい。そうすると漢字変換を行いません。jcode.pl も不要です。 (この時、ファイル編集の際も漢字変換を行いませんので注意してください) 漢字に対応したと言っても Shift-jis が抱えている特有の問題には対処して いません。それに対処するには jperl を使うかプログラム全体を euc 化等し てください。jcode.pl はわたしのHPに置いておきます。 なお、FTP等で当プログラムを転送するときはテキストモードで転送を 行って下さい。改行コードの違いでCGIを実行できなくなってしまいます。 Webで参照できる任意のユーザーディレクトリにインストールできますが 使い方により幾つかのインストール方法が存在します。 (1) anonymous型(認証なしで不特定多数が使用するタイプ) ディレクトリ設定例(括弧はディレクトリ名には含まない) 任意のディレクトリ(パーミッション) | +--fileman(705)提供ファイルの入るディレクトリ | +--updata(777) main.cgi の設定値 basedir="../updata"; にしたとすると updata を仮想的なルートディレクトリとし、その配下をアクセス するファイルマネージャになります。ソースを見ない限り updata を アクセスしている事はわかりません。 セキュリティ上問題があるのでこの状態で管理者機能は使えません。 もし管理者機能を使いたいときは user login 型で使用し管理者と 自分のIDを変数 $admin へ登録してください。そうしなければ パーミッションの変更機能などは利用できません。 (2) user login 型(認証ありでユーザー毎のディレクトリを使用するタイプ) ディレクトリ設定例(括弧はディレクトリ名には含まない) 任意のディレクトリ(パーミッション) | +--fileman(705) 提供ファイルの入るディレクトリ | ここにBASIC認証を掛けて下さい | +--xxxxxx1(777) ログインユーザー xxxxxx1 の専用ディレクトリ | +--yyyyyy2(777) ログインユーザー yyyyyy2 の専用ディレクトリ | +--zzzzzz3(777) ログインユーザー zzzzzz3 の専用ディレクトリ : :続く・・ この場合 main.cgi の設定値 basedir=".."; とします。 BASIC認証を掛けると自動的に basedir にユーザ名が追加されて 上記のような構造でアクセスできるようになります。ただし、 user名が新規に追加になった時には自動的にディレクトリが作成 されるわけではありませんので、管理者が作成してあげる必要が あることを忘れないでください。(そうでなければエラーになる) そうすると、各々のユーザーにとって専用のディレクトリが仮想 ルートディレクトリとなり、そのディレクトリを意識しなくても、 その配下のディレクトリを使用出来るようになります。管理者は 各々のユーザーより一段高い位置をホームディレクトリにすることが 出来ますのでファイルマネージャ自身でユーザーディレクトリの作成や パーミッションの変更が出来るようになります。パーミッションの 変更はセキュリティ上かなり危険な行為となる場合がありますので 十分注意して行ってください。リスクはあなた自身が負ってください。 5、設定値の説明 プログラム群中設定値を設けているのは main.cgi の先頭部分だけです。 次のいくつかの設定値があります。 $cgilogin = 1; # CGI によるログイン管理を(する =1 /しない又はBASIC認証 =0 ) CGIによる認証を行いたい場合は 1 を入れます。認証を行わない場合や BASIC認証を用いる場合は 0 を入れてください。管理者機能はCGI による認証かBASIC認証のいずれかが有効にならなければ使えません。 BASIC認証よりCGI認証へ切り替える場合はBASIC認証は無効に してつかってください。つまり.htaccess をリネームなどします。 $passfile = '../passwd.dat'; # パスワードファイル パスワードファイルを相対パスか絶対パスで指定します。このファイルは BASIC認証でもちいていたファイルをそのまま利用することが出来ます。 (もしこれが駄目な場合はパスワード発行CGIでパスワードを再生成して ください。パスワード発行CGIはわたしのホームページをご覧ください) ただし、CGIによる認証はセキュリティレベルがBASIC認証よりも 低くなってしまいますので注意してください。 $admin=';kouzzy;'; # システム管理者IDのリスト(';'で区切る) システム管理者のリストです。ただしBASIC認証を掛けておく事が 条件です。システム管理者のIDでログインするとシステム管理者しか 用いる事の出来ない機能が有効になります。つまり.cgi を実行するための パーミッションを与えたり取り去ったり、各々のユーザーのディレクトリを いじれたり出来ます。設定するときは、かならず ; で区切ります。 リストの一番前と最後にもセミコロンを入れて下さい。 $prmsize=1000; # 所有ファイル上限(キロバイト) 0 (ゼロ)なら制限無し このファイルマネージャで所有できるファイルの総量です。 キロバイト単位です。1000 は1メガバイトです。ゼロを入れると 制限無しになります。また、BASIC認証を有効にし管理者になっても 制限無しになります。Win系OSとそれ以外では少し挙動が異なります。 Win系OSでは所有ファイルの一つ一つのサイズの合計値を所有ファイルの 上限として認識します。それ以外のOSではファイルがディスク占有して いるサイズの合計を所有ファイルサイズとして認識します。つまりクラスタ ギャップなどのサイズも考慮に入っています。 $noedit=';bmp;jpeg;jpg;gif;lzh;zip;'; # ファイル編集非対象の拡張子を指定できる オンラインでの編集を許さないの拡張子を示します。必ず ";" で区切って 拡張子のリストにしてください。現在では .bmp .jpeg .jpg .gif .lzh .zip が 対象になっています。各自で付け加えて下さい。 $basedir=".."; # main.cgiからの相対ディレクトリか絶対ディレクトリ ファイルマネージャがアクセスするルートディレクトリを指定します。 anonumous型で updata ディレクトリをアクセスする場合 "../updata" を 指定して下さい。user login型の場合はそのまま ".." で結構です。 絶対ディレクトリを指定しても良いですがソースを見るとどこをアクセス しているか分かってしまうので出来るだけ相対ディレクトリで指定して ください。 $homedir=""; #通常は指定しないでください。 事情により $basedir に絶対ディレクトリを設定しないと行けないときには これを設定して下さい。絶対ディレクトリの指定ではブラウザからのアクセスが 出来なくなってしまうからです。これを設定するとブラウザレベルでの ディレクトリ指定が出来ます。仮に http://sys.chro.co.jp/~kouzzy 以下を アクセスするとすると $homedir="/~kouzzy"; 等と指定できます。 $mswin32=$^O=~/^MSWin32$/ ? 1 : 0 ; # プラットホーム識別 MSWin32 or other 動作させるプラットホームを指定できます。特殊グローバル変数の $^O の値を 基にWin系OSなのかそれ以外なのかを判断しています。ご利用の Perl の種類 によっては $^O の返り値が「MSWin32」ではない可能性もありますので、 Win系OSで、ちゃんと動作していないように思える場合は $mswin32 = 1;等と 直接指定すると強制的にモードを切り替えることができます。 &KReadParse('sjis'); # 漢字コードを指定できる。プログラムのコード変換も要 他の漢字コードを使いたい場合は 'sjis' を他のものにか書き換えます。 euc や jis が使えます。その場合プログラムファイル自身もその漢字コードへ 変換する必要があります。 その他の便利な設定 下のようなコーディング行があります。(505行目付近) unless(opendir DIR,$usedir){ # ディレクトリの読み出し この $usedir の部分を $usedir/index.* という風に記述すれば index.html index.htm index.shtml index.cgi ... などがWFMの操作対象ファイルに なります。操作対象のファイルを限定させたい場合はこの部分を修正して 使ってくださいますようお願いします。 6、セキュリティ上の注意点 BASIC認証について: ホームページをパスワード保護するための方法のひとつです。 BASIC認証については、わたしのホームページで解説しています。 Kouzzy's Home Page in SysChro http://sys.chro.co.jp/~kouzzy こちらでご覧ください。 CGI認証について: ver1.20 よりBASIC認証の代わりにCGI認証も用いることができるように しました。ただしセキュリティレベルがBASIC認証よりも若干落ちますので できるだけBASIC認証を用いることをお勧めします。ver1.21 では セキュリティレベルの向上措置を行なって居ますが、それでもBASIC認証 よりセキュリティレベルは落ちます。十分注意して操作してください。 パーミッションの変更について: ver1.10 よりファイルとディレクトリのパーミッションの変更操作に対応しま した。これにより新たな問題が発生する可能性があります。第三者に変更され 悪用されるとシステムへの甚大なダメージに繋がる可能性がありますので 管理者として登録したかただけがパーミッションの変更が行えるようになって います。anonymous型ではパーミッションの変更を行えるようにはしていませ んのでご注意ください。どうしても危険を侵してまでもパーミッションの変更 を行いたい方は自らのリスクにてソースファイルを修正して利用してください ますようにお願いします。 自分が予想しないところでパーミッションが悪影響を与える場合があります。 WFMがカバーできない操作が出てくるかもしれません。万一、操作できな くなってしまうなどの場合は telnet/ftp を利用して直接パーミッションを 元に戻してください。十分注意して操作するよう強くお勧めします。 7、配布や著作権について 日本国ではあらゆる著作物について著作権が認められるようになっています。 それでこの著作物についての全権利をわたし(森下幸治)が保有します。 配布については自由に行って下さっても構いませんが、改変を行わず オリジナルのまま配布してください。また、このプログラムは無保証です。 利用者はご自身でそのリスクを負って下さい。このプログラムを使用した 結果、不利益を被ったとしてもわたしはそれを補償する事はありません。 営利目的での利用は有償です。もし営利目的で利用したいと言われる方は 作者へその旨をメールにて連絡ください。 8、作者よりひとこと ぜひ必要だという機能がありましたらぜひ聞かせてください。有用な機能に ついては実現したいと考えています。お気軽にメールでお知らせください。 9、作者連絡先等 電子メールでお願いします kouzzy@mocha.ocn.ne.jp kouzzy@nagasaki.west.ntt.co.jp 勤務先:NTT西日本長崎支店パーソナルユーザー営業部 第二営業部門総合サポート担当 (勤務先への連絡はFAXで No.095-821-2355) A、バージョンアップ履歴 0.4β 1999/09/27 一般公開 0.5β 1999/10/13 漢字ファイル名対応(バグフィクス含む) 0.5aβ 1999/10/18 ドットファイル名の扱い修正 0.5bβ 1999/10/19 アップロード時の一部不具合の修正 0.5cβ 1999/11/05 管理者メニューセキュリティ強化(pmt) 0.5caβ 1999/11/08 perl4 のために一部修正(main.cgi) 0.6β 1999/11/09 テキストファイル編集機能を追加 0.6aβ 1999/11/11 perl4 ための一部修正(operate.cgi) $homedir追加 0.6bβ 1999/11/13 main.cgi $homedirのディレクトリ移動部分を修正 0.6cβ 1999/11/16 upload.cgi 修正(他ブラウザへの対応準備) 0.7 1999/12/21 正式プレリリース 一括削除できるように変更 1.00 2000/01/01 正式バージョン公開 1.01 2000/01/12 ファイル編集に不具合発生。伴うバグを修正 1.02 2000/01/13 ファイル編集で新規作成 <> 等に対応 1.02a 2000/01/21 upload.cgi修正(Macでも可) 1.03 2000/02/07 upload.cgi修正(精度UP)F無時 新規ボタン追加 1.04 2000/02/26 ファイル更新で漢字コード変換するようにした(fix) 1.10 2000/10/17 パーミッションへの対応。画面構成と操作性の見直し 1.11 2000/10/19 画面構成の再見なおし、若干のバグ修正・仕様変更 1.20 2000/10/24 CGI認証の追加・若干のバグ修正 1.21 2000/10/25 CGI認証のセキュリティレベル向上 1.22 2001/01/11 Win系OSへの対応 ファイル名生成部分の若干BugFix 1.22a 2001/03/19 セキュリティチェック強化とディレクトリ操作系Fix 1.23 2001/12/11 Win系OS正式対応。ls/du/rmコマンドに非依存 バージョンアップは随時行っています。わたしの公開ページ ( http://sys.chro.co.jp/~kouzzy )で最新情報を把握して下さい。 常に最新版の readme.txt を参照できるように努めています。