|
>>2959 KENT1 お使いの OS とシェルを必ず書いてください…と言うのも疲れたので、 てきとーに試してみてください。 /usr/bin/time ls >& file /usr/bin/time ls >file 2>&1 env TERM= csh -c "time ls" > file env TERM= bash -c "time ls" > file |
|
初めまして。初心者なので質問自体が意味不明かもしれませんが、 システムコールでCPU使用量や、ディスク使用量などを取得する方法を教えてください。dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が違ってくるので、、、ちなみに使用言語はC、OSはLinuxでお願いします。 |
|
>>2961 1202 > ディスク使用量 statfs(2), fstatfs(2) > CPU使用量 プロセス単位の情報かシステムの情報を取るのかわかりませんが、 Linux ならどちらにせよ /proc 直読みなのかな? あるいは /proc を 読むような API が用意されているかもしれませんが、わかりません。 後は man -k stat、man -k cpu、man -k disk などを活用してください。 |
|
>>2962 68user ありがとうございます。 早速試してみます。 |
|
kikiと申します. 68user様,先日はお世話になりました. お聞きしたいことがあります. 私は今,シェルでpsコマンドを打ち込んだら 標準出力で"psコマンドがうちこまれました." と出力させるプログラムを作ろうとしています. この時に,シェルからpsコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させたいのですが,このような事は,プロセス間通信や デーモンを使うのでしょうか? 皆様のアドバイスをよろしくお願い致します. また,簡単なデーモンのソースがあるページや, デーモンを作るにあたってやくだつページを ご存知でしたら教えてください. よろしくお願いします. |
|
>>2964 kiki 前にも書きましたが目的は何ですか? kiki さんの質問は いつも情報量が足りないと思います。 目的を書かないから前提条件がわからない。前提条件が わからないから、例えば 「利用者にばれてもいいのか」 「シェルのソースをいじるというのはアリなのか」 などもわからない (当然その答えによって解は異なります)。 > また,簡単なデーモンのソースがあるページ http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16 など。 >>2961 1202 > dfコマンドなどで取得すると、Linux、Solarisで取得できる情報が > 違ってくるので、、、 ちなみに僕ならば面倒なので GNU df を Solaris に 入れます (仕事であれば特に)。 |
|
2965>>68user様 毎回すみません. 目的は前回の質問でふれたsuトロイの痕跡の検出なんです. suトロイも本物のsuも.bash_historyのなかにコマンドが残りますが, /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, suトロイをリアルタイムに近い形で検出できないか?と考えたのです. そこで,シェルからsuコマンドが打ち込まれたかどうかを 判定するプログラムに,シェルで打ち込まれたコマンドを渡して 判定させ,suとコマンドが 実行されているようならば, /var/log/messageをみて,suの痕跡があるかどうかを調べれば 検出できるだろうと考えたのです. とりあえずsuコマンドが打ち込まれたかどうかを判定する 部分をまず作ろうと思いましたが,この時にプロセス間で データのやりとりが必要になったり,デーモンも使うのかな と思い,質問させていただきました. 「利用者にばれてもいいのか」 >はい,ばらせる事ができるならば是非そうしたいです. 「シェルのソースをいじるというのはアリなのか」 >はい,ありです. 毎回わかりづらい書き込みをして申し訳ありません. ご教授をお願い致します. |
|
>>2966 kiki 今度は検出なわけですね? > /var/log/messageでは,本物のsuの痕跡しか残らない事を利用して, syslog(3) や logger(1) を使えば誰でも su と同様にログに記録する ことはできますので、これだけでは正確に判断できません。 では他に判断する方法はあるかというと、決定的なものはないです。 結局は「何をもって本物と判断するか」「何を持って悪意のあるプロ グラムと判断するか」に帰着するわけで。興味があればアンチウィルス ソフトがウィルスを検出する手段を調べてみるとよいでしょう。 で、それとは別に「どうやって su がタイプされたことを検出するか」という 話ですが、ウィルスやトロイの木馬にやられるときというのは、つまるところ 「プログラムを実行したとき」なわけで、exec(2) の実行直前に su を実行 しようとしているかどうか、というチェックをすればよいでしょう。 プロセス間通信やデーモンは「なぜそれを使う必要があるか」を説明でき ないなら、使う必要はないということです。 別の解としては、システムコールの発行を hook して安全性をチェック、 というのもありますが、UNIX でこういうのってできるのかなーと思って 調べてみたら、なんかできるようですね。 http://www.caj.co.jp/support/etrustac_faq.htm Q6: eTrust Access ControlのSoft Hook技術とは何ですか? カーネルを置き換えているのか、あるいは libc のシステムコール発行部分を 置き換えているのか…(できるのかな?) # Windows なら SetWindowsHookEx で簡単なんですけど。 |
|
>>2967 68user様 お返事ありがとうございます. >syslog(3)やlogger(1) を使えば誰でも su と同様にログに記録することはできます これはsuトロイを実行した時にも/var/log/messageに本物のsuの認証失敗のメッセージ を残せる,という事なんですよね.これは,suトロイ内でsyslog()関数などを使って, syslogdにメッセージを渡すという事なのでしょうか? P.S. システムコールで見分ける,ですね. 確かに,suトロイと本物のsuだとやっている事はちがうから 見分けられるかも知れませんね.アドバイスありがとうございます. |
|
>>2967 68user様 何回も申し訳ありません.kikiです. >exec(2)の実行直前にsuを実行しようとしているかどうか、というチェックをすればよいでしょう。 これは,システムコールのチェックを自動化させて行なえばよい, という事なのでしょうか? 基本的な事で申し訳ありません. |
|
いつもすいません、質問です。 以下のようなプログラムを Perl 5.8/FreeBSD 2.2.8 release で書きたいです。 カンタンにいうと、入れ子になったタグで囲まれた部分だけを 別ファイルに抜き出し、元ファイルからは削除する、です。 順序を保存して抜く方法と、 保存しないで抜く方法とあると思いますが、 どちらでもかまいません。 (前者の方がいいかなぁ、、) 入力ファイル: out1 <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> out2 <tag d> in6 <tag e> in7 </tag> in8 </tag> out3 <tag f> in9 </tag> out4 出力ファイル例1:(順序を保存して抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag a> in1 <tag b> in2 <tag c> in3 </tag> in4 </tag> in5 </tag> <tag d> in6 <tag e> in7 </tag> in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 出力ファイル例2:(順序を保存しないで抜く) ファイルA:(タグで囲まれた部分のみを抜いたもの) <tag c> in3 </tag> <tag b> in2 in4 </tag> <tag a> in1 in5 </tag> <tag e> in7 </tag> <tag d> in6 in8 </tag> <tag f> in9 </tag> ファイルB:(ファイルAで抜いた残り) out1 out2 out3 out4 よろしくお願いします。 |
|
補足です。 この tag というのは全部同じタグです。 ただオープンタグにかかれている a, b, ... という アトリビュートが全部違います。 |
|
さらに補足。(俺って説明下手だな、、;;; ファイルには <tag> 以外のタグも存在します。 <aaa ???>〜</aaa>、<bbb ???>〜</bbb> などです。 その中で下の処理の対象になるのが <tag> だけということです。 <tag ???>〜</tag> の中に <xxx ???>〜</xxx> がある場合は、 それも抜いて書き出します。 問題の定義もなかなか奥が深い。 |
|
>>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>|| とする。 とします。 |
|
>>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 を買って勉強かな…。 |
|
>>2973 68user さん、ありがとうございます。 まさに xml で、そのパッケージすごく便利そうなんですが 使い方がよくわかりません ;;; でもべっかいの方でなんとなくできたのでもう少しまとめてから公開します。 |
|
>>2975 ふくし 別解でがんばるよりは、早めに XML::DOM の使い方を覚えた方が 幸せ度が高いかと。 # 僕は使ったことないですけど。 |
|
通りすがりのものですが・・・ システムコールをhookして安全性を云々というのは、 たとえば Systrace - Interactive Policy Generation for System Calls http://www.citi.umich.edu/u/provos/systrace/ こういったもののことでしょうか? (OpenBSD, NetBSD にはマージされています) |
|
X68000の、内臓フォントを利用するインターフェースを調べています。 フリーで有用な文書がありましたら教えていただけないでしょうか? >識者 なお当方X68000に関する知識は皆無でございます。 |
|
>>2960 68user様 報告が遅れまして申し訳ありません。 /usr/bin/time 実行コマンド >& 出力ファイル を実行した結果うまくいきました。ありがとうございました。 |