68user's page 掲示板

Prev< No. 229〜232> Next  [最新発言に戻る] [過去ログ一覧]
No. 229 # M.Masuda 1999/03/26 (金) 01:33
なぜじゃ〜どうしてじゃ〜←狭間かんぺい調(爆)
>一般ユーザで...

これもだめです。68Userさんが前に書いたとおりアクセス件が無いと
怒られます。
Insecure $ENV{PATH} while running setuid at ./su.cgi line 13.
と出ました。

>httpdのエラーログに、PATHがどうこう、と...
アパッチのerror_logは、だんまりです。(>_<)

>ここらへんがくさいです。
これも68Userさんと同じコードで試しました、がダメ。

ひとつ不思議を見つけました。
perl -c とすると、Args must match #! line at su.cgi line 1.
と出ます。

んっ!

とここまで書いて、他の事をいろいろ調べたらどうもこれが
前に疑問だった、suExecの機能のようです。
http://japache.infoscience.co.jp/japanese/manual/suexec.html
ってことは、68Userさんの環境はsuExecが実装された環境のようで
すね。
#今夜はずっとこの問題で格闘していたのでつかれた....ふげっ!

aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理
者に転送するという意味です。
#やってみれば分かりますね...(^^;
.bashrc等の設定ファイルに記述するのは、普通コマンドのailas
なのですか?

#なんかドッとつかれた....(T_T)

No. 230 # 68user 1999/03/26 (金) 02:20
うちでは #!/usr/local/bin/suidperl でも動きました。

> perl -c とすると、Args must match #! line at su.cgi line 1. と出ます。
suidスクリプトの実行時には、perlに渡す引数と
suidperlに渡す引数が同じでなくてはいけません。
# …と、青ラクダ本に書いてありました。

> これも68Userさんと同じコードで試しました、がダメ。
/usr/bin/perl は perl5 ですか?

FreeBSDの場合、FreeBSD 3.0R から /usr/bin/perl が perl5 に
なったのですが(それまではperl4)、その /usr/bin/perl は
suidperl が起動しないようになっていると聞きます。Linuxでも
OSの方針で、suidperlを実行しないようにコンパイルされている
のかもしれません。

> 68Userさんの環境はsuExecが実装された環境のようですね。
いえ、うちにはSuExecは入れてません。

何か問題が発生すると原因を切りわけていく必要があります。
httpdが原因かもしれないので、CGI経由で実行するより
コマンドラインで実行すべきかと思います。


> aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理
> 者に転送するという意味です。
ん〜、まだちょっと意味がわかりかねます。

> .bashrc等の設定ファイルに記述するのは、普通コマンドのailas
> なのですか?
そうです。コマンドの alias と /etc/aliases は全く別物です。

ROLさん
> ついにLinux起動いたしました(笑)
FreeBSDじゃないんですねぇ(^^;

> しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑)
やる気があればすぐですよん。

No. 231 # 68user 1999/03/26 (金) 03:12
え〜、FreeBSDでは、gethostby* は libc に入ってますので、
gethostbyaddr のソースは
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1
ここらへんです。/etc/hostsなどを見て、見付からなかったらDNS引きに
いきますが、それを担当するのは
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1

    struct hostent * _gethostbydnsname(addr, len, af)
あたりでしょうか。で、そこらへんの絡みで、
    static struct hostent * gethostanswer(answer, anslen, qname, qtype)
が呼ばれますが、そこで
    host.h_aliases = host_aliases;
    host.h_addr_list = h_addr_ptrs;
といったことをしています。で、host_aliases や h_addr_ptrs は
gethostnamaddr.cの先頭で
    static char *h_addr_ptrs[MAXADDRS + 1];
    static struct hostent host;
    static char *host_aliases[MAXALIASES];
    static char hostbuf[8*1024];
などと定義されいます。ちなみに
    #define MAXALIASES 35
    #define MAXADDRS 35
です。

> これらがすべて静的領域に確保されているとは考え難いと思います。
というわけで、全て static で宣言されているようですね。当然ですが
    if (hap >= &h_addr_ptrs[MAXADDRS-1]) {
        if (!toobig++)
            dprintf("Too many addresses (%d)\n",MAXADDRS);
エラーチェックもしています。

> 先日某所で尋ねられた件について、ちょっと分からなかったので、
> 質問させて下さい。
もしよろしければ、その話題が出たのはどこなのか教えていただけますか?
こういう楽しい話題が出るところに参加したいもので。

No. 232 # 68user 1999/03/26 (金) 13:03
> いきますが、それを担当するのは
>  http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1
失礼、
    http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostbydns.c?rev=1.23
こっちでした。

でも、char **である host_aliases や h_addr_ptrs が指している
char * な領域ってのはどこかな? よく読んでませんが、
    static char hostbuf[8*1024];
っぽいですね。

Prev< No. 229〜232> Next  [最新発言に戻る] [過去ログ一覧]