らっちゃいブログ

日々の学びと気づきを発信するブログ

NginxにDoS攻撃が可能となる脆弱性!

朝起きたら脆弱性情報がメーリングリストにてアナウンスされていました。JSTだと本日(2016/6/1)の公開となります。

[nginx-announce] nginx security advisory (CVE-2016-4450)

A problem was identified in nginx code responsible for saving client request body to a temporary file. A specially crafted request might result in worker process crash due to a NULL pointer dereference while writing client request body to a temporary file (CVE-2016-4450).

これによると、リクエストボディを一時ファイルへ保存する際の処理に問題があり、ワーカープロセスがクラッシュしてしまうケースがあるそうです。具体的な攻撃方法については記載されていません。

この脆弱性の影響を受けるバージョンは、1.3.9 - 1.11.0 で、修正版として 1.11.1 と 1.10.1 がすでにリリース済みです。

一応変更内容も記載しておきます。

http://nginx.org/en/CHANGES

Changes with nginx 1.11.1                                        31 May 2016

*) Security: a segmentation fault might occur in a worker process while
   writing a specially crafted request body to a temporary file
   (CVE-2016-4450); the bug had appeared in 1.3.9.

1.11.1/1.10.1 にアップデートできない方は、バージョン毎にパッチが提供されていますので、自身で適用しましょう。

Patch for nginx 1.9.13 - 1.11.0 can be found here:

http://nginx.org/download/patch.2016.write.txt

Patch for older nginx versions (1.3.9 - 1.9.12):

http://nginx.org/download/patch.2016.write2.txt

普通口座で驚愕の金利0.12%!噂のイオン銀行で口座を作ってきた

昨今話題のマイナス金利のおかげで、メガバンクでも金利0.001%の時代ですね。定期預金で1000万以上預けたところで0.010%。困ったものです。

そんな中、イオン銀行は驚愕の 0.12% の金利を誇ります。しかも普通預金で。

10万円預けたら120円

100万円預けた1,200円

1000万円預けたら 12,000円

1億円預けたらなんと 120,000円にもなります。

すごいぞイオン銀行

ただ、無条件でとはいきません。イオンカードセレクトに申し込む必要があります。まあクレジットカードを一つ増やすくらい、大した話ではないですよね。それだけで金利0.12%の口座を作れてしまうのなら安いものです。

ちなみに私はメインのクレジットカードを別で用意していますので、発行はしますが一切使うつもりはありません。なので、イオンカードセレクトを使う場合の特典やメリット等は何も調べてません。気になる方はこのあたりを見るといいんじゃないかと思います。(適当ですみません)

前置きが長くなりましたが、最寄りのイオンで口座開設手続きをしてきました。

持ち物は免許証など、身分を証明できるものがあればOK。印鑑は不要です。私は手ぶらでいきました。

手続きはタブレット機を使って必要事項を入力するだけでした。最近はペンと紙を使う機会がどんどん減っていきますね。

必要事項を入力したら、あとは軽く説明を受けて手続き終了です。大体15分程度で終わったと思います。一瞬でした。

当日はカードや口座情報は何ももらえず、後日郵送で届くそうです。待ち遠しいですね。

そういえば、手続き終了後に粗品をいただけました。何個入りだったかは忘れましたが、トイレットペーパーを2つほど。実用的なものをいただけるのは助かるんですが、徒歩だから重いし両手が使えなくなるんで別なのがよかったなあ。ひとまず当分トイレットペーパーは買わなくてよさそうです。

Macにipコマンドをインストールしたのでメモ

普段 Ubuntu マシンをメインに据えて Mac をサブマシンとして開発しているわけですが、Mac に ip コマンドがないのが不便だったのでインストールしてみました。

インストール

今回は homebrew でインストールしました。

brew tap brona/iproute2mac
brew install iproute2mac

確認してみる。

$ ip
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip -V
where  OBJECT := { link | addr | route | neigh }
       OPTIONS := { -4 | -6 }

iproute2mac
Homepage: https://github.com/brona/iproute2mac
This is CLI wrapper for basic network utilities on Mac OS X inspired with iproute2 on Linux systems.
Provided functionality is limited and command output is not fully compatible with iproute2.
For advanced usage use netstat, ifconfig, ndp, arp, route and networksetup directly.

インストールできてそうです。

ip コマンドで IP アドレスを確認してみます。

$ ip add
$ ip a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 ::1/128
        inet 127.0.0.1/8 lo0
        inet6 fe80::1/64 scopeid 0x1
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether xx:xx:xx:xx:xx:xx
        inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scopeid 0x4
        inet xx.xx.xx.xx/24 brd xx.xx.xx.255 en0

無事動いてますね。これで ubuntumac でコマンドが違う問題が解決されました。ばんざい。

日本橋でぜいたく丼っぽい中落ち丼を食べてきた

お店

今回のお店はこちら。先日できたばかりの東京日本橋タワーB1Fにある『ま石』さんです。

f:id:racchai:20160527120552j:plain:w400

店構えが高そうなので軽くひよりました。いや、メニュー見ると実際高いんですが。。

f:id:racchai:20160527120941j:plain:w400

一部の丼メニューだけはぎりぎり手が届きそうだということで、いざ入店!

お昼時にもかかわらず、待ちどころか結構空いてました。みなさん敬遠されてるんですかね。

注文

カウンターのど真ん中に通されて着席。メニューは見ません。実質中落ち丼と上海鮮丼の二択です。これ以外は高くてダメ。。

  • 中落ち丼 1,200円(税抜き)
  • 海鮮丼 1,600円(税抜き)

今回は中落ち丼を注文することに決めてたので、さっそく注文しました。お客さんがほとんどいないこともあり、注文したらすぐ作ってもらえました。

食す

はい、どーん。

f:id:racchai:20160526222557j:plain:w400

ぱっと見た感じ、ぜいたく丼っぽくないですか?鯛の切り身(ゴマダレ)もあります。

ぜいたく丼を知らない方はこちらをどうぞ。

racchai.hatenablog.com

つじ半と違うのは、ご飯の追加ができない点でしょうか。

『あとでお出汁をおかけしますので、切り身とご飯を少しずつ残しておいてください』

とのことでした。まあそういうもんですよね。それではいただきます。

まずはお醤油にわさびを溶かして、上から余すことなく流し込みます。そして中落ちの塊を崩して、一口。

ふわとろだ!

うまい。ご飯は酢飯なんですね。やっぱり海鮮には酢飯が合うなあ。そして大量にかけられた白ゴマがなんともいい風味です。

個人的にはネギはなくてよかったですね。嫌いではないですがちょっと多い。

鯛の切り身もいただいてみると、ゴマダレが濃厚でご飯に合います。なんならちょっと濃すぎるくらいの味付けでした。すごくおいしい。これくらいパンチがある方が好みなんですよね。

〆る

量はそれほどないので、無心で食べていたら一瞬で〆となりました。

『出汁をください』

f:id:racchai:20160526222632j:plain:w400

出汁が入りました。つじ半とは違い、透き通るような出汁でした。上品ですね。

一口食べてみると・・あれ?

おいしいんですけど。。酢飯と出汁がそんなに合ってないような気が。。

出汁をかけるなら普通のご飯の方が好きかもしれない。

まとめ

非常においしい丼でありましたが、〆だけが少し残念でした。酢飯でないご飯を追加しての〆ができれば、完璧でしたね。

お値段はそこそこ張りますが、『つじ半に行きたいけど混み過ぎ!』というときにはちょうどよい選択肢かもしれませんね。

それでは今回のレポートはこれで以上です。来週は何食べようかなー。

【Python】いつまでprintデバッグで消耗してるの?

Python を初めて間もない頃、自分も print デバッグしてました。効率の悪さを認識しつつも、IDEを導入してデバッグする方法を調べてセッティングして、という手順が面倒でずっと放置してました。

// 普段は vim で開発してます

そうこうしてたら print デバッグではどうにもならないバグにぶち当たり、仕方なくデバッグポイントを置く方法を調べたわけです。するとどうでしょう。

ソースコード中に以下の一文を入れるだけではないですか。

import pdb; pdb.set_trace()

たったこれだけで、上の一文を挿入した行で処理が停止し、コンソール上でステップ実行が出来るようになります。最高かよ。

個人的にですが、デバッガー起動中によく使うコマンドとしては以下です。

コマンド 説明
s(tep) ステップイン
n(ext) ステップオーバー
r(eturn) ステップアウト
l(ist) 現在行の前後のソースコードを表示
a(rgs) 現在いる関数の引数を表示
p プリント
c(ont(inue)) 次のブレイクポイントまで実行

それでは簡単に試してみましょう。

今回は実行時の引数を print するだけの簡単なスクリプトを用意しました。main 関数実行前にブレイクポイントを置いています。

$ cat > /tmp/debug.py <<EOF
#!/usr/bin/env python

import sys

def log(args):
    print args

def main(args):
    log(args)

import pdb;pdb.set_trace()
main(sys.argv)
EOF

これを普通に実行するだけで・・

$ python debug.py
> /tmp/debug.py(12)<module>()
-> main(sys.argv)

main 関数の実行前で停止してくれました。念のため、実際の停止位置を l(ist) コマンドで確認してみます。

(Pdb) l
  7  
  8     def main(args):
  9         log(args)
 10  
 11     import pdb;pdb.set_trace()
 12  -> main(sys.argv)
[EOF]

はい、ばっちり main 関数で止まっています。それではステップイン!

(Pdb) s
--Call--
> /tmp/debug.py(8)main()
-> def main(args):
(Pdb) l
  3     import sys
  4  
  5     def log(args):
  6         print args
  7  
  8  -> def main(args):
  9         log(args)
 10  
 11     import pdb;pdb.set_trace()
 12     main(sys.argv)
[EOF]

main 関数内に入って行きました。せっかくなので引数の値を確認してみます。

(Pdb) a
args = ['/tmp/debug.py']

ちゃんと引数が渡ってきていることがわかりますね。次は p コマンドで引数の型を確認してみます。

(Pdb) p type(args)
<type 'list'>

list です。まあ見ればわかりますか。引数の中身が見れたら満足したので、continue コマンドで残りの処理を一気に流してしまいましょう。

(Pdb) c
['/tmp/debug.py']

無事引数が標準出力に表示されました。簡単ですね。

pdb の紹介は以上です。それではみなさんよいデバッグライフを!

合わせて読みたい

racchai.hatenablog.com

racchai.hatenablog.com

racchai.hatenablog.com

AtlassianがBitbucket Pipelinesを発表!さっそく試してみた

ここまでのお話。

racchai.hatenablog.com

待ちに待った招待メールが届きました。すぐでしたね。

f:id:racchai:20160527164349p:plain

まずは [Bitbucket Pipelines add-on] をインストールする必要があるそうです。

f:id:racchai:20160527164634p:plain

すべてのリポジトリで有効化するなら、チームアカウントではなく自分のアカウントに Grant access せよとのこと。[Select account] をクリックして、そのようにしました。

f:id:racchai:20160527165119p:plain

おお!なにやら有効化されたっぽいですね。さっそく適当にプロジェクトを開いてみると・・

f:id:racchai:20160527165636p:plain

Pipeline リンクが追加されている!クリックしてみると、まずはセットアップせよとのこと。

f:id:racchai:20160527165901p:plain

[Setup up Pipelines] をクリック。

f:id:racchai:20160528212308p:plain

ふむふむ。[Enable pipelines] にチェックをいれてbitbucket-pipelines.yml を配置するだけってことですね。

言語毎に bitbucket-pipelines.yml のサンプルが用意されているのですが、今回はPythonのサンプルで試してみます。以下をコピペしてプロジェクトルート以下に作成し、コミット&プッシュ!

# You can use a Docker image from Docker Hub or your own container registry
image: python:3.5.1
   
pipelines:
  default:
    - step:
        script:
          - pip install -U tox
          - pip --version
          - tox --version

Bitbucketの画面を見てみると、プッシュを検知してタスクが開始されていました。

f:id:racchai:20160528213454p:plain

タスクを開いてみると、ちょうどタスクが終了したところでした。

f:id:racchai:20160528213555p:plain

スクリプトの実行毎に結果を開閉できる形式なのが地味にうれしい。Jenkins だとただただログが大量に出力されるだけなので、どのコマンドで失敗したのかを追うのが大変なんですよね(あるある)

サンプルが動いたので、次は実際のプロジェクト(進行中)でテストを実行してみることにします。

内容は詳しく解説しませんが、やりたいことを script に書いてプッシュ。(叩くコマンドで多少のレガシー感を感じさせますね)

image: python:2.7.11

pipelines:
    default:
        - step:
            script:
                - pip install virtualenv
                - virtualenv venv
                - source venv/bin/activate
                - pip install -r requirements.txt
                - python manage.py test

結果はこちら。

f:id:racchai:20160528221041p:plain

思いがけず自動テスト完成しました。手元のMacで実行するとすごい時間かかるし、マシンが熱くなるのでなかなか実行できないんですよね。

おかげでプッシュの度にテストを走らせられます。本当にうれしい。ありがとうAtlassian!

AtlassianがBitbucket Pipelinesを発表!さっそく申し込んでみた

Atlassianが先日 Bitbucket Pipelines を発表したそうですね。

これで Bitbucket へのプッシュをトリガーにして自動デプロイのようなことができるようになるのでしょうか?

気になるので使ってみることにしました。

Get Bitbucket Pipelines』へアクセスしてみると、こんな画面が。

f:id:racchai:20160527084504p:plain

ベータ版の利用申し込みが必要なんですね。では申し込んじゃいます。[Sign up for beta] をクリック。

f:id:racchai:20160525232059p:plain

メールアドレスを求められました。とりあえず Bitbucket のアカウントで使ってるメールアドレスを入力してみます。すると、このようなメールが送られてきました。

f:id:racchai:20160525230448p:plain

意訳すると "waiting list" に入ったから Gmail 開いて正座して待っとけってことか。即時利用開始じゃないのかよ!

ということでいったん待ちです。招待メールが届いたら続きをレポートしようと思います。

追記

メールが届いたのでレポート書きました。

racchai.hatenablog.com