一括grant!!

こんにちは
今回は、Postgresのユーザ作成方法を記載します。

 su - postgres
 createuser hogehoge

次に作成したユーザに対して権限付与を行うわけですが、テーブル数が多くなったDBのユーザに対する権限付与は、テーブル単位での権限付与となるので非常に面倒くさい。
なので、スクリプトを組んでみました。

お役に立つか分からないですが、参考までにどうぞ。。。

## grant.sh
#!/bin/sh
DBNAME=${1:?"enter dbname"}
DB_USERNAME=${2:?"enter db username"}
CREATE_USERNAME=${3:?"enter create username"}
COMMAND=${4:?"enter select or 'select,update' or 'select,update,delete' ..."}

# --共通関数定義--
LIST=/tmp/table.lst

# リスト作成
psql -U ${DB_USERNAME} -d ${DBNAME} -c "select relname from pg_class where relkind='r' and relnamespace=(select oid from pg_namespace where nspname='public' order by relpages desc);" -t -A > ${LIST}

# コマンド実行
while read line
do
    echo psql -U ${DB_USERNAME} -d ${DBNAME} -c \"grant ${COMMAND} on $line to ${CREATE_USERNAME}\;\"
    psql -U ${DB_USERNAME} -d ${DBNAME} -c "grant ${COMMAND} on $line to ${CREATE_USERNAME};"
done < ${LIST}

# listファイル削除
rm -f ${LIST}

exit 0

上記スクリプト実行方法は以下の通り

/grant.sh dbname db_username create_username 'select'
./grant.sh dbname db_username create_username 'select,update,delete'

.screenrcだよ

僕がよく使う設定残します。いろんなサイトから引っ張りだしてます。

  • 一応インストール方法
yum install screen
※使用しているディストリビューションはCentOSです
  • .screenrc
escape ^t^t #エスケープをCtrl+tに変更します。
hardstatus alwayslastline "%{=r dd} %-w%{=b dd} %n %t %{-}%+w %=" #画面の下に現在の時間とウインドウをタブみたいに表示
bind w windowlist -b #windowの一覧表示
defscrollback 10000 #scrollを10000行行えるようにする
bind 2 split #画面分割
bind o focus #画面移動
bind 1 only #一画面に戻す
bind 0 remove #画面削除
bind r eval ‘echo “Resize window”‘ ‘command -c resize’ #Ctrl+trで分割した画面サイズを変更。
bind -c resize ^] command 
bind -c resize j eval ‘resize +1′ ‘command -c resize’ #jで1行大きく
bind -c resize k eval ‘resize -1′ ‘command -c resize’ #kで1行小さく
vbell off #警告オフ
#caption always

shell bash

startup_message off #スタートアップメッセージを表示しない
sorendition 7 74 #画面の下に表示するタブの色調整

export TERM=xterm

エクセプション発生!!

libWand.so.10: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/rmagick-2.2.2/lib/RMagick2.so

こんなエラーが発生しました。特に何も触ってなかったんですが、いきなりだったのでビビりました。
対処法は、以下の通り。

/usr/lib以下のシンボリックリンクにlibWand.soがあるか確認。
なければ以下追加

ln -s /usr/local/lib/libWand.so.* /usr/lib

後、/usr/libにlibMagick.soがあるかも確認してなければ同様に

ln -s /usr/local/lib/libMagick.so.* /usr/lib

あっても変な動きする場合あるので、バイナリが/usr/libにある場合は一度退避させて、libWandとlibMagickシンボリックリンクを全て削除し、
上記の方法で追加してみて下さい。

クッキーをセキュアにする〜Session FixationとかSession Hijackとか〜

こんにちは。
クッキーをセキュアにする必要が出てきたため、色々探したんですがなかなか情報が発見できませんでした。結局、人の助けを借りて見つけたので記載します。(Railsのリファレンスには記載あったと思います。。。)

まず、用語の説明。

  • Session Fixation
 アプリケーションが生成したセッションIDを盗むことができないなら攻撃者自身が生成したセッションIDをクライアントに使わせてしまおう、という攻撃。
  • セッション・ハイジャック(session hijack)
 他人が確立したTCPの通信路を横取りする行為。

 ほかのユーザーのセッションIDやセッション・クッキー(セッション管理に使用しているクッキー)を盗むことで、別のコンピュータからそのユーザーになりすました
アクセスが行える危険性がある。例えば、セッション・クッキーが類推可能な簡単なものであったり、セキュアでない通信経路で送られた過程で盗まれたりすると、
セッション自体が盗まれる可能性がある。セッションが盗まれると、そのセッションを利用していたユーザーになりすましたアクセスが行える。これにより、個人情報が
盗まれたり、コンピュータに侵入されたりする危険性がある。

 セッション・ハイジャックを防ぐには、類推が難しいセッションIDやクッキーを生成し、セッションIDやクッキーの有効期間を短くすることが重要だ。また、重要な
通信ではIPSecやSSLを利用するなどの配慮も行いたい。

ではRailsでクッキーをセキュアにする方法を以下に示す。

  • プロジェクト以下、app/controller/application.rbに以下を追記。
    session :session_key => 'hogehogehogeho', :session_secure => true

FireFoxのオプションからCookieの表示を見て、送信制限欄が他のものと違う表示になってればOK

HTTPSのみセッションを有効にするので、アプリケーションによって、ログイン周りでSSLを設定しておかないとうまく動いてくれないので、SSLの設定をしていないサーバでは上記の記述は入れないようにした方がいい。

また、自動ログインにも影響でるので、日坊主日記さんを参考にさせて頂いて、試してみようかと思ってます。。。

自分の場合はこうしてます。

  • app/controller/application.rb
  if SESSION_SECURE
    session :session_key => 'hogehogehogeho', :session_secure => true
  else
    session :session_key => 'hogehogehogeho'
  end
  • config/environments/development.rb
SESSION_SECURE=true
  • config/environments/production.rb
SESSION_SECURE=fale

上記のように設定して、Secureな設定が必要な環境はproductionで起動し、それ以外はdevelopmentで動かすようにしました。必要なパターンに合わせて上記フラグを調整して下さい。

※セキュリティー対策の一部です。

  • 参照URL

Webアプリケーションに潜むセキュリティホール
セキュリティ用語−セッション・ハイジャック(session hijack)
Session Hijack

FastladderをCentOS5にインストール

こんにちは
本日、「livedoor Reader」の英語版である「Fastladder」のオープンソース版を公開しました。
という記事を受けて、さっそくインストール。若干戸惑うところあったので、ここに纏めました。

  • 環境

CentOS 5
Rails: 2.0.2

  • SVNでソースを落としました

svn checkout http://fastladder.googlecode.com/svn/trunk/ fastladder-read-only

fastladder-read-onlyというディレクトリが作成されて、なかみてみるとrailsプロジェクトとbatファイルなどが入ってます。

batファイル中見ましたが、mongrel動かしたり、serviceに登録したりをシェル化しているだけです。なので、今回は特に使わず、自分で設定しました。
では、さっそくfastladerを動かすための設定をしたいと思います。

  • yml設定(プロジェクト以下config/以下にdatabase.ymlとかdatabase.yml.mysqlとかあるので環境に合わせて切り替える。自分はMySQLが元々環境に入っているので、MySQLを利用します。)

$ mv database.yml database.yml.base
$ mv database.yml.mysql database.yml

  • DB作成します。

mysql > create database fastladder_production;
Query OK, 1 row affected (0.00 sec)

  • ユーザ作成

mysql > grant select,insert,delete,update,create,drop,file,alter,index on *.* to fastladder@localhost identified by '12345';
mysql > flush privileges;

  • これだけ(FreeImage)をyumでインストールできないので以下のコマンドでインストール

$ wget http://downloads.sourceforge.net/freeimage/FreeImage3100.zip
$ unzip FreeImage3100.zip
$ cd FreeImage
$ make
$ make install

  • gemで以下をインストール

$ gem install rfeedfinder
$ gem install feed-normalizer
$ gem install opml
$ gem install mongrel

rake db:migrate

$ script/server -d -e production
$ RAILS_ENV=production script/crawler > /dev/null &

fastladder-read-onlyというディレクトリ内にINSTALL.txtがあり、かなり丁寧に記載してくれていますのでとても参考になりました。

置換の備忘録

通常のrewriteを301ステータスを付けてレスポンスを返したかったので調べました。

RewriteRule ^/hoge(.*)$ / [R,L]

上記から

RewriteRule ^/hoge(.*)$ / [R=301,L]

凄くたくさんrewriteがあったので、viの置換を利用してみた。

:%s/置換前文字列/置換後文字列

なので以下のように置換した。

:%s/\[R\,L\]/\[R\=301\,L\]

見事置換終了。知らなかったのは俺だけか、、、もっと早く使っておけばよかった。。。