Profile cover photo
Profile photo
Takashi Matsuo (松尾貴史)
12,271 followers -
Kay's Daddy
Kay's Daddy

12,271 followers
About
Communities and Collections
View all
Posts

Post has attachment
Just in case you missed it, Google App Engine now supports PHP 7.1 (also supports 7.0 and 5.6 too). Try it out and let us know what you think.

https://cloudplatform.googleblog.com/2017/03/digging-deep-on-php-71-for-google-app.html

Post has attachment
Math-U-See のブロックが届いた!
Photo

Post has attachment
An article about Travis CI deployment provider for App Engine written by my colleague. Now you can deploy your App Engine app with Travis :)

Travis から App Engine のアプリケーションをデプロイできるようになりました。

https://cloud.google.com/solutions/continuous-delivery-with-travis-ci

Post has attachment
刹那のコビン攻め。しかしいろいろミスしてる。90手目は3八成銀の詰みが見えてないのはアカン!

将棋ウォーズ棋譜(tanizokolion4級対matsuotakashi4級) http://shogiwars.heroz.jp:3002/games/tanizokolion-matsuotakashi-20150831_144753?tw=1 #shogiwars

Post has attachment

Post has attachment

Post has attachment

Post has attachment
The pancakes are so good

## 回答編 (私の time line に問題あります)

私「さっきも言ったように初めは bin という行を探していたけど、それはあり得ないんだ。VB の管理システムの方で unix のシステムユーザーは登録できないようになってるはず。でもこの行を見た時ピンと来た!犯人はこのアスタリスクだね。」

同僚「は?でもまたなんでアスタリスクなんかがあるわけ?」

私「なんでだろうね?後で VB システムのオペレーターに聞いてみよう。理由は何にせよ、これこの通り、当日のファイルにはアスタリスクが入ってるわけ。」

同僚「じゃあ userdel にアスタリスクが渡されたというわけか?」

私「惜しい!殆ど正解。このアスタリスクが shell glob として解釈されたのは間違いない。でも userdel にアスタリスクが渡されたんだとすると、こんな command line になるでしょ。」

/usr/sbin/userdel -r bin dev etc home lib mnt opt ......

私「このスクリプト、root の crontab から起動されてて、cwd は / になってる。アスタリスクは展開されるとトップレベルにあるディレクトリの一覧になるわけ。でも上記のように userdel に複数の引数を渡すとエラーになるんだ。」

同僚「惜しいね!じゃあ実際には何が起こったんだろう?」

ここで私達は簡単な再現テストをした。スクリプト中の userdel の行をコメントアウトして / に居る状態で実行してみればいい。実行結果はこのとおり:

deleting the user bin
deleting the user dev
...
...

私「やっぱり。for の時点でアスタリスクが shell glob として解釈されている。アスタリスクが展開されたリストの始めの要素が "bin" だから、これが userdel に渡り "bin" ユーザーを -r オプション付きで消したことで /bin ディレクトリが消えたんだね。」

同僚「ほう!これは……なんとも……面白いバグだね。実験の結果を見ると、確かに間違いなさそうだ。」

とりあえずハッカーに侵入されたわけではないことがわかったので、バックアップから /bin を復帰し、bin ユーザーを追加した後にメイルサーバーを再稼働させることにした。

(ちょっと覚えていないんだけど、もしかしたら "dev" ユーザーも消えてたかもしれない。"etc" が userdel に渡った時点で No such user みたいなエラーになって終了したんじゃないかと思う)

これでメイルサーバーの機能は復活。サポートチームに連絡をしておこう。そうそう、問題の crontab のエントリーを念のため止めておかないと。後できちんと shell glob として解釈しないように書き直してから cron を再開しないといけない。

でもなんでアスタリスクが入ってたんだろう。私は VB システムのオペレーターに話を聞いてみた。

私「メイルサーバーにアップロードされた退会ユーザーリストにアスタリスクが入っていたんだけど、なんでかわかる?」

同僚2「あ、覚えてる!入力したの私だから。申込書の希望メールアドレス欄が空欄だったんだよね。VB のシステム側では "希望メールアドレス1" は必須項目になってて、何か入力しないと登録できないわけ。それでアスタリスクを入れて登録しといた。結局そのお客さんは気が変わってすぐ退会したんだけど。」

私「わお!で退会処理の時にアスタリスクの行がアップロードされたってことか。しかし……よりによってなんでアスタリスク入れたわけ?」

同僚2「あれ?メールアドレスに使えなそうな文字を選んだつもりだったんだけどまずかった?」

私「う……ま……まずくないです。」

確かに直接の原因はアスタリスクだけど責任はシステム側にあるわけで、同僚2を責めるのはお門違いですな。

そうして私は他人が書いたシェルスクリプトを修正するのでした。ちゃんちゃん。

## 回答編おわり

もうだいぶ昔のはなしなので、細かいところは色々違ってるかもしれませんが、基本的には実際にあったお話しです。シェルスクリプトでは思わぬ形で思わぬことが起きるのでみなさんも気をつけましょう!

ちなみに、何人かメイルで回答を送ってくれました。どんぴしゃの正解者はいませんでしたが、とても正解に近いメイルを送ってくれた Yanagiya-san に T-shirt をさしあげたいと思います

Post has attachment
https://plus.google.com/u/0/+TakashiStevelandMatsuo/posts/5wVy7qj7bNw

の続編。前半の答えですが、メイルサーバーの /bin がそっくり消えていたのでした。後半では何故 /bin が消えたか考えてみましょう。

## 後編

さて vi で色々ログファイルを見てみる。/var/log/syslog なんかを見ると、どうやら夜中の 2:00AM ちょい過ぎからこの不具合が発生しているらしい。

2:00 ちょい過ぎからというのでピンと来て cron entry の調査を始める。このあたりで被害にあったメイルサーバーで作業するのがきついので同構成のメイルサーバーで作業をしてたかもしれない。

む、cron に怪しいのがいる。2:00 に delete_users.sh みたいのが動いてる。内容は下記のような感じ。コピーを取ってなかったのでちょっと正確かどうか怪しいけど、肝心の現象は再現できてるはず。

#!/bin/bash
set -e
DELETED="deleted_users.txt"
if [ -f $DELETED ]; then
  for deleted in `cat $DELETED`; do
    echo "deleting the user $deleted"
    /user/sbin/userdel -r $deleted
  done
fi

この入力ファイルはどこから来てるかというと、VB で書かれている会員管理のシステムから、週に一度退会した会員のリストがアップロードされるらしい。

僕はここで、肝心のメイルサーバーに戻り、今週アップロードされた退会リストを見る。しばらく考え、同僚を振り返り言う。

「何故 /bin が消えたかわかったと思う。僕の仮説はこうだよ。」

### ここでミステリー後編です。
読者のみなさんは何故 /bin が消えたかわかりましたか?もし良かったら、入力ファイルと何故消えたかの説明を matsuo.takashi@gmail.com宛に送ってください(コメントでやるとネタバレしちゃうので)。

先着2名の正解者の方に Google T-shirt かなにかをプレゼントしたいと思います。
Wait while more posts are being loaded