Webサーバのログを眺めてみよう

この記事を書いた頃は,apacheを使っていたが,今では使っていない.「apache のエラーログを真面目に読んでみた | hadacchi blog
存在しないURLを適当に入れたら出てしまうから書いちゃうけど,このウェブサイトは,nginxを使って運営している.

で,まぁそのログを眺めようという前回に引き続いての企画.
思いも寄らぬエラーが出てたりするので,勉強になると思うよ.

access.log
  • 標準だと,多分/var/log/nginx/access.logあたりだと思う.
    生で見てもいいんだけど,アタックによく使われるphpmyadminあたりへのアクセスをひっかけるため,こんなコマンドでまずはIPとリクエストURL,サーバのレスポンスコード,ユーザエージェントを一覧する.

    # cut -d' ' -f1,7,9,12-  nginx/access.log | grep dmin | less

    そもそも,ここで200になっていたら,phpmyadminのログとか見た方がいいと思う.
    私は使ったことがないから知らない.

  • 次は,そこでひっかかったIPアドレスをひっかけて,他にヤバそうなアクセスを受けていないか確認する.
    # cut -d' ' -f1,7,9,12-  nginx/access.log | grep xxx.xxx.xxx.xxx | less

    そうすると,例えばこんなURLへのリクエストが飛びまくっていたので,この辺りに脆弱性のあるプログラムがあるんだろーなー,とか分かる.

    /w00tw00t.at.blackhats.romanian.anti-sec:)
    /muieblackcat
    /components/com_jinc/classes/graphics/php-ofc-library/ofc_upload_image.php?name=magic.php
    

    ぐぐってみると,1つ目と2つ目はよくひっかかる.
    3つ目は,なんかopen flash chartとかいうのが出てくる.
    あと,明らかにSMTPを狙ったログも出てきた.

    CONNECT 126mx00.mxmail.netease.com:25 HTTP/1.0

    ぐぐってみると,中国語っぽいサイトが出てくる.
    アクセス元IPアドレスをIP-HOST変換かけてドメインでぐぐると,台湾からのアクセスらしいという情報も出てくる.

error.log
基本は,access.logと同じだが,nginxの場合はphpへのアクセスを全てphp-fpmへ流していると,php-fpmからのエラーも全部記録される.
設置していないURLでの*.phpへのアクセスは,別にさばいてログを分けた方がいい…のかな?まだ考え中.
他には,設置をミスった証明書のエラーとかも出てくる.

# grep -v 'No such file or directory' nginx/error.log | less
php-fpm.logとか,unicorn.logとか
phpとかrubyとか使ってると,この辺りもチェックすることになると思う.pythonならuwsgi.logとかかしら.
この辺りを動かしている人は,自分の環境に併せて調べてみてね.

Ubuntuで音を鳴らす

デバイスが認識されているか確認
$ lspci | egrep -i multimedia\|audio
ALSAに認識されているか確認
$ cat /proc/asound/cards
pulse audioになっているか確認
$ aplay -L
pulse audioの出力先の確認
$ pavucontrol

出力装置は使いたいデバイスがミュートになってないことを確認.
設定は内部オーディオが使いたい出力になっていることを確認.

syskey のパスワード入力を辞める

Windows OSで,syskey.exeを使って暗号化を有効化し,「パスワードスタートアップ」を設定すると,Windows起動時にパスワード入力を求められる.
Windowsタブレットでキーボードを使わずに運用していると,syskeyのパスワード入力画面でソフトキーボードが起動せず,OSを立ち上げられない事態に陥る.
で,syskeyのパスワード入力画面を出さないようにするにはどうすれば良いか.

  1. syskey.exe を起動
  2. 「更新」
  3. 「システムによって自動生成されるパスワード(S)」
  4. 「ローカルにスタートアップキーを保存する(L)」
  5. 「OK」

Yosemiteでスクリプトを定期実行

Mac OS X では,スクリプトの定期的な実行に,以下の3つの方法があるらしい.

  • crontab –– 私の環境では,crontab –e で編集した結果が保存されなかった.
  • launchd –– ちょっとググった感じでは,スクリプトの登録にxmlの編集が必要そうでパス.
  • Automator+iCal –– launchdより楽そうと思って手を出したら,酷い手間がかかった.

とはいえ,Automator+iCalにトライした.

Automator

Automatorは,複数の手順を経て実行する作業をダブルクリックの一発にまとめるためのスクリプトメーカーという感じのアプリで,そのスクリプトをappファイルに落とせる.
後に出てくるiCalは,yosemiteでは「カレンダー」という名前になっているが,昔のiCalとは違ってスクリプトを直接実行させる選択肢がないっぽいので,Automatorを使わざるを得ない.
Automatorの実行環境はシェルとは異なるので,シェルの設定ファイルをスクリプト内で読み込ませるか,あるいは全てのコマンドをフルパスで書くような工夫が必要かも知れない.
macportsでssh,rsyncなどを入れている私は,フルパスで書くことにした.
rsyncからsshの秘密鍵ファイルを開いて公開鍵認証を空パスで実行するということをするためには,環境変数がどうもうまく動いていないっぽいので,こんな風に呼んでやらないといけない.
以下,macportsを/opt/usr/local/binに入れている場合.

#!/bin/sh
/opt/usr/local/bin/rsync -rptgoDz -e '/opt/usr/local/bin/ssh -i /Users/USERNAME/.ssh/id_rsa' --include 'Downloads/ここだけよ/' --exclude 'Downloads/*' /Users/USERNAME USERNAME@DESTSERVER:path/to/dir

ここで,rsyncのオプションに–aを使っていないのは,リモートがwindows系のファイルシステムになっている外付けHDDを使っていて,symbolic linkのコピーができずエラーを吐くため.
エラーが出てもコピーは実行されるが,Mac OS X上にエラーが通知されるのが不快なので,リンクはコピーしないことにした.
どうもrsyncでリンクをコピーしないというオプションがないっぽく(そもそも–lをつけなきゃいいんだし),オプションが長くなってしまった.
ついでにちょっと書いたincludeとexcludeは,rsyncのinclude/exclude指定が難しいので,備忘のため.
この辺の記事が,詳しい→rsync の複雑怪奇な exclude と include の適用手順を理解しよう - てっく煮ブログ

iCal

カレンダーとか一般名詞のアプリにされたせいで,こいつを識別して呼ぶのが難しくなって,今後はweb上のtipsが減っていくであろう,iCal.
どうでもいいけど,AndroidもMac OS Xも,アプリの名前をこういう一般名詞にしやがるせいで,一般人はおろか技術者でも技術文書の検索が難しくなってしまった.
バッドノウハウへのアクセス手段を断ってやるぜ,HEHEHE…という発想は分からんでもないが,使われんくなっては仕方なかろう.アホめ.

カレンダーというアプリがiCalのことだ,ということと,スケジュールの登録をして,通知方法をアプリ実行にすればいいんだということが分かれば,特段難しいことはない.
通知方法を複数書けるので,例えばDBのdumpとバックアップなどのように時間差をおいて実行したい手順を順に実行させるのに,2つもスケジュールを登録する必要はない.
iCalの頃は,iCalAlarmSchedulerとかいうのをMac OS Xログイン時に起動するようにしないといけなかったらしいが,どうもカレンダーになってからは不要のようだ.
iCalAlarmSchedulerをシステム環境設定の「ユーザとグループ」から起動項目に追加するという古い情報に踊らされて(しかも,昔はユーザとグループからではなくアカウントからだった),だいぶハマってしまった.
いちいち,設定項目の名前も変えんな,クソOSめ.

mac os xも使えるようにと動かしているが,使う度にクソOSだと思う.

Redmine on Debian がアップデートでごちゃごちゃしたので整理

追記:
最近はrbenv+ruby-buildが流行りらしい.apt-getで入るけど,それで入れたら入れられるrubyは古いものしかなかった.

前提:サーバで動作している rubygems, ruby 系は全部消した上で,autoremove した状態.
それまで動いていた,redmine の環境はいじってない.

ruby
rvmでインストールする.
環境が整っていれば,webにあるように

root# curl -L https://get.rvm.io | bash -s stable

でいいんだけど,最初はうまくいかないので,インストール用のシェルスクリプトを落としてきて何度も実行することになる.

$ wget -L https://get.rvm.io
$ cat index.html | bash -s stable

そうしたら色々と足りないものを入れろと言われる.
RedmineをDebianに導入する - Qiita を見て入れたものは,これら.
make環境が入ってたので,少なめ.

root# apt-get install git
root# apt-get install libssl-dev
root# apt-get install libreadline-gplv2-dev
root# apt-get install libyaml-dev
root# apt-get install curl

んで,もういっかい,

$ cat index.html | bash -s stable

そしたら環境を読み込んでrubyを入れる.

$ source $HOME/.rvm/scripts/rvm
$ rvm install x.x.x # <- 入れたいバージョン

この辺りで,rootになってないことに気付いたけど,$HOME/.rvm 以下にインストールされてたので,いいやと思うことにする.

$ rvm list

として,インストールされたrubyが出てきたらOK.

mysql関連gems
これはスキップできなかった.

$ sudo apt-get install libmysqlclient-dev
$ gem install mysql2
bundler
$ gem install bundler --no-rdoc --no-ri

これでローカルに入るはず.

redmine用のgems
なんか gemset とか使って,環境を切り替えられるらしいんだけど,使わないことにする.

$ cd /path/to/redmine
$ bundle install --without development test postgresql sqlite3 rmagick

なぜか,sqlite3 はインストールされてしまう…

起動スクリプト
source コマンドでスクリプトを読み込めるbashにする.

#!/bin/bash
source /home/username/.rvm/scripts/rvm
cd /path/to/redmine
bundle exec unicorn_rails -D -E production -c config/unicorn.rb

ハードリンクしているファイルを探す

検索パスは適宜変えること.

$ ls -i FNAME | cut -d' ' -f1 | xargs find . -inum

ls –i で inode を表示.
cut –d' ' –f1 でセパレータを ' ' に指定して分割した文字列の1番目を抽出.
find –inum INUM で inode番号 INUM のファイルを検索

Google Chrome でフォントのアンチエイリアシングが効かなくなった時の対処

色々あるらしいし,今後も起こりそうなので,追記前提で記事を書く.

2015/4/1時点で,アドレスバーなどに入力した文字がギザギザで気付いた時の対処法

chrome://flags/#lcd-text-aa を開いて,「LCD テキストのアンチエイリアス」を有効化する.

設定項目を見て思い出したが,この直近に,接続しているLCDを変えた.
それが原因か?

debianとかubuntuで日本語表示する時のフォントインストール

とりあえず,今入れてるやつ.

$ dpkg -l 'fonts*' | grep ii | sed -e 's/\s\s*/ /g' | cut -d' ' -f2,5-

の実行結果.

debian
fonts-droid handheld device font with extensive style and language support
fonts-freefont-ttf Freefont Serif, Sans and Mono Truetype fonts
fonts-ipaexfont Japanese OpenType font, IPAexFont (IPAexGothic/Mincho)
fonts-ipaexfont-gothic Japanese OpenType font, IPAexFont (IPAexGothic)
fonts-ipaexfont-mincho Japanese OpenType font, IPAexFont (IPAexMincho)
fonts-ipafont Japanese OpenType font set, IPAfont
fonts-ipafont-gothic Japanese OpenType font set, IPA Gothic font
fonts-ipafont-mincho Japanese OpenType font set, IPA Mincho font
fonts-ipafont-nonfree-jisx0208 Japanese TrueType font, IPAfont (JISX0208)
fonts-ipafont-nonfree-uigothic Japanese TrueType font, IPAfont UI Gothic
fonts-ipamj-mincho Japanese OpenType font, IPAmj Mincho font
fonts-johnsmith-induni OTF fonts with exhaustive set of Roman characters
fonts-junicode Unicode font for medievalists (Latin, IPA and Runic)
fonts-jura monospaced, sans-serif font
fonts-takao Japanese TrueType font set, Takao Fonts
fonts-takao-gothic Japanese TrueType font set, Takao Gothic Fonts
fonts-takao-mincho Japanese TrueType font set, Takao Mincho Fonts
fonts-vlgothic Japanese TrueType font from Vine Linux
ubuntu
fonts-cantarell sans serif font family designed for on-screen readability
fonts-crosextra-caladea Sans-serif font metric-compatible with Cambria font
fonts-dejavu-core Vera font family derivate with additional characters
fonts-horai-umefont Japanese TrueType font, Ume-font
fonts-ipaexfont Japanese OpenType font, IPAexFont (IPAexGothic/Mincho)
fonts-ipaexfont-gothic Japanese OpenType font, IPAexFont (IPAexGothic)
fonts-ipaexfont-mincho Japanese OpenType font, IPAexFont (IPAexMincho)
fonts-ipafont Japanese OpenType font set, IPAfont
fonts-ipafont-gothic Japanese OpenType font set, IPA Gothic font
fonts-ipafont-mincho Japanese OpenType font set, IPA Mincho font
fonts-ipafont-nonfree-jisx0208 Japanese TrueType font, IPAfont (JISX0208)
fonts-ipafont-nonfree-uigothic Japanese TrueType font, IPAfont UI Gothic
fonts-ipamj-mincho Japanese OpenType font, IPAmj Mincho font
fonts-liberation Fonts with the same metrics as Times, Arial and Courier
fonts-opensymbol OpenSymbol TrueType font
fonts-sawarabi-gothic gothic font for Japanese
fonts-sawarabi-mincho Japanese mincho font - Sawarabi Mincho font
fonts-takao Japanese TrueType font set, Takao Fonts
fonts-takao-gothic Japanese TrueType font set, Takao Gothic Fonts
fonts-takao-mincho Japanese TrueType font set, Takao Mincho Fonts
fonts-takao-pgothic Japanese TrueType font set, Takao P Gothic Fonts
fonts-ubuntu-font-family-console Ubuntu Font Family Linux console fonts, sans-serif monospace
fonts-umeplus Japanese TrueType gothic fonts, based on Umefont and M+Font
fonts-vlgothic Japanese TrueType font from Vine Linux

Ubuntu on VMware Player でユニティモード

Ubuntu 標準の Unity というウィンドウマネージャは,VMware playerがユニティモードをサポートしていないらしい.
gnomeとかxfceを入れたら動く.
各々の使用感を少しメモっておく.

gnome3
一時期は重い重いと言われていたが,今は,Unityより軽い気がする.
ウィンドウの最大化,左右最大化ができるのが熱い.
自分でショートカットキーを設定したかどうかは忘れたが,Win+↑,←,→でそれぞれ,最大化,左最大化,右最大化できるように設定可能.
Ctrl+Alt+Tでターミナル起動するショートカットがデフォで入っているのも便利で良い.
細かい設定は,compizconfig-setting-managerを入れる.
イケてないのは,ユニティモードにした時,デスクトップが残ること.ターミナルにフォーカスを移すと,全画面のgnomeデスクトップも後ろに起きてしまい,既存のWindowsの窓は覆わないものの,Windowsのタスクバーを覆う.
ただ,デスクトップが表示されることにより,gnomeバーが表示されるので,最後のウィンドウを閉じた後でもVMにフォーカスを移すことができて,Ctrl+Alt+Tでターミナルを起こせる.
xfce4
昔なつかしのテーマで起きてくる,軽量なウィンドウマネージャ.
ウィンドウの最大化,垂直最大化があるので,左右最大化がない点は垂直最大化で補うしかない.
ウィンドウマネージャ>キーボードショートカット,より設定.
ユニティモードにした時にxfce4のデスクトップは消えてくれるのはいいが,最後のターミナルを閉じた時,ユニティモードを終わらせずにフォーカスを移す手段がない
(追記3/18: VMware playerのウィンドウにフォーカスを移して,左上(私がWindowsボタンを左上に配置しているからかも?)にポインタを移動すればメニュー呼び出せる)
xfce4のツールバーも消えてしまうので,アプリケーションメニューからアプリを起動することができない.
Ctrl+Alt+Tショートカットをターミナルに割り当てるのは,キーボード>アプリケーションショートカットから.ショートカットの設定がWMと分かれているのがちょっとめどい.

ということで,私の使い分けはこんな感じ.

  • VM全画面利用時
    • ウィンドウのサイズをWindows互換で変形させたい時 → gnome3
    • 少しでも軽く動作させたい時 → xfce4
  • ユニティモード利用時
    • アプリケーションバーがないと生きていけない → gnome3
      • Ctrl+Shift+U でアプリケーション呼び出しのメニューが出るので,これでイ㌔
    • デスクトップがVMデスクトップに乗っ取られるのはゆすせないぞ → xfce4