ラベル メモ の投稿を表示しています。 すべての投稿を表示
ラベル メモ の投稿を表示しています。 すべての投稿を表示

2014/03/27

Ruby on Railsのルーティングがうまく動かなかったのはどう考えても俺が悪い

サーバメンテナンスの管理ツールとして久々にRailsで組んでみた。

が、前にもハマった気がする点にまたハマる程度には忘れていたので、
忘れないように備忘録エントリを作成する。

けど多分また忘れるんだろうな。。。



コントローラーアクションに単純なCRUDからちょい離れる作業を
GETメソッドでトリガーされるように追加しました。

routesにも書きました。

が、うまく動かずRuntime Errorになります。
各アイテムの状態変化(shanaiok, shanaing)を行なったあと、
一覧に戻るようにredirect_toを指定しているにも関わらず動かない。

routes.rbの内容:
OreApp::Application.routes.draw do
  resources :services

  get 'services/:id/normal' => 'services#normal'
  get 'services/:id/maint' => 'services#maint'

  get 'services/shanaiok' => 'services#shanaiok'
  get 'services/shanaing' => 'services#shanaing'

  root 'services#index'
end

rake routesの結果:
$ rake routes
           Prefix Verb   URI Pattern                    Controller#Action
         services GET    /services(.:format)            services#index
                  POST   /services(.:format)            services#create
      new_service GET    /services/new(.:format)        services#new
     edit_service GET    /services/:id/edit(.:format)   services#edit
          service GET    /services/:id(.:format)        services#show
                  PATCH  /services/:id(.:format)        services#update
                  PUT    /services/:id(.:format)        services#update
                  DELETE /services/:id(.:format)        services#destroy
                  GET    /services/:id/normal(.:format) services#normal
                  GET    /services/:id/maint(.:format)  services#maint
services_shanaiok GET    /services/shanaiok(.:format)   services#shanaiok
services_shanaing GET    /services/shanaing(.:format)   services#shanaing
             root GET    /                              services#index

なんで言うこときかねーんだー!
…と悩むこと30分ほど。
  • なぜかredirect_toを指定しているのに#showアクションに渡される。
  • :idに"shanaiok"とか渡される。
routesを見比べてからふと気づく。
あ、優先順位じゃん、と。

アクションで渡したいのに"shanaiok"自体が:idに渡されているのは
上の方にあるservices#showが拾っているからですね。
ルーティングは上から解釈され分岐していくものなのです。


修正後のroutes.rb:
OreApp::Application.routes.draw do

  get 'services/shanaiok' => 'services#shanaiok'
  get 'services/shanaing' => 'services#shanaing'

  resources :services
  get 'services/:id/normal' => 'services#normal'
  get 'services/:id/maint' => 'services#maint'

  root 'services#index'
end

rake routesの結果:
$ rake routes
           Prefix Verb   URI Pattern                    Controller#Action
services_shanaiok GET    /services/shanaiok(.:format)   services#shanaiok
services_shanaing GET    /services/shanaing(.:format)   services#shanaing
         services GET    /services(.:format)            services#index
                  POST   /services(.:format)            services#create
      new_service GET    /services/new(.:format)        services#new
     edit_service GET    /services/:id/edit(.:format)   services#edit
          service GET    /services/:id(.:format)        services#show
                  PATCH  /services/:id(.:format)        services#update
                  PUT    /services/:id(.:format)        services#update
                  DELETE /services/:id(.:format)        services#destroy
                  GET    /services/:id/normal(.:format) services#normal
                  GET    /services/:id/maint(.:format)  services#maint
             root GET    /                              services#index

前にも引っかかったことがあり、学習能力がないようです俺。。 orz


そして極めつけには、routes.rbの初期ファイル内コメントに
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes". 
…って書いてあるわけで、読まずにコメント捨てた俺はもっとダメ。

2014/03/19

WindowsServer 2008 のタスクスケジューラで 2147943645 エラーでタスク起動不良

ここんとこ、Windowsサーバと格闘しておりました。


デイリーのバックアップ用のジョブをタスクスケジューラ上で作成して、
テスト実行すると問題なく起動するくせに、いざとなったらエラーが出ている。

タスクスケジューラは、ユーザー "<ユーザ名>" の "\<タスク名>" タスクを開始できませんでした。追加データ エラー値: 2147943645

なんじゃこれー。

…と思ったら、ユーザがログインしていない場合にジョブが実行できないとのこと。

ということで、ジョブのプロパティ内にある
  • ユーザがログオンしているかどうかにかかわらず実行する
にチェックを入れればOKというお話でした。


勝手に入れられたタスクジョブの実行回避というセキュリティ上の話からだと思うけど、
ログインしっぱなしというのは逆にセキュリティ的におかしくないすかね。

「タスクの実行時に使うユーザアカウント」情報を保持している割に
ログオン時のみ実行がデフォルトってのもなんだかなぁ、と思うのですが。。。

さらにはコンフィグミスで発生しうる内容なんだからコード返答じゃなくて
ちゃんと発生した事由を喋ってくれよー……と。


75%ほど愚痴でしたw

2014/02/13

ntpdに気をつけれ、と さくらVPSからメールが来た の巻。

一応JPCERT/CCから1/15にメールが来てて個人的には対策済みなんですが、
念の為のチェック&啓蒙ということで。

■問題の概要

詳細は下記の情報を見ると良いですが、
ntpdの一部バージョンには状況確認用コマンド(monlist)が用意されていて、
これが外部から呼ばれると、かなりのトラフィックを発生させるので
DDoSに使われるよ、という話。

ふだん利用している さくらインターネット 様からも注意喚起メールが今日届きました。


■何が問題なのか

monlistの機能的には、対象ntpサーバが最近通信をした相手をリストアップする機能。

試しにmonlistを有効にした状態で以下のようなコマンドを叩いてみる。

# ntpdc -c monlist

remote address          port local address      count m ver rstr avgint  lstint
===============================================================================
ntp-b3.nict.go.jp        123 4x.xxx.xx.xx3          6 4 4    180      1       1
ntp-b2.nict.go.jp        123 4x.xxx.xx.xx3          6 4 4    180      2       2
ntp-a3.nict.go.jp        123 4x.xxx.xx.xx3          6 4 4    180      2       3
ntp-a2.nict.go.jp        123 4x.xxx.xx.xx3          6 4 4    180      2       4
うちのVPSではNICTのNTPサーバを見ているのでリストアップされます。
ntpdのrestrict設定(+Firewall)で他には通信しないようにしているので、
これ以外はリストされないようになってます。

ここで問題なのは、
  • 1コマンド&小さい通信量で簡単に取り出せる
  • 通信履歴がまるまる大公開
  • さらにリスト作成時にDNSで名前解決が走る(ntpdc -nなら抑制できるけど)
ということで、増幅率(きっかけコマンドに対して発生する無駄な通信量)が半端ねえ。

ぱないの!
…どころの話じゃないのです。忍ちゃんもびっくり。

■対策方法

ntpdのバージョンアップなんですが、影響を受けないバージョンは「4.2.7p26」。
しかし安定版は4.2.6であり、各distroでもまだ落ちてきてないバージョンかと。

そこで、monlist自体をストップしましょう。
ntpdの設定ファイルに「disable monitor」と1行追記。

※私の環境はDebian Wheezyです。

# vi /etc/ntp.conf
disable monitor    ←ファイル末尾にでも追記する

# /etc/init.d/ntp restart
 これで再度monlistを叩いてみると…
# ntpdc -c monlist
***Server reports data not found
問い合わせを無視するようになりました。これでOK。
外から確認したい場合は、 OpenNTPProject.org などを使用するといいかもです。


…というか、単発サーバで自前時刻合わせだったらntpd使わずntpdateを
slewモードを使ってcronで回すのも手です。


久々に奇声が漏れるレベルの増幅率ですので、早急に対処を。


2013/12/17

Ubuntu ログイン時のMotDを止める

Ubuntuのログイン時に出るMotD(Message of the Day)。
現在のステータスやaptパッケージのアップデート告知が出るようになってる。
便利なんだと思いますが、ちょっと重いのです。

マシンのステータスは別のリソースで監視してるし、
パッケージはapticronとかで監視してるしログインのたびに見てもらっても…という方用。


/etc/motd がその実体なわけだけれども、 /run/motd へのsymlink。
/etc/motdをrmすればとりあえずは出なくなりますが、
motdを作るプロセスは走ってしまうのでリソースの無駄。

探したところ、PAMに居ました。
sshdの認証が通ると pam_motd.so を呼んで、ここで/run/motdを作っている模様。

ので、コメントアウトさせていただきました。

/etc/pam.d/sshd
# Print the message of the day upon successful login.
#session    optional     pam_motd.so # [1]

【追記】
ツッコミいただきましたー。
部分的にカットしたい場合などは、 /etc/update-motd.d の下を見ると幸せになれるかも。
動的に出力する内容がスクリプトとして置いてあります。

パッケージアップデートがあるかどうかだけログイン時に知りたい時は
90-updates-available だけ有効にしておくとか、色々潰し効きますね。

2013/11/13

Documents for security update

いや、得られる情報は蛇足であることはちゃんと把握してるんだけど。


Linuxとかのこと考えてないなぁ、と。

WindowsプラットフォームのことだしWindowsで見ればいいじゃん
…という話なのは重々承知ですが。

でもWindowsでもオプションコンポーネントだよね>Silverlight

 あと、Moonlightというのも存在は知ってます。



でもなんかちょっと違くない?
セキュリティ情報って広く一般に知らしめて
少しでも多くの人に対策とってもらいたいんだよね?


んじゃ、そんなに普及してない方言のような技術を押し出しても…ねぇ。


2013/11/08

Disabling IPv6 on Ubuntu

別にIPv6が悪いわけではなく。
環境の不一致による離婚。

IPv4な社内LANなんかでLinuxを使用していたりすると、
プログラムが勝手にIPv6でListenしたりして
ネットワーク上に見えなくなることがあったので、
残念ながら大元から無効化する。

/etc/sysctl.conf に以下2行を追記。
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
※古いバージョンだと2行目は要らないかも。当方12.04LTS。

登録後、
# sysctl -p
で無効化。

/sbin/ifconfig した時に
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx 
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.xxx  マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
…という感じに、ipv6アドレスが表示されてなければ完了。


また会う日まで、ごきげんようIPv6。

2013/11/07

SSLCipherSuite of Apache web server

ApacheサーバのSSLにおいて、RC4暗号が弱いということはわかっている。



わかっているのだが。
これ、PCブラウザはいざ知らず、携帯端末なんかはどうなんだろう。

IE6がRC4を優先したりというのは解っているけどもう来年4月には「うんこ化」が決定しているわけで、あんまり気にしてないんだけど。
古い携帯電話なんかでアクセスしてくる人を「うんこだからブー」と一律言っていいものかどうか。


資料が見つからず、ちょっと悩ましい。

2013/11/06

Using history of my Mac

ちょっとメモ的に、今までに所持してきたMacを晒してみる。

Macintosh LC475
Macintosh Centris 610
PowerBook 540c
Power Macintosh 6100
Power Macintosh 7600
Mac mini Late 2005 (PowerPC G4)
Mac mini Mid 2011 (Sandy Bridge)
MacBook Air 2012

下2台が現役さん。




…結構使ってた。

2013/10/23

New stage.

ちょっと河岸を変えてブログっぽいメモを作ってみようかと。

おそらくサーバ管理とかそっち方面&趣味的なものを。