<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>leeyg7777のブログ</title>
<link>https://ameblo.jp/leeyg7777/</link>
<atom:link href="https://rssblog.ameba.jp/leeyg7777/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>ブログの説明を入力します。</description>
<language>ja</language>
<item>
<title>ウェブサイト脆弱性により対応法</title>
<description>
<![CDATA[ ウェブアプリケーションにおける脆弱性対策について、その性質を基に「根本的解決」<br>と「保険的対策」の 2 つに分類しています。<br><br> 根本的解決<br>本書における「根本的解決」は、「脆弱性を作り込まない実装」を実現する手法です。根本的解決を<br>実施することにより、その脆弱性を狙った攻撃が無効化されることを期待できます。<br>■ 保険的対策<br>本書における「保険的対策」は、「攻撃による影響を軽減する対策」です。根本的解決とは違って、<br>脆弱性の原因そのものを無くすものではありませんが、攻撃から被害までの次の各フェーズにおいて、<br>それぞれの影響を軽減できます。<br> 攻撃される可能性を低減する<br>（例：攻撃につながるヒントを与えない）<br> 攻撃された場合に、脆弱性を突かれる可能性を低減する<br>（例：入力から攻撃に使われるデータをサニタイズ（無効化）する）<br> 脆弱性を突かれた場合に、被害範囲を最小化する<br>（例：アクセス制御）<br> 被害が生じた場合に、早期に知る<br>（例：事後通知）<br><br>保険的対策は、対策の内容によっては、本来の機能を制限することになるものもあるので、そのような副作用の影響も考慮する必要があります。<br><br>1. ウェブアプリケーションのセキュリティ実装<br> １） SQL インジェクション<br>    ・SQL 文の組み立て方法に問題がある場合、攻撃によってデータベースの不正利用をまねく可能性があります。このような問題を「SQL インジェクションの脆弱性」と呼びます。<br>    ・対応方法<br>    　→ SQL 文の組み立ては全てプレースホルダで実装する。<br>    　→ SQL 文の組み立てを文字列連結により行う場合は、エスケープ処理等を行うデータベースエンジンの API を用いて、SQL 文のリテラルを正しく構成する。 <br><br> ２） OS コマンド・インジェクション<br>    ・ウェブアプリケーションによっては、外部からの攻撃により、ウェブサーバの OS コマンドを不正に実行<br>    ・対応方法<br>    　→ ウェブアプリケーションに利用されている言語によっては、シェルを起動できる機能を持つものがあります。たとえば、Perl の open 関数等です。Perl の open 関数は、引数として与えるファイルパスに「|」（パイプ）を使うことで OS コマンドを実行できるため、外部からの入力値を引数として利用する実装は危険です。シェルを起動できる言語機能の利用は避けて、他の関数等で代替してください。Perl でファイルを開く場合、sysopen 関数を利用すればシェルを起動することはありません。<br>    　→ シェルを起動できる言語機能の引数を構成する変数に対し、引数に埋め込む前にチェックをかけ、本来想定する動作のみを実行するように実装<br><br> ３） パス名パラメータの未チェック／ディレクトリ・トラバーサル<br>    ・外部からのパラメータにウェブサーバ内のファイル名を直接指定しているものがあります。このようなウェブアプリケーションでは、ファイル名指定の実装に問題がある場合、攻撃者に任意のファイルを指定され、ウェブアプリケーションが意図しない処理を行ってしまう可能性があります。<br>    ・対応方法<br>    　→ ウェブサーバ内に保管しているファイルへのアクセス権限が正しく管理<br>    　→ 入力パラメータの値から、「/」、「../」、「..\」等、OS のパス名解釈でディレクトリを指定できる文字列を検出した場合は、処理を中止します。<br><br> ４） セッション管理の不備<br>    ・セッション ID の発行や管理に不備がある場合、悪意のある人にログイン中の利用者のセッション ID を不正に取得され、その利用者になりすましてアクセスされてしまう可能性があります。この問題を悪用した攻撃手法を、「セッション・ハイジャック」と呼びます。<br>    ・対応方法<br>    　→ セッション ID を推測が困難なものにする。<br>    　→ セッション ID を URL パラメータに格納しない。<br>    　→ HTTPS 通信で利用する Cookie には secure 属性を加える。<br>    　→ ログイン成功後に、新しくセッションを開始する。<br>    　→ ログイン成功後に、既存のセッション ID とは別に秘密情報を発行し、ページの遷移<br>ごとにその値を確認する。<br>    　→ セッション ID を固定値にしない。<br>    　→ セッション ID を Cookie にセットする場合、有効期限の設定に注意する。<br><br> ５） クロスサイト・スクリプティング<br>    ・ウェブページへの出力処理に問題がある場合、そのウェブページにスクリプト等を埋め込まれてしまいます。この問題を「クロスサイト・スクリプティングの脆弱性」と呼びます。<br>    ・対応方法<br>    　→ ウェブページに出力する全ての要素に対して、エスケープ処理を施す。<br>    　→ URL を出力するときは、「http://」や 「https://」で始まる URL のみを許可する。<br>    　→ script要素の内容を動的に生成しない。<br>    　→ スタイルシートを任意のサイトから取り込めるようにしない。<br>    　→ 入力値の内容チェックを行う。<br>    　→ 入力された HTML テキストから、スクリプトに該当する文字列を排除する。<br>    　→ HTTP レスポンスヘッダの Content-Type フィールドに文字コード（charset）を指定する。<br> ６） CSRF（クロスサイト・リクエスト・フォージェリ）<br>    ・ウェブサイトの中には、サービスの提供に際しログイン機能を設けているものがあります。ここで、ログインした利用者からのリクエストについて、その利用者が意図したリクエストであるかどうかを識別する仕組みを持たないウェブサイトは、外部サイトを経由した悪意のあるリクエストを受け入れてしまう場合があります。このようなウェブサイトにログインした利用者は、悪意のある人が用意した罠により、利用者が予期しない処理を実行させられてしまう可能性があります。このような問題を「CSRF（Cross-Site RequestForgeries／クロスサイト・リクエスト・フォージェリ）の脆弱性」と呼び、これを悪用した攻撃を、「CSRF 攻撃」と呼びます。<br>    ・対応方法<br>    　→ 処理を実行するページを POST メソッドでアクセスするようにし、その「hidden パラメータ」に秘密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を実行する。<br>    　→ 処理を実行する直前のページで再度パスワードの入力を求め、実行ページでは、再度入力されたパスワードが正しい場合のみ処理を実行する。<br>    　→ Referer が正しいリンク元かを確認し、正しい場合のみ処理を実行する。<br>    　→ 重要な操作を行った際に、その旨を登録済みのメールアドレスに自動送信する。<br><br> ７） HTTP ヘッダ・インジェクション<br>    ・対応方法<br>    　→ 改行コードを適切に処理するヘッダ出力用 API を利用できない場合は、改行を許可しないよう、開発者自身で適切な処理を実装する。<br>    　→ 外部からの入力の全てについて、改行コードを削除する。<br><br> ８） メールヘッダ・インジェクション<br>    ・外部の利用者がこのメールアドレスを自由に指定できてしまう場合があります。このような問題を引き起こす脆弱性を「メールヘッダ・インジェクション」と呼びます。<br>    ・対応方法<br>    　→ メールヘッダを固定値にして、外部からの入力はすべてメール本文に出力する<br>    　→ メールヘッダを固定値にできない場合、ウェブアプリケーションの実行環境や言語に用意されているメール送信用 API を使用する。<br>    　→ HTML で宛先を指定しない。<br>    　→ 外部からの入力の全てについて、改行コードを削除する。<br><br> ９） クリックジャッキング<br>    ・ウェブサイトの中には、ログイン機能を設け、ログインしている利用者のみが使用可能な機能を提供しているものがあります。該当する機能がマウス操作のみで使用可能な場合、細工された外部サイトを閲覧し操作することにより、利用者が誤操作し、意図しない機能を実行させられる可能性があります。このような問題を「クリックジャッキングの脆弱性」と呼びます。<br>    ・対応方法<br>    　→ HTTP レスポンスヘッダに、X-Frame-Options ヘッダフィールドを出力し、他ドメインのサイトからの frame 要素や iframe 要素による読み込みを制限する。<br>    　→ 処理を実行する直前のページで再度パスワードの入力を求め、実行ページでは、再度入力されたパスワードが正しい場合のみ処理を実行する。<br>    　→ 重要な処理は、一連の操作をマウスのみで実行できないようにする。<br><br> １０）バッファオーバーフロー<br>    ・ウェブアプリケーションを含む、あらゆるプログラムは、指示された処理を行うためにメモリ上に自身が使用する領域を確保します。プログラムが入力されたデータを適切に扱わない場合、プログラムが確保したメモリの領域を超えて領域外のメモリを上書きされ、意図しないコードを実行してしまう可能性があります。このような問題を「バッファオーバーフローの脆弱性」と呼びます。<br>    ・対応方法<br>    　→ 直接メモリにアクセスできない言語で記述する。<br>    　→ 直接メモリにアクセスできる言語で記述する部分を最小限にする。<br>    　→ 脆弱性が修正されたバージョンのライブラリを使用する。
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205959.html</link>
<pubDate>Tue, 07 Apr 2015 01:21:34 +0900</pubDate>
</item>
<item>
<title>Teng</title>
<description>
<![CDATA[ Tengとは何か<br>Tengは非常にシンプルなO/R(Object-Relational)マッパです。<br>DBIx::ClassなどのほかのO/Rマッパと比較して、シンプルで覚えやすく、トラブル時にコードが追いやすいという特徴を持ちます。<br> <br>Tengのインストール<br>　cpanm Teng<br> <br>データベース接続<br>　my $teng = Teng::Schema::Loader-&gt;load(<br>       dbh =&gt; $dbh,<br>       namespace =&gt; 'MyApp::DB',<br>   );<br>​<br>単一行の取得<br>単一の行を取得したい場合はsingleメッソドを利用します。<br>　<br>　my $row = $teng-&gt;single( 'member' =&gt;{<br>​#WHERE<br>'name' =&gt; 'TEST',<br>'age'   =&gt; '24',​​<br>   }, {<br>​#ORDER BY, LIMIT<br>'order_by' =&gt; { 'no' =&gt; 'desc' },<br>​'limit'        =&gt; 1,<br>   ​})​;<br>​print $row-&gt;name;<br>​<br>​singleメッソドでは暗黙的にLIMITが１であるもととしてSQLが生成されますが、可読性のために基本的にはLIMITを明示したほうが良いです。<br> <br>複数行の取得<br>複数の行を取得したい場合はsearchメソッドを利用します。<br>　<br>　my $row = $teng-&gt;search( 'member' =&gt;{<br>​#WHERE<br>​'age' =&gt; '24',​​<br>　}, {<br>​#ORDER BY, LIMIT<br>'order_by' =&gt; { 'no' =&gt; 'desc' },<br>　​})​;<br>my @result = $row-&gt;all;<br>​<br>​データの更新<br>データを更新する場合はInsert, Update, Deleteメッソドを利用します。<br>Insert<br>​　my $row = $teng-&gt;insert( 'member' =&gt; {<br>'name' =&gt; 'Teng_DB',<br>​'age'   =&gt; '24',​​<br>​'addr'  =&gt; 'Perl',​​​<br>　})​;<br>​<br>Update<br>    my $row = $teng-&gt;update('member' =&gt; {<br>           '​name' =&gt; 'Teng_Update',<br>    }, {<br>            'name' =&gt; 'Teng_DB',<br>    });<br>​# Executes UPDATE member SET name = 'Teng_Update' WHERE name = 'Teng_DB'<br>​<br>Delete<br>my $row = $teng-&gt;delete('member' =&gt; {<br>           '​name' =&gt; 'Teng_Update',<br>});<br>​<br>​# Executes DELETE FROM member WHERE name = 'Teng_Update'
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205886.html</link>
<pubDate>Tue, 07 Apr 2015 01:21:08 +0900</pubDate>
</item>
<item>
<title>iptables設定ベストプラクティス</title>
<description>
<![CDATA[ 1. iptablesコピー<br><code>iptables-save &gt; [filename]</code><br><br>2. 設定編集<br><code>vim [filename]</code><br><br>3. iptablesに設定追加<br><code>iptables-restore &lt; [filename]</code><br><br>4. 設定保存<br><code>service iptables save</code><br><br>5. iptablesリスタート<br><code>service iptables restart</code>
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205748.html</link>
<pubDate>Tue, 07 Apr 2015 01:20:36 +0900</pubDate>
</item>
<item>
<title>TCPSERVER</title>
<description>
<![CDATA[ 使い方法<br>tcpserver 【options】【host】【port】【program】<br><br>host<br>・サーバを起動するIPアドレス/ホストを特定しないのであれば 0 を記述します。<br><br>port<br>・ポート番号あるいはサービス名を記述します。<br><br>program<br>・サーバ・プログラム名を記述します。<br><br>options<br>-q              エラーメッセージを出力する<br>-Q              エラーメッセージを出力しない（デフォルト）<br>-v              すべてのメッセージを出力する<br>-p              パラノイドを行う。リモートホスト名を調べた後、そのホスト名でIPアドレスを調べ、TCPREMOTEIP に一致するか調べる。一致しない場合は TCPREMOTEHOST をセットしない。<br>-P              パラノイドを行わない。（デフォルト）<br>-h              リモートホスト名を調べ、TCPREMOTEHOST をセットする。（デフォルト）<br>-H              リモートホスト名を調べない。<br>-r              IDENTを行い、TCPREMOTEINFO をセットする。（デフォルト）<br>-R              IDENTを行わない。<br>-c limit        最大同時接続数の設定。デフォルトは40<br>-x rules.cdb    接続制御を行うときの接続制御データベースのファイル名<br>-B banner       接続時にバナーをネットワークへ出力する。<br>-u uid          ユーザIDを uid に切り替える<br>-g gid          グループIDを gid に切り替える<br>-l localname    ローカルホスト名を調べるのをやめて、localname を TCPLOCALHOST にセットする<br>-t timeout      IDENT をタイムアウトする時間(秒)。デフォルトは 26
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205678.html</link>
<pubDate>Tue, 07 Apr 2015 01:20:22 +0900</pubDate>
</item>
<item>
<title>仮想IP設定</title>
<description>
<![CDATA[ <strong>仮想IPとは</strong><br>1つのアドレスを複数のサーバなどで共有する手法で、一部の機器に障害が生じてアクセス不能になった場合でも、<br>同じアドレスを引き継いでサービスを続行することができる。また、ロードバランサなどと共に使用することで、<br>外部からのアクセスを複数のサーバに均等に割り振って負荷分散を計ることができる。<br><br>設定方法<br>・仮想IP設定は「ifconfig」でできますが、ifconfigは廃止なんだそうで、ip addrを使って設定します。<br><br>１．IP確認<br><code>ip addr show</code><br><br>２．仮想IP設定<br><code>ip addr add IPアドレス/24 dev eth0</code><br><br>３．仮想IP削除<br><code>ip addr del IPアドレス/24 dev eth0</code>
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205604.html</link>
<pubDate>Tue, 07 Apr 2015 01:19:56 +0900</pubDate>
</item>
<item>
<title>【LEFT】【RIGHT】【INNER】　JOIN</title>
<description>
<![CDATA[ A) LEFT JOIN<br>JOIN の左側のテーブルのデータは基本的に全て表示します（ WHERE 句で除かない限り）。<br>そしてそこに、対応する右側のテーブルのデータを追加します。右側のテーブルに対応するデータが存在しない場合には NULL が代わりに使われます。<br><br>B) RIGHT JOIN<br>JOIN の右側のテーブルのデータは基本的に全て表示されます。そしてそこに、対応する左側のテーブルのデータを追加します。左側のテーブルに対応するデータが存在しない場合には NULL が代わりに使われます。<br><br>C) INNER JOIN<br>左右両方のテーブルで対応するデータが存在するものしか表示しません。<br>
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205501.html</link>
<pubDate>Tue, 07 Apr 2015 01:19:21 +0900</pubDate>
</item>
<item>
<title>zsh</title>
<description>
<![CDATA[ zshの特徴<br> １．強力な補完機能<br>   多いシェルがTabを押すとディレクトリやファイル名などが表示されますが、zshはそれより多い情報を見せます。<br>   <br> ２．拡張されたファイル名のブロック<br>   シェルでファイル名を設定するとき、ファイル名全体を知らなくてもファイル名に一致するパタンを使ってい指定できます。こんな機能を「ファイル名ブロック」と呼びます。<br> 3. アリアス<br>   アリアスはコメントのニックネームを設定する機能です。zsh以外に別のシェルはこの機能を持っています。普通のアリアスの場合はコメントライン前の部分だけを変更できますが、zshは前の部分以外の単語も変更できます。<br><br>zsh設置方法<br><br> １．yumを通じてzsh設置<br>  - sudo yum install zsh<br> <br> ２．zsh実行<br>  - zsh pathを/etc/shellsに追加<br>  <br>  zsh path確認<br>   which zsh<br>  /etc/shells 内容確認<br>   cat /etc/shells<br>  /etc/shells에 zsh path 追加<br>   sudo sh -c "echo '/usr/local/bin/zsh' &gt;&gt; /etc/shells"<br>  chsh -s '/usr/local/bin/zsh'<br><br>設定ファイルの種類と役割<br> zshは実行ときにホームディレクトリ下に置いた初期ファイルを読みます。初期化ファイルはいろいろな種類があり、zshをどのように動作したかにより読み込むファイルが変わります。<br> zshの初期化ファイル<br>  $HOME/.zshenv<br>  $HOME/.zprofile<br>  $HOME/.zshrc<br>  $HOME/.zlogin<br> zshのカスタマイズを行うためには上記の４つのファイルを編集しなければならないです。<br> ４種類のファイルですが、普通にはzshenvと.zshrcだけを使っても十分です。<br> <br> .zshenvの役割<br>  .zshenvはzshを実行するときに必ず読み込むファイル<br>  実行時だけでなくzshのシェルスクリプトを実行するときやコメントラインから直接zshを実行するときも含む<br> .zshrcの役割<br>  このファイルはアリアスやKeyバインド設定やzshのオプションなどの使うための設定を書きます。zshの設定は基本的には.zshrcに書くことに考えると良い<br>   <br> 設定を適応する<br>  設定ファイルに書く内容はすぐに適応されます。変更したことを確認したい場合は再起動してもいいですがsourceコメントを使うとすぐに適応できます。<br>  source ~/.zshrc<br>  ただしこれは設定ファイルに書く内容をもう一回実行するためのコメントです。そのために新しく追加や変更した設定はそのまま適応されますが、削除した設定は残ります。削除したことも含めるためには次のコメントを実行します。<br>  exec zsh<br>  これはzshを再起動するコメントです。このコメントにより設定ファイルに書く内容を適応した新しいzshが実行します。<br><br> オプションの設定方法<br>  オプションはzshの動作や機能を変わるための設定で「有効」「無効」を設定できます。 <br>  特定オプションを有効で設定するためにはsetoptコメントを使います。<br>　たとえば、SHARE_HISTORYのオプションを有効にする場合は.zshrcに次を追加します。<br>  setopt SHARE_HISTORY<br>  オプションを無効にするためにはunsetoptを使ったりオプション名の前にNO_を追加します。<br>  unsetopt SHARE_HISTORY<br>  setopt NO_SHARE_HISTORY<br> オプションには大文字・小文字を区分しません。<br> <br>基本的なオプション<br> １． AUTO_CD<br>  AUTO_CDオプションはディレクトリ名を指定することでこのディレクトリに移動されるオプションです。<br>  /usr/share/zsh<br>  上のコメントで/usr/share/zshディレクトリで移動できるようになります。cdコメントを入力しなくても移動できるので便利なオプションです。<br> ２．AUTO_PUSHD<br>  AUTO_PUSHDオプションを使うとcdコメントに移動したディレクトリの履歴が自動的に保存されます。このディレクトリ移動履歴をディレクトリStackと呼びます。zshを含めて多いシェルにはpushdというコメントがありますが、このオプションを有効にするためにはcdコメントがpushdコメントと同じようになります。<br>  setopt AUTO_PUSHD  <br>履歴に残っているディレクトリで移動するためにはcd + 番号をつけると移動できます。<br><br> ３．^Dでzshを終了しない<br>    setopt IGNORE_EOF<br> ４．^Q/^Sのフローコントロールを無効にする<br>    setopt NO_FLOW_CONTROL<br> ５．beep音を出ないように<br>    setopt NO_BEEP<br><br>コメントラインの編集によって設定<br> EmacsのKeyバインドを使う<br>  zshではコメントラインを編集するときにKeyバインドをEmacs風とvi風の2種類を選択する。<br>  EmacsのKeyバインドを指定する場合は次の設定を.zshrcに追加する<br>   bindkey -e<br> <br> Emacs風のKeyバインドはUNIX系OSでよく使われる操作方法です。<br>  Emacs風のKeyバインド操作<br>   - Ctrl+f これから一間移動<br>   - Ctrl+b 後に一間移動<br>   - Ctrl+a 最初に移動<br>   - Ctrl+e 最も後ろに移動<br>   - Ctrl+p 以前のコメント履歴<br>   - Ctrl+n 次のコメント履歴<br>   - Ctrl+w カーソル位置から1個の単語を削除<br><br>メニュー選択モード<br> Tabを押す時に表示されるリストをカーソルで移動して選択するモード<br> もし、１００番目のリストを選択するとしたらTabを１００番押さないといけない。こんな場合にメニュー選択モードを使ったら便利です。<br>  zstyle ':completion:*:default' menu select=2<br>この機能はカーソルで選択できますがEmacs風のカーソル移動もできます。<br><br>大文字・小文字を区別しない機能<br>ファイル名に大文字が含めている場合に、普通にはShfitを押して設定しなければならないです。 <br>このShiftを押さなくてもできる設定があります。<br>  zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'<br>これは補完の入力でa-zをA-Zにマッチングするための機能です。<br><br>アリアス<br>アリアスはコメントにニックネームを与える機能です。<br> たとえばls -aがlaというニックネームに変わります。<br> alias la='ls -a'<br>
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011205373.html</link>
<pubDate>Tue, 07 Apr 2015 00:36:13 +0900</pubDate>
</item>
<item>
<title>strace</title>
<description>
<![CDATA[ Straceとは?<br> - straceというのはmanによるシステムコールとシグナルを追跡するためのツール<br><br>システムコールとは？<br> - ユーザーが操作するOS命令語 <br><br>簡単な操作方法<br> strace $cmd<br>$cmdの部分には実行できるコメントを入れる<br><br>ex)<br> 1. Linux上で【hoge】というファイルを作成して【This is hoge】という内容を作成する<br> 2. ファイルを作成した後、【strace cat hoge】というコメントを入力すればstrace経由で動くコメントについてstraceはattachしておく、このコメントが発行したシステムコールを見ることができます<br><br><a href="http://stat.ameba.jp/user_images/20150407/00/leeyg7777/bf/53/p/o0550061213268809701.png"><img src="https://stat.ameba.jp/user_images/20150407/00/leeyg7777/bf/53/p/t02200245_0550061213268809701.png" alt="" width="220" height="245" border="0"></a><br><br>既存プロセスのattach<br>特にWebアプリケーションのデバッグ目的の場合に、もう上がっているプロセスのtraceを行っている場合の方が多いと思います。この場合は次のようなコメントラインオプションを指定します。<br><br>strace -p $pid<br><br>straceオプション<br>  -tt  : タイムスタンプ表示<br>ttオプションを指定することで、各システムコールでどのぐらいの時間がかかるのかマイクロ秒単位で表示できます。<br>  strace -p $pid -tt<br><br>  -s  : 表示する文言の最大の長さを指定<br> sオプションで数値を決めることよりread(2)やwrite(2)に使っているBufferの中心を省略しないで見ることができます。<br>  strace -p $pid -tt -s $strsize<br><br> -c 各システムコールについての時間とコールの数、エラーをカウントしてプログラムを終了するときに報告します。<br>  strace -c ls<br><br>Straceを利用する理由<br>  1. 見たい時にすぐに見ることができます。<br>  2. LinuxプロセスだといつでもStraceが可能為。<br>  3. ソースの周りにないバイナリでも使うことができます。<br><br>Webアプリケーションで注目するすべてのシステムコール<br> 実際のアプリケーションをstraceしてデバッグを行う場合には、一番気を使うのはこの中にある自分たちのサービスのためにかかった処理部分です。<br>RequestとResponseの間に行う処理は下記の３つです。<br>１．ネットワークのソケットを開ける、読む、書く<br>２．ファイルを開ける、読む、書く<br>３．Requestの内容または上の２つによるデータを計算する<br><br>Prelで使われているWebアプリケーションではデータ永続化するためにMySQLやPostgreSQLまたはNoSQLと似ているデータベースを使うし、それを永続化データのCashとしてmemcachedやRedisなどを利用することが多いです。まだミドルウェアのアクセスはネットワークを経由するのでstraceから見ると「１」として観測されます。<br>また、Requestの途中にログを書いたりファイルCashにアクセスしたり特定設定のファイルを読んだりなどの操作は「２」で観測されます。<br>「１」と「２」の操作で利用されるシステムコールとそれによってstraceの内容の読む方法を解説します。「３」については「１」と比べて問題が発生することが難し、また問題があった場合もstraceにより調査しなくてほかのアプローチを得るのがいい部分です。<br><br>ソケットに関するシステムコール<br>  TCPソケットを使ってネットワークにアクセスを行っているWebアプリケーションをstraceした場合シークエンスを確認できます。<br>１．socket(2)でソケット作成<br>２．connect(2)でTCPコネクションを確立<br>３．write(2)/read(2)を反復<br>４．close(2)でTCPコネクションをclose
]]>
</description>
<link>https://ameblo.jp/leeyg7777/entry-12011194542.html</link>
<pubDate>Mon, 06 Apr 2015 23:56:16 +0900</pubDate>
</item>
</channel>
</rss>
