もう20時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]萌え猫写真館が復活。[PR]  
レス数が950を超えています。1000を超えると表示できなくなるよ。

Apache関連 Part10

1 :名無しさん@お腹いっぱい。:2007/05/20(日) 11:21:54
HTTP ServerのApacheに関する話題を扱うスレッドです。
http://httpd.apache.org/

HTTP Serverの最新Versionは
Apache/2.2.2
Apache/2.0.58
Apache/1.3.36

●インストール済みApacheの詳細情報の調べ方
httpd -h 簡易ヘルプ
httpd -v バージョン情報
httpd -V コンパイル条件など詳細な情報
httpd -l 静的リンクされたモジュール一覧
httpd -M 現在の設定ファイルで読み込まれるモジュール(2.2以降)

●公式マニュアル
http://httpd.apache.org/docs/1.3/ Apache 1.3
http://httpd.apache.org/docs/2.0/ Apache 2.0
http://httpd.apache.org/docs/2.2/ Apache 2.2

●ディレクティブ一覧
http://httpd.apache.org/docs/1.3/mod/directives.html
http://httpd.apache.org/docs/2.0/mod/quickreference.html
http://httpd.apache.org/docs/2.2/mod/quickreference.html



919 :名無しさん@お腹いっぱい。:2008/08/06(水) 20:34:43
綺麗好きな漏れ

#!/bin/sh
LC=`locale | cut -d = -f 1`
for lc in $LC; do unset "$lc"; done
env - PATH="/bin:/usr/bin" /usr/local/apache2/bin/apachectl start

920 :名無しさん@お腹いっぱい。:2008/08/06(水) 22:38:38
>>919
djb 信者ですね。わかります。

921 :名無しさん@お腹いっぱい。:2008/08/07(木) 11:06:22
env - PATH=... で起動するのは常識だよ。
これをやらんと CGI に妙な環境変数が渡ってしまう。


922 :名無しさん@お腹いっぱい。:2008/08/07(木) 11:20:43
>>919
結局 env - ですべての環境変数が消えるのに、
$LCだけ個別にunsetしてるのは何故?
envの実行時にLC_HOGEが設定されてるとまずいの?

923 :名無しさん@お腹いっぱい。:2008/08/07(木) 12:09:16
しかも、forループ回さなくても unset $LC で一発なのに。

924 :名無しさん@お腹いっぱい。:2008/08/07(木) 12:19:22
>>923
(゚Д゚)ハァ?
$ unset $LC
$ env | grep LC
LC_CTYPE=ja_JP.eucJP


925 :名無しさん@お腹いっぱい。:2008/08/07(木) 12:46:12
>>924
何ボケてんだよwww
>>923 が言ってるのは、「for文」の部分が「unset $LC」で一発って言ってるんだよ。

LC=`locale | cut -d = -f 1`
unset $LC

926 :名無しさん@お腹いっぱい。:2008/08/07(木) 16:07:30
お前らこそUNIX板逝けよ

927 :名無しさん@お腹いっぱい。:2008/08/07(木) 16:12:06
>>919
綺麗好きならシェルも奇麗にしようね。
>>922 が言うように、env - するならそれ以外の unsetは不要。
あと、最後のコマンドは execで起動するのがシェルの定石。
それと、不要なダブルクォートも取っておこう。


#!/bin/sh
exec env - PATH=/bin:/usr/bin /usr/local/apache2/bin/apachectl start

928 :名無しさん@お腹いっぱい。:2008/08/07(木) 16:16:01
" " はあった方が見易くて好きだな。
exec するべきかどうかは場合によるでしょ。

929 :名無しさん@お腹いっぱい。:2008/08/09(土) 02:24:18
Apache+PHP環境のセキュリティについて質問です。
Apacheの実行ユーザに重要なファイルのアクセス権限を与えることはセキュリティ上問題ないのでしょうか?
例えば、PHPでセッションを生成するとサーバにApacheの実行ユーザがアクセスできる権限でセッションファイルが作成されます。
全てのセッションファイルがApacheの実行ユーザからアクセスできるため、
何らかの方法でApacheの実行ユーザを利用して全く関係ない人のセッションファイルが覗かれたりすることはないのでしょうか?

よろしくお願いします。
スレ違いだったら申し訳ありません。

930 :名無しさん@お腹いっぱい。:2008/08/09(土) 09:00:17
通常はApache実行ユーザは、権限の低い nobodyなどになっているはずです。
そのユーザではサーバにログインできない設定になっているので、そのような心配は無用かと。

931 :名無しさん@お腹いっぱい。:2008/08/09(土) 09:03:08
大有り。
セキュリティ上重要な情報があるなら、共有サーバーは使用しない。これが唯一の解。

932 :名無しさん@お腹いっぱい。:2008/08/09(土) 10:46:14
>>929
mod_suphp

933 :名無しさん@お腹いっぱい。:2008/08/09(土) 16:11:27
>>930
>>931
>>932

皆さんお答えありがとうございます。
今回は共有サーバではなく、専用サーバにサービスを構築することを想定しているので、
サーバ管理者以外のユーザがスクリプトを作成し、
他のユーザが作成した重要なファイルなどを覗くということはないと考えています。
わかりにくくてすみません。

apacheの実行ユーザになりすまされたり、実行ユーザが乗っ取られることにより、
セッションファイルなどの重要なファイルが覗かれたりしないかどうかが気になっています。
このレベルのセキュリティはapacheというよりも、サーバ自体のセキュリティの問題ですかね・・・?

934 :名無しさん@お腹いっぱい。:2008/08/09(土) 20:46:37
今日までApacheの読み方をアパッシェだと思っていた。
うん、それだけ。

935 :名無しさん@お腹いっぱい。:2008/08/10(日) 11:45:23
それは報告しなくていいです。

936 :名無しさん@お腹いっぱい。:2008/08/10(日) 14:14:20
セッション情報を読み書き出来ないウェブプログラムに、どんな意味が!w
ウェブサービスに関係無いファイルなら、アクセス出来ない様にすれば


937 :名無しさん@お腹いっぱい。:2008/08/12(火) 20:48:34
こんな感じで
FQDN分だけ <VirtualHost></VirtualHost>設定するのではなく、
一つの<VirtualHost></VirtualHost>だけで
複数のFQDN対応する記述の仕方がどこかで紹介されてたのですが、
忘れてしまいました。

どなたかお助けを。



938 :937:2008/08/12(火) 21:01:04
肝心の部分が抜けてた・・・・
再投稿させてください。。。

<VirtualHost *:80>

DocumentRoot /www/example1
ServerName www.example.com

# Other directives here


</VirtualHost>

<VirtualHost *:80>

DocumentRoot /www/example2
ServerName www.example.org

# Other directives here


</VirtualHost>

こんな感じで
FQDN分だけ <VirtualHost></VirtualHost>設定するのではなく、
一つの<VirtualHost></VirtualHost>だけで
複数のFQDN対応する記述の仕方がどこかで紹介されてたのですが、
忘れてしまいました。

どなたかお助けを。



939 :名無しさん@お腹いっぱい。:2008/08/12(火) 22:10:48
>>938
serveraliasか?

940 :名無しさん@お腹いっぱい。:2008/08/13(水) 00:54:02
どこかでって言うけどさ、
まず最初に見に行くべきとこがあるでしょ。

941 :名無しさん@お腹いっぱい。:2008/08/13(水) 03:23:59
mod_vhost_alias

942 :名無しさん@お腹いっぱい。:2008/08/13(水) 17:41:07
>>938
<VirtualHost> を1個しか書かなきゃ、マッチしなかったリクエストは
全部その <VirtualHost> に逝くね。
確実にやりたいなら、ServerAlias で1個ずつ書くとイイ。

943 :名無しさん@お腹いっぱい。:2008/08/13(水) 18:20:53
mod_rewriteでのVirtual Hostのマッピングの話じゃないの?

944 :名無しさん@お腹いっぱい。:2008/08/13(水) 21:49:44
CentOS5.2 / メモリ4GB環境に
Apache2.2.9 入れて prefork / ServerLimit 100 で動かしたんだけど
起動から数時間でapcheがメモリとスワップ食い尽くしてしまう。
sar/vmstat/topで監視してても、なにかの拍子に突然津波のようにリソース食いだして
ものの1分くらいでスワップ埋まって暴走しちゃうから病原のプロセスが特定できない。
(CGIとかはFedora3環境で正常で動いてたものをそのまま移動)
なにが考えられるかな?

945 :名無しさん@お腹いっぱい。:2008/08/13(水) 23:42:48
>>944
とりあえずアクセスログを見て、変なリクエストが来てないか確認。
問題解決までの時間稼ぎとしては、apache の起動スクリプトで

ulimit -v 20480
/usr/local/apache2/bin/apachectl start

などとする。

946 :名無しさん@お腹いっぱい。:2008/08/14(木) 22:11:02
>>945
ありがとう
ulimit -v と -m かけて起動してみた
再現するまで様子みてみます。

947 :名無しさん@お腹いっぱい。:2008/08/15(金) 06:36:55
いや、リミット掛けると制限超えたプロセスは即殺されるんで、それだけだと
再現してるかどうか分からないよw

↓のスクリプトを実行して放置してみてくださいな。1秒ごとに ps を実行して
20MB を超える httpd があれば出力する。あと httpd.conf の LogFormat に
%p を追加すれば PID が記録されるんで、それと合わせて何か分かるかも。

#!/usr/bin/perl
use strict;
my $max = 1024 * 20;
for (;;) {
 foreach (`/bin/ps ax -o pid,vsize,ucmd`) {
  s/^\s+//;
  my ($pid, $vss, $ucmd) = split(/\s+/);
  if ($ucmd eq 'httpd' && $vss >= $max) {
   my ($mon, $day, $h, $m, $s) = (localtime(time))[4,3,2,1,0];
   printf("time=[%s], pid=%d, vss=%d\n",
    sprintf("%02d/%02d %02d:%02d:%02d", $mon+1, $day, $h, $m, $s),
    $pid, $vss);
  }
 }
 sleep 1;
}

948 :名無しさん@お腹いっぱい。:2008/08/15(金) 09:59:04
なにこの汚いコードは?

949 :名無しさん@お腹いっぱい。:2008/08/15(金) 11:37:09
>>948
なるべく少ない行数にまとめた結果でございます。Perl はこんなもんですw
sh で書くよりこの方が動作が早いんで。

950 :名無しさん@お腹いっぱい。:2008/08/15(金) 15:06:47
それにしても目が痛い

951 :名無しさん@お腹いっぱい。:2008/08/15(金) 18:36:42
むしろ見やすいし読みやすいコードだろ
948=950は頭おかしいんじゃないの?

952 :名無しさん@お腹いっぱい。:2008/08/15(金) 19:55:08
どうでもイイと思いつつ書き直してみた。Perl だとどうしても記号が多くなるからなぁ・・・・
このスクリプトに追加して gdb -p $pid とかやって core 吐かせることも可能ですお。

#!/usr/bin/perl
use strict;
my $max = 1024 * 20;
while (sleep 1) {
 foreach (`/bin/ps ax -o pid,vsize,ucmd`) {
  s/^\s+//;
  my ($pid, $vss, $ucmd) = split(/\s+/);
  if ($ucmd eq 'httpd' && $vss >= $max) {
   printf("time=[%s], pid=%d, vss=%d\n", tstamp(), $pid, $vss);
  }
 }
}
sub tstamp {
 my ($mon, $day, $h, $m, $s) = (localtime(time))[4,3,2,1,0];
 return(sprintf("%02d/%02d %02d:%02d:%02d", $mon+1, $day, $h, $m, $s));
}

953 :名無しさん@お腹いっぱい。:2008/08/15(金) 21:14:14
このぐらいにまとめられるJK

#!/usr/bin/perl
use strict;
use POSIX;
do {
 foreach (`/bin/ps ax -o pid,vsize,ucmd`) {
  s/^\s+//;
  my ($pid, $vss, $ucmd) = split(/\s+/);
  if ($ucmd eq 'httpd' && $vss >= 20480) {
   my $tstamp = ctime(time);
   chomp($tstamp);
   printf("time=[%s], pid=%d, vss=%d\n", $tstamp, $pid, $vss);
  }
 }
} while (sleep 1);

954 :名無しさん@お腹いっぱい。:2008/08/15(金) 21:37:25
クソスレの悪寒

955 :名無しさん@お腹いっぱい。:2008/08/15(金) 22:54:35
すごい!!
さっそく%Pいれて、ただいたスクリプト走らせながら犯人が現れるのを張り込みしています
犯人のPIDの取得方法がわからなかったのですが、ログ残せるんですね

それと昨日まではulimitが問題なく使えたのですが
apacheを再起動したところ

/usr/local/apache2/bin/apachectl: line 78: 10178 セグメンテーション違反です $HTTPD -k $ARGV

のエラーが出て起動すらしなくなってしまました。
ulimit -vか-mをunlimitedにすれば問題なく起動するのですが。

それと昨日topのmしていたら、ハング直前にこんなプロセスが発生することを発見
8932 apache 18 0 2811m 2.1g 1.0g D 2 53.8 0:03.99 httpd
8038 apache 18 0 2811m 2.1g 1.0g D 3 53.7 0:03.55 httpd
7762 apache 16 0 37044 22m 2724 S 0 0.6 0:00.76 httpd
・・・・

RLimitMEM 400000000してるのですが、、1プロセス2.1Gって・・・

956 :名無しさん@お腹いっぱい。:2008/08/15(金) 23:06:49
あ、ごめん。%p じゃなくて %P だったか。
んでもって、起動しただけでいきなり SEGV ってのはおかしいね。どんな
インスコして、どんなモジュール使ってる?
ulimit の値を少しずつ大きくしてコケない値を探してみると何か分かる・・・・かなぁ?

RLimitMEM は実行される CGI への制限であって、httpd 自身への制限ではないよ。
httpd への制限をするには ulimit すべし。

957 :名無しさん@お腹いっぱい。:2008/08/15(金) 23:15:41
よく見たら 7762 のプロセスもデカいね。mod_php とか mod_perl とか入れてる?

958 :名無しさん@お腹いっぱい。:2008/08/16(土) 00:03:20
>>953
下手くそ

959 :名無しさん@お腹いっぱい。:2008/08/16(土) 01:22:25
>>956
./configure --enable-module=so --enable-rule=SHARED_CORE --enable-rewrite --enable-ssl \
--with-dom --with-zlib-dir

configure: WARNING: Unrecognized options: --enable-module, --enable-rule, --with-dom, --with-zlib-dir
を無視してmakeしてます
(まさかコレがまずい!?)

いただいたソースをもとに100M超えたら携帯にメールしてそのプロセスを殺すようにしたので
とりあえずulimitなしでいってみます

960 :名無しさん@お腹いっぱい。:2008/08/16(土) 02:31:04
>>959
> configure: WARNING: Unrecognized options: --enable-module, --enable-rule, --with-dom, --with-zlib-dir
> を無視してmakeしてます
>>746

961 :名無しさん@お腹いっぱい。:2008/08/16(土) 04:16:19
>>959
"--with-dom --with-zlib-dir" はphp の configure パラメータでないか?

"--enable-module=so --enable-rule=SHARED_CORE" は、 --enable-so でいいのではないかなぁ

参考:
 ttp://www.php.net/manual/ja/install.unix.apache2.php
 ttp://httpd.apache.org/docs/2.2/programs/configure.html


962 :961:2008/08/16(土) 04:22:40
で、意図するところは、
./configure --enable-so --enable-rewrite --enable-ssl

でいいかと。
ただ、無効なオプションは無視されているので、いまのままでも実害はないと思う。

>>957 さん指摘のとおり、mod_php (というか php プログラム)が原因になっていたりしない?


963 :名無しさん@お腹いっぱい。:2008/08/16(土) 06:10:41
ありがとー
さきほど
./configure --enable-so --enable-rewrite --enable-ssl
でmakeしなおしました。

それでさきほど
time=[08/16 04:29:45], pid=16093, vss=2880428
で反応がありました。

access_logによるとPID 16093は4:27:39から04:29:38までの38アクセス
すべて200と304で正常に処理が終了してました
うちGETが37、phpへのPOSTが1
POSTのあったphpは頻繁にアクセスのあるもので、問題に疑いのないプログラムです。
error_log、messagesに特に目だったエラーなし。
vss=は徐々に食っていったわけでなく、唐突に2GBめいいっぱい食ったようです
どうやら、おかしなcgiやphpを実行しているというわけではないような・・

964 :名無しさん@お腹いっぱい。:2008/08/16(土) 12:36:08
一度では分からないから、そのまま継続すべし。
5回ぐらい際限した後で共通点を探るのがセオリーでつ。

965 :名無しさん@お腹いっぱい。:2008/08/16(土) 12:40:27
×際限 ○再現

966 :名無しさん@お腹いっぱい。:2008/08/16(土) 13:43:39
最後のアクセスからアラームまで7秒もあるのか・・・・
そこまで時間差があるなら、最後のリクエストが怪しいな
悪意の有無は関係なく、どっかで制御を誤って無限ループしてる悪寒

967 :名無しさん@お腹いっぱい。:2008/08/18(月) 03:15:40
>>963です
24時間たったけどいまのところ問題起きてません
これまで12時間に2〜4回は発生していたので、もしかしたら本当にconfigureが原因だったのかもしれません
もう一度誤ったconfigureしたものに戻せば検証できるのですが、
いまのところ安定しているのでこのまま様子みつづけてみます
助かりました。みんなありがとー

968 :名無しさん@お腹いっぱい。:2008/08/18(月) 15:19:40
特に理由がない限り漏れいっつもこんな感じだわ。

CFLAGS="-O2 -march=i686" \
./configure \
--prefix=/usr/local/apache2 \
--with-mpm=prefork \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite \
--enable-proxy \
--enable-ssl

>>967の件はconfigure関係ないと思う。少なくとも1回は発生してるシナ。

278 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

取りに行ったけどなかった。次は一時間後に取りに行くです。
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.3 2008/07/26
FOX ★ DSO(Dynamic Shared Object)