68user's page 掲示板

Prev< No. 2971〜2992> Next  [最新発言に戻る] [過去ログ一覧]
No. 2971 # ふくし [E-mail] 2002/12/05 (木) 20:32:07
補足です。
この tag というのは全部同じタグです。
ただオープンタグにかかれている a, b, ... という
アトリビュートが全部違います。

No. 2972 # ふくし [E-mail] 2002/12/05 (木) 23:16:22
さらに補足。(俺って説明下手だな、、;;;
ファイルには <tag> 以外のタグも存在します。
<aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。
その中で下の処理の対象になるのが <tag> だけということです。
<tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、
それも抜いて書き出します。
問題の定義もなかなか奥が深い。

No. 2973 # 68user 2002/12/06 (金) 00:21:32
>>2969 kiki
シェルって何をしているか知っていますか? 簡単に言うと、ユーザが
入力した文字列を解析し、execve(2) を実行することです。

シェルのソースをいじっていいのならば、execve(2) を発行している
部分を探して、そこで su を実行しようとしているかどうかのチェックを
行えばよいのでは、という話です。

>>2970 ふくし
入力が XML なら、
    http://member.nifty.ne.jp/hippo2000/perltips/xml/dom.htm#XML_DOM_NODE
の removeChild で一発なような気がします。

XML でないなら構文解析してスタックに積んで…といきたいところですが、
僕は軟弱なので
    - s|<tag .*?>.*?</tag>||
    - 削除したのが足りなかった
            (例えば <tag a>in1<tag b>in2<tag c>in3</tag> しか取れなかった)
        なら、追加であと 2個の </tag> をするため s|.*?</tag>.*?</tag>|| とする。
とします。

No. 2974 # 68user 2002/12/06 (金) 01:04:43
>>2967 68user
> 別の解としては、システムコールの発行を hook して安全性をチェック、
> というのもありますが、UNIX でこういうのってできるのかなーと思って
> 調べてみたら、なんかできるようですね。
>   http://www.caj.co.jp/support/etrustac_faq.htm
>     Q6: eTrust Access ControlのSoft Hook技術とは何ですか?
> カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を
> 置き換えているのか…(できるのかな?)

最近これに激しく惹かれているのですが、libc 置き換えで可能なんでしょうか。
詳しい人がいらっしゃったら教えてください。

全てのシステムコールは
      http://home.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/sys/syscall.S?rev=1.8
を経由するんじゃないかと思っているのですが、もしそれが正しいなら
ここにチェック機能を入れた libc を用意して置き換えるか、あるいは
LD_PRELOAD で既存 libc に置き換えることは可能なのかなぁ。

どちらにせよアセンブラができないので、
      http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html
を買って勉強かな…。

No. 2975 # ふくし 2002/12/06 (金) 10:29:54
>>2973 68user
さん、ありがとうございます。
まさに xml で、そのパッケージすごく便利そうなんですが
使い方がよくわかりません ;;;
でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。

No. 2976 # 68user 2002/12/06 (金) 11:02:25
>>2975 ふくし
別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が
幸せ度が高いかと。

# 僕は使ったことないですけど。

No. 2977 # UMA 2002/12/06 (金) 13:15:47
通りすがりのものですが・・・

システムコールをhookして安全性を云々というのは、
たとえば
        Systrace - Interactive Policy Generation for System Calls
        http://www.citi.umich.edu/u/provos/systrace/
こういったもののことでしょうか?
(OpenBSD, NetBSD にはマージされています)

No. 2978 # UMA 2002/12/06 (金) 13:17:35
X68000の、内臓フォントを利用するインターフェースを調べています。
フリーで有用な文書がありましたら教えていただけないでしょうか?
>識者

なお当方X68000に関する知識は皆無でございます。

No. 2979 # KENT1 2002/12/06 (金) 16:14:05
>>2960 68user様 報告が遅れまして申し訳ありません。
/usr/bin/time 実行コマンド >& 出力ファイル
を実行した結果うまくいきました。ありがとうございました。

No. 2980 # ふくし [E-mail] 2002/12/06 (金) 17:05:36
タグのパースの件です。
別解ですが、会社の若い者が作ったプログラムが無事動きました。

で、せっかくなので XML::DOM を入れようとしたら、
XML::Parser を入れよと言われたので、
XML::Parser を入れようとしたら、
expat を入れよと言われたので、
expat の tar.gz を解いて ./configure して Makefile を
#prefix = /usr/local
prefix = /henna_directory
として make したら(ぼくは管理者でないので)、
  gcc: unrecognized option `-R/henna_directory/lib'
といわれました。ここで止まっています。
ちなみに /henna_directory/lib というディレクトリはあります。
(ついでにいうと、bin も include も man も)
待て次号。;;;

No. 2981 # 68user 2002/12/06 (金) 22:59:42
>>2977 UMA
> システムコールをhookして安全性を云々というのは、
はい、そういうものを念頭に置いていました (が、ユーザランドで
できたらいいなと。無理なのかな)。

Systrace の存在は知りませんでしたが、これはとてもいいですねぇ。
素晴らしいです。

>>2978 UMA
68user's page で X68000 の疑問が解決したことは一度もなかったりします。
インタフェースって API ですか? (ではなさそうな気がしますが)。僕が記憶に
頼って書くと多分間違っているので、X68000 エミュレータ関係の掲示板で
聞くのが早いと思います。

>>2980 ふくし
まーいろいろありますが、がんばってインストールしてください。

あと、libwww-perl あたりもいれなきゃいけないのが perl の XML
モジュールのうざいところ。

No. 2982 # kiki 2002/12/07 (土) 02:16:59
>>2973 68user様
お返事ありがとうございます.kikiです.

丁寧なご説明ありがとうございました.
おかげで理解できました.ありがとうございます.

No. 2983 # 68user 2002/12/08 (日) 06:01:43
いつも忘れて調べなおすはめにおちいるのでここにメモメモ。

TeraTerm 経由の mule などで PageUp が効かない場合、
Windows\Program Files\TTERMPRO\KEYBOARD.CNF の
    Remove=329
を ; でコメントアウトし、その下に
    User1=329
を追加。さらにファイルの一番最後に
    User1=329,0,$1B[5~
を追加。

って、ちょっと検索してみたら、
    http://phe.phyas.aichi-edu.ac.jp/~cyamauch/mule.html
の対処と全然違ってますな。なんでアレで PageUp できるんだろう。

No. 2984 # SIGNAL 2002/12/12 (木) 18:51:54
OS: Solaris 2.5.1
プロセスの通知にシグナルを使っています。
これまで、SIGUSR1とSIGUSR2で間に合っていたのですが、
今回もう一つパターンの追加(SIGUSR3?)を行いたいのです。
そこで、質問なのですが
<signal.h>にシグナルを追加できるのでしょうか?
また、出来るとしたら注意しないといけない点や
影響を及ぼす範囲を教えて下さい。

よろしくお願いします。

No. 2985 # 68user 2002/12/13 (金) 12:45:23
>>2984 SIGNAL
シグナルの追加はカーネルを書き換えないと無理です。

シグナル以外の方法 (パイプ・共有メモリなど) で情報のやりとり
をするのが正解でしょう。

と偉そうなことをいってますが、シグナルが足りず SIGXCPU を
使って逃げたことはあります。

No. 2986 # koko 2002/12/16 (月) 14:34:40
親プロセスでforkした子プロセスの終了状態(終了コード)を、親プロセス
が認識する方法があれば情報提供をお願いします。

・親プロセスはwaitしません。
・子プロセスは同じものが複数生成されます。(順次生成)

ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、子プロセスにはできる限り修正を加えない方法を探しています。
理想は子プロセスの終了時にイベントが発生し、waitのように変数に結果
が格納されるようなものです。

No. 2987 # 68user 2002/12/18 (水) 08:51:46
>>2986 koko
> ファイルへ子プロセスの結果を出力して親プロセスが参照したり、パイプ
> や共有メモリを使用してのプロセス間通信などの方法があるかと思いますが、
の方法を取らないのであれば、無理なんじゃないでしょうか。

No. 2988 # hsj 2002/12/18 (水) 14:58:58
>>2986 koko
> ・親プロセスはwaitしません。
親でSIGCHLDを拾ってwaitpid()のオプションWNOHANGで
チェックするのもダメですか?
--- snip ---
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/wait.h>

void handler(int sig)
{
        int pid,status,code;

        while((pid=waitpid(-1,&status,WNOHANG))>0)
        {
                if(WIFEXITED(status))
                {
                        code = WEXITSTATUS(status);
                        printf("child process:[%d] was exited with code:[%d]\n",pid,code);
                }
        }
}

int main(int argc,char *argv[])
{
        int i,pid,code;
        char buf[16];
        struct sigaction sa;

        if(argc>1)
        {
                code = atoi(argv[1]);
                srand(code+time(0));
                sleep(rand()%10);
                return code;
        }

        memset(&sa,0,sizeof(sa));
        sa.sa_flags = SA_NOCLDSTOP;
        sa.sa_handler = handler;
        sigaction(SIGCHLD,&sa,0);

        for(i=0;i<10;i++)
        {
                if((pid=fork())<0)
                {
                        perror("fork");
                        return -1;
                }
                if(pid)
                        continue;
                sprintf(buf,"%d",i);
                if(execl("./a.out","./a.out",buf,0)<0)
                {
                        perror("execl");
                        return -2;
                }
        }
        for(;;)
                sleep(1);
        return 0; /* never reaches */
}
--- snip ---
かなり適当ですが。

No. 2989 # koko 2002/12/19 (木) 08:42:04
>>2988 hsj
他のHPを調査をしている中で「waitpidで子プロセスの終了コードが取得できれば解決できそうだ。」というのは私も感じました。
試してみたいと思います。

>>2987 68user
今回は、既存の子プロセス側のソースコードにできるだけ手を入れないという条件があるのですが、良い案がない場合にはやはりパイプを使用する事に
なるかと思います。

ご回答頂き、ありがとうございました。

No. 2990 # 68user 2002/12/20 (金) 02:06:37
>>2986 koko
> ・親プロセスはwaitしません。
ってのは親プロセスにも手を入れたくないという意味かと思った
のですが、wait でブロックさせたくないという意図だったのですね。
読み違えておりました。

No. 2991 # Japper 2002/12/20 (金) 02:55:20
こんにちは
質問があってきました

Perlを使っていると
system関数やexec関数を使うようになりました
便利でとてもよいのですが
Root権限でコマンドが実行されているような気がします
くわしくはまだ確認していません。
また、CGIでファイルマネージャーを使っていますが
これも同じようにパスワードファイルなどを開かれるという欠点があります
全ディレクトリやファイルのパーミッションを000にすることはもちろんできませんし
一部だけのパーミッション設定もだめです
例)/homeを000にするが/home/userが777だとアクセスされてしまう

これらのことからセキュリティーホールとなっていてとても不安です
これらについての対処法はなにかないでしょうか?

No. 2992 # 68user 2002/12/20 (金) 03:08:40
>>2991 Japper
> Root権限でコマンドが実行されているような気がします
perl スクリプト中で
      print "$<\n";
      print "$>\n";
の結果のいずれかが 0 なら root 権限を得ています (が、おそらくは
勘違いではないかと思います)。

> これも同じようにパスワードファイルなどを開かれるという欠点があります
書きかけですが、
      http://x68000.startshop.co.jp/~68user/webcgi/cryptogram.html
が参考になるかもしれません。

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