おやじ様のサイトで紹介されているApache+perlに記載されている、
ディレクトリの構成と同じように、
UserDirの指定「UserDir "E:/Web/*/public_html/」
を行った場合の「Alias」と「ScriptAlias」がうまくいきません。
下記が実際に行った記述です。
ScriptAlias /bbs1/ "E:/web/cgi-bin1/bbs/" で http://abcdz.com/~test/bbs1/war.cgi で表示失敗!
(E:/web/cgi-bin1/bbsのbbsフォルダ配下にwar.cgiファイルを配置してあります)
どこが、間違えているのかご指摘お願いできないでしょうか。
通常のDocumentRootの指定「"E:/web/public_html"」等での、「Alias」と「ScriptAlias」は成功している、
ので、基本的には形?は間違えてないと思うのですが、UserDirの指定を行って、その「~」で区切った
ユーザーからの、、「Alias」と「ScriptAlias」の場合はどのように変化させなければならないのか、色々試行錯誤したのですが分かりません。
お忙しいところ恐縮ですがよろしくお願いします。
当然贅沢は言えないですが、できれば、「上記のパターンであれば○○」という具体的に示していただけるとありがたいです。
また、DocumentRootの方で成功させた試験的な記述ですが一応記載しておきます。
-----------------------------------------------------------------------------------
Alias /aaa "E:/web/public_html/zzz/yyy/xxx" で http://abcdz.com/aaa/iroiro.html で表示成功!
(E:/web/public_html/zzz/yyy/xxxのxxxフォルダ配下にiroiro.htmlを配置してあります)
Alias /zzz "F:/aaa/bbb/ccc" で http://abcdz.com/zzz/iroiro.html/ で表示成功!
(F:/aaa/bbb/cccのcccフォルダ配下にiroiro.htmlを配置してあります)
ScriptAlias /bbs/ "E:/aaa/bbb/ccc/bbs/" で http://abcdz.com/bss/war.cgi で表示成功!
(E:/aaa/bbb/ccc/bbsのbbsフォルダ配下にwar.cgiファイルを配置してあります)
------------------------------------------------------------------------------------
こんにちは。
http://www.aconus.com/~oyaji/faq/apache_cgi1.htm
の2項の一番下が回答です。UserDirの指定がScriptAliasやAliasの指定より優先されるので
希望する動作はできないと思います。
Apacheはドキュメントが整備されていますので、よく読んで自分なりに体系立てて理解していけばいろいろ見えてくるはずです。
> の2項の一番下が回答です。UserDirの指定がScriptAliasやAliasの指定より優先されるので
> 希望する動作はできないと思います。
おはようございます。
なるほどですね。
UserDirの方が優先されてしまうわけですか。。。
そうするとUserDirで指定した(平たく言えば区分けしたユーザーは)、
仮想ディレクトリやマッピング(別名マッピング含む)もできないという事ですよね。
ドキュメントや、書籍で再度確認したのですが、「VirtualHost」なら、ユーザー毎に
指定できますよね?
よって仮にユーザーごと仮想ディレクトリやマッピング(別名マッピング含む)等の、「Alias」と「ScriptAlias」
の処理をを行いたいのであれば、ドメインを使い分けて「VirtualHost」で組みなさい。
ということですよね?
こんにちは。
> UserDirの方が優先されてしまうわけですか。。。
> そうするとUserDirで指定した(平たく言えば区分けしたユーザーは)、
> 仮想ディレクトリやマッピング(別名マッピング含む)もできないという事ですよね。
そうです。
> ドキュメントや、書籍で再度確認したのですが、「VirtualHost」なら、ユーザー毎に
> 指定できますよね?
> よって仮にユーザーごと仮想ディレクトリやマッピング(別名マッピング含む)等の、「Alias」と「ScriptAlias」
> の処理をを行いたいのであれば、ドメインを使い分けて「VirtualHost」で組みなさい。
> ということですよね?
本来やりたいこと(Aliasを使う意味)が分からないので、どういうソリューションがあるか
明示しにくいのですが、少なくと、ドメインを分けるというのは解のひとつではあるかも
知れませんが、それはそれでいろいろ課題があるので、本当にそうかは疑問。というか、
ユーザごとにドキュメントを分ける場合に、普通採る手段とは思えません。
「~」をやめるのもひとつの手。これが、一番目的に近い解のはず。
そうすれば、Aliasが使えます。
因みに、下記はご覧になりましたか?
http://httpd.apache.org/docs-2.1/ja/howto/public_html.html
・UserDir ディレクティブは、複数のユーザのいるシステムで、各ユーザがホームディレクトリ
にウェブサイトを構築できるようにするためのもの。
・従って、/home/*/public_html以下をユーザごとに解放すればいいだけで、何でAliasが必要
なのかがよく分かりません。
・CGIを設置させたくないなら、cgi-binに管理者が設置し、コンテンツ側でそこを指定すれば
よいはず。(プロバイダがよくやっている方法)
> 本来やりたいこと(Aliasを使う意味)が分からないので、どういうソリューションがあるか
> 明示しにくいのですが、少なくと、ドメインを分けるというのは解のひとつではあるかも
> 知れませんが、それはそれでいろいろ課題があるので、本当にそうかは疑問。というか、
> ユーザごとにドキュメントを分ける場合に、普通採る手段とは思えません。
確かにおっしゃるとおりですね。
元々はセキュリティ上でCGIの実行場所を、ドキュメントルート以外にマッピングさせた方が
いいと言う事を、書籍で記載されていたり、web上でみつけたので、
「~」で区切ったユーザーもドキュメントルート以外にマッピングさせたかったのです。
そこで、「~」を使用するとUserDIRが優先されてしまい、使用できないということでしたので、
私なりの発想で数人程度ですが、複数のユーザに使用させ、
かつCGIディレクトリをマッピングるためには「VirtualHost」でマッピングさせればいいかなと思いまして。
> ・CGIを設置させたくないなら、cgi-binに管理者が設置し、コンテンツ側でそこを指定すれば
> よいはず。(プロバイダがよくやっている方法)
すみません。
「コンテンツ側でそこを指定」という方法が分からないので的外れかもしれませんが、
結局この方法は、ドキュメントルートの下位にFTPで接続させて、CGIの設置を管理者が
行うか否かだけで、CGIの設置場所はドキュメントルート下位、FTP接続権限上位になるだけで、
結局はドキュメントルート外にCGIを設置するにはマッピングをさせないと駄目なのではないでしょうか?
まだ、数ヶ月の初心者であるため的をはずしているかもしれませんがよろしくお願いします。
こんばんは。
いろいろトライされているようで、そのまま探究心を持って進められるといいですね。
ただ、表面的なことだけでなく、その理由や理屈まで押さえられると、一気にわかる
世界が広がりますよ。
(snip)
> 確かにおっしゃるとおりですね。
> 元々はセキュリティ上でCGIの実行場所を、ドキュメントルート以外にマッピングさせた方が
> いいと言う事を、書籍で記載されていたり、web上でみつけたので、
> 「~」で区切ったユーザーもドキュメントルート以外にマッピングさせたかったのです。
>
> そこで、「~」を使用するとUserDIRが優先されてしまい、使用できないということでしたので、
> 私なりの発想で数人程度ですが、複数のユーザに使用させ、
> かつCGIディレクトリをマッピングるためには「VirtualHost」でマッピングさせればいいかなと思いまして。
>
> > ・CGIを設置させたくないなら、cgi-binに管理者が設置し、コンテンツ側でそこを指定すれば
> > よいはず。(プロバイダがよくやっている方法)
>
> すみません。
> 「コンテンツ側でそこを指定」という方法が分からないので的外れかもしれませんが、
> 結局この方法は、ドキュメントルートの下位にFTPで接続させて、CGIの設置を管理者が
> 行うか否かだけで、CGIの設置場所はドキュメントルート下位、FTP接続権限上位になるだけで、
> 結局はドキュメントルート外にCGIを設置するにはマッピングをさせないと駄目なのではないでしょうか?
ここで、何故、「ドキュメントルート以外に置いたほうがいい」かの理由まで追求され
ていれば、この疑問は湧かなかったはずです。
答えは、既にわかっていらっしゃるように、「ドキュメントルート以外に置いたほうが
いい」理由は、CGI設置を管理者しかできないようにすること以外の何者でもありません。
よく考えていただければ、単純明快です。
まず、CGIはどこに置こうが、HTTPでアクセスできる以上、CGIそのもののバグがあれば
セキュリテイも何もあったものではありません。
ドキュメントルートにCGIを置くということは、CGIの実行権をドキュメントルート下に
与えることになります。一方で、ドキュメントルートにはFTPでユーザにアクセス許可を
与えますので、任意のCGIを送り込んで実行できてしまいます。前に質問された方がいますが、
例えば、「telnet.cgi」のようなものを使えば、権限は押さえられますが、かなりのことが
やり放題になってしまいます。
この対策が、ドキュメントルートにCGIは置かず(実行権を与えない)、他に設置すると
いう理由です。つまり、自由にFTPできるところには置かない、置いても実行できない
ようにする、という理由しかありません。
後は、おやじのように他人様に貸したりすることはせず、自分の管理下でドキュメント
ルートでCGIを実行する方法もあるでしょう。
要は、セキュリティポリシーの問題です。
> ここで、何故、「ドキュメントルート以外に置いたほうがいい」かの理由まで追求され
> ていれば、この疑問は湧かなかったはずです。
> 答えは、既にわかっていらっしゃるように、「ドキュメントルート以外に置いたほうが
> いい」理由は、CGI設置を管理者しかできないようにすること以外の何者でもありません。
> よく考えていただければ、単純明快です。
> まず、CGIはどこに置こうが、HTTPでアクセスできる以上、CGIそのもののバグがあれば
> セキュリテイも何もあったものではありません。
> ドキュメントルートにCGIを置くということは、CGIの実行権をドキュメントルート下に
> 与えることになります。一方で、ドキュメントルートにはFTPでユーザにアクセス許可を
> 与えますので、任意のCGIを送り込んで実行できてしまいます。前に質問された方がいますが、
> 例えば、「telnet.cgi」のようなものを使えば、権限は押さえられますが、かなりのことが
> やり放題になってしまいます。
> この対策が、ドキュメントルートにCGIは置かず(実行権を与えない)、他に設置すると
> いう理由です。つまり、自由にFTPできるところには置かない、置いても実行できない
> ようにする、という理由しかありません。
> 後は、おやじのように他人様に貸したりすることはせず、自分の管理下でドキュメント
> ルートでCGIを実行する方法もあるでしょう。
> 要は、セキュリティポリシーの問題です。
確かにそうですね。
色々ご相談に乗っていただきありがとうございました。
また何かありましたらよろしくお願いします。
うちでもできないことがあって、この質問を参照させてもらいました。
うちがしたい構成は、
http://127.0.0.1/~userA/ で c:/apache/users/userA/public_html/index.html を表示、
http://127.0.0.1/~userA/cgi-bin/test.cgi で c:/apaceh/users/userA/cgi-bin/test.cgi を実行、
という風にしたいんですが、
ScriptAlias より UserDir を優先ということで、これもできないということになりますかね?
現在は以下のように設定してありますが、CGIは実行できません。
UserDir "C:/Apache/users/*/public_html"
ScriptAlias /cgi-bin/ "C:/Apache/users/*/cgi-bin/"
<Directory "C:/Apache/users/*/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
もしプロバイダ形式みたいに、
c:/apache/cgi-bin/users/userA に test.cgi を設定し、
http://127.0.0.1/~userA/cgi-bin/test.cgi で実行できるようには、どのように設定すれば、
いいのでしょうか?
飛び入りでご迷惑をおかけしますm(_)m
rieさん、海さんこんばんは。 大事なディレクティブを忘れていました。ScriptAliasMatchです。AliasやScriptAlias は使いません。 共通の答えになるかどうかですが、少なくとも海さんの答えにはなるはずです。 Usrdirを使って、ユーザごとのcgi-binディレクトリをpublic_htmlと同じ階層に 作成する方法です。FTPはpublic_html以下にしかさせなければ、セキュリティも 保てます。windowsベースで示します。 「ディレクトリ構造」 C:\apache\htdocs--+--user1--+--public_html | | | +--cgi-bin | +--user2--+--public_html | +--cgi-bin 「httpd.confの設定」 UserDir "C:/Apache/htdocs/*/public_html/" <Directory "C:/Apache2/htdocs/*/public_html/"> AllowOverride FileInfo AuthConfig Limit Options MultiViews SymLinksIfOwnerMatch IncludesNoExec # <Limit GET POST OPTIONS PROPFIND> # Order allow,deny # Allow from all # </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+) C:/apache/htdocs/$1/cgi-bin/$2 <Directory "C:/Apache/htdocs/*/cgi-bin/"> Options ExecCGI SetHandler cgi-script </Directory>
おやじさんありがとうございましたm(_)m
実行することができました!
<補足>
> SetHandler cgi-script
そのままやるとエラー?になったので、
AddHandler cgi-script .cgi としました。
こんばんは。 > おやじさんありがとうございましたm(_)m > 実行することができました! まずは、良かったですね。 なお、ここにあげた内容ですと、ユーザ名には英数字しか扱えません。 RedHat9のツールでは「_」や「-」等は使えませんが、コマンドからなら 設定はできます。あまり好ましくはないですが、その場合は、下記のように 正規表現を変更するなりしてください。 ScriptAliasMatch ^/~([a-zA-Z0-9_-]+)/cgi-bin/(.+) C:/apache2/htdocs/$1/cgi-bin/$2 ^^^^^^^^^^^ 後、rieさんの形態なら下記で、C:/apache2/cgi-binディレクトリ配下でCGIを動作できます。 ScriptAliasMatch ^/~([a-zA-Z0-9_-]+)/cgi-bin/(.+) C:/apache2/cgi-bin/$2 このケースでは、ScriptAlias関係の設定がされていれば、 <Directory "C:/Apache/htdocs/*/cgi-bin/">の設定は不要です。 > <補足> > > SetHandler cgi-script > そのままやるとエラー?になったので、 > AddHandler cgi-script .cgi としました。 どういうエラーだったのでしょうか?理由をはっきりしておかないと、 折角の対策が今後に活かせなくなりますので、是非教えてください。 恐らく、500のエラーが出たのではないですか?このディレクトリに CGIしかなければ、少なくともおやじの環境ではSetHandlerで問題ありません。 しかし、 SetHandler cgi-script とやってしまうと、このディレクトリにあるものは全てCGIスクリプトとして、 実行されるので、htmlや画像があるCGIですと500のエラーになります。 従って、海さんの対処のほうが融通が利きますのでこちらのほうがいいでしょう。 なお、htmlや例えばgifがある場合は、以下も合わせて記述すれば良いはずです。 因みにSetHandlerではこの記述は有効にはなりませんので、AddHandlerの方が良い でしょう。 AddHandler text/html .html .htm AddHandler image/gif .gif
あれ?Apacheを起動すると、
Apache/1.3.14 (WIN32) PHP/4.3.3 running・・・
の下に何かメッセージが出たはずなんですか、
今やってみると、正常に動作しました。
もしかしたらつづりを間違って入力してたのかもしれません。(確認したはずですが^^;)
エラーはなかったということでお願いします^^;
どうもすみませんでしたm(_)m
おやじ様
その方法もあったのですね。
とりあえず私もやってみます。
設定後にまたご報告をさせていただきます。