ブログトップ 記事一覧 ログイン 無料ブログ開設

それはそれ。これはこれ。 このページをアンテナに追加 RSSフィード

2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2013 | 01 | 02 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2014 | 02 | 03 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 05 | 06 | 07 | 11 |
2016 | 07 |
2017 | 01 | 03 | 06 | 07 | 11 |
2018 | 05 | 07 |

2011-05-20(金)

[]JSONキー文字列 JSONのキーは文字列を含むブックマーク JSONのキーは文字列のブックマークコメント

id:bluegale:20100610 で、

さて、では、この Hash を JSON形式に変換してあげるとどうなるでしょうか?

require "rubygems"  if(RUBY_VERSION < '1.9.1')
require "json"

test4hash = {nil => "nil!", "" => "empty!"}

p test4hash.to_json # => "{\"\":\"nil!\",\"\":\"empty!\"}"

JSON 形式の String に変換されましたね。

ふむふむ。

これを Parse するとどうなるでしょう?

require "rubygems"  if(RUBY_VERSION < '1.9.1')
require "json"

test4hash = {nil => "nil!", "" => "empty!"}

p JSON.parse(test4hash.to_json) # => "{\"\"=>\"empty!\"}"

となり nil, ""(空文字) 共に同じ key と見なされ 内容が上書きされたような感じでしょうか?

これの原因としては、

ということからでしょうか。

同じ事は、{1=>"one","1"=>"ichi"} 等でも起こる。

キー文字列以外が使われているHashを to_json するとエラーになるという仕様にすれば防げるけど、使いにくくてしょうがない気がする。


JSONでも値の方は、null も使えるので、これはRuby側では nilマッピングされてますね。


そう言えば、nil.to_s を "" でなく "nil" にする案もあったようだ。"" との衝突の問題が、"nil" との衝突の問題に変わるだけで、上記の問題の解決にはならないが。

トラックバック - http://d.hatena.ne.jp/otn/20110520

2011-05-03(火)

[]「さくらVPSbash-completion インストール 「さくらのVPS」bash-completion インストールを含むブックマーク 「さくらのVPS」bash-completion インストールのブックマークコメント

id:otn:20110501 で書いた通り、CentOSにはbash-completionパッケージ*1が含まれていない。Fedoraでこれに慣れていると無しではいられないので、インストールする。


Fedoraプロジェクトが、RHELCentOS向けに提供しているEPEL*2ライブラリに無いか探してみる。yumリポジトリに追加してしまうと、今後、意図せず標準でないパッケージをインストールしてしまう可能性があるので、それはしない。

EPEL/ja - Fedora Project Wiki の、「利用可能なパッケージ: 」欄の EPEL5 の x86_64 のページを開いて探すと、System Tools の中にあった。これをインストール

# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/bash-completion-1.2-4.el5.2.noarch.rpm

*1:標準のbashの補完機能だとファイル名を補完するが、bash-completionを入れるとコマンドに合わせて適切なオペランドを補完してくれる

*2:Extra Packages for Enterprise Linux

トラックバック - http://d.hatena.ne.jp/otn/20110503

2011-05-02(月)

[]「さくらVPSファイアーウォール設定 「さくらのVPS」ファイアーウォール設定を含むブックマーク 「さくらのVPS」ファイアーウォール設定のブックマークコメント

iptablesについて調べて*1設定してみた。初期設定ではiptablesプロセスは起動するが全部通しになっている。

方針は、

  • 中継は使わないのでDROP
  • 送信はとりあえず全部通しだが、ブロードキャストだけDROPしておく
  • 受信は必要と思われる物だけ通して、他はDROP
  • DROPしたものログに書いておく(件数制限も)

設定する方法として、

  1. iptablesコマンドで設定する
  2. ファイルに書いてiptables-restoreで読み込む

の二通りの方法があるようだが、コマンドは面倒なので後者のやり方で。


*filter
# INPUTチェーンのデフォルトは条件に合わない物は後でDROPするのでどっちでも良いがDROPと書いておく
:INPUT DROP [0:0]
# 中継はDROP
:FORWARD DROP [0:0]
# OUTPUTチェーンのデフォルトはACCEPT
:OUTPUT ACCEPT [0:0]
# ログに書いてDROPするというユーザー定義チェーンを作る
:DROPLOG - [0:0]
##### 入力パケットについて
# loopbackからはACCEPT
-A INPUT -i lo -j ACCEPT
# ICMPはとりあえずACCEPTにしておく。やっぱり止めるかも
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
# 通信途中の物はACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 開始パケットはsshとhttpとsmtpはACCEPT。sshのポート番号は22でなく変更した物を書く
-A INPUT -p tcp -m state --state NEW -m tcp --dport sshポートの番号 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
# それ以外の物はログに書いてDROP
-A INPUT -j DROPLOG
##### 出力パケットについて
# ブロードキャストはログに書いてDROP
-A OUTPUT -d 255.255.255.255 -j DROPLOG
-A OUTPUT -d 自分のサブネットのブロードキャストアドレス -j DROPLOG
##### ユーザー定義チェーンの内容
# ログに書くのは1時間に3件まで。メッセージ先頭に目印を付ける
-A DROPLOG -m limit --limit 3/hour -j LOG --log-prefix "DROP:"
# ログを書いた後DROP
-A DROPLOG -j DROP
# 反映する
COMMIT

上記をファイル /root/iptables に書いて、

# iptables-restore < /root/iptables

この状態で一通りテストする。間違えてsshセッションが切れた場合は、管理パネルのコンソールからリブートすれば元に戻る。

問題がなければ、起動時に読み込む設定ファイルに書き込む。これで次回起動からも設定が生きる。

# iptables-save > /etc/sysconfig/iptables

Dropbox攻撃

ログを見てみると、そばのサーバーから17500ポートUDPパケットが30秒ごとに2つずつ来ている。

グルと、Dropboxオプションによりそうなるようだ。

さくらへ、問い合わせフォームから要望を出しておく。

xx.xx.xx.xx から 30秒ごとに2回、ポート 17500 にUDPブロードキャストが来ます。

上記サーバーユーザに下記のメッセージを送ってください。

========================================

xx.xx.xx.xx の管理者殿

あなたサーバーから周りの他のサーバーに大量の無駄ネットワーク通信が行われています。

通信内容からDropboxの設定で「Enable LAN sync」をオンにしていると思われますが、そのオプションは、同一LAN内の他のコンピューター上のDropboxと同期するための物です。

あなたが xx.xx.xx.xx と同じLANに別のサーバーを借りていて両方のサーバーDropboxを動かしていて、その間で同期をしたい」

と言うことでない限り、無意味オプションですので、すぐにオフにして、他のサーバーへの迷惑を停止してください。

何が迷惑かというと、せっかくDROPしたパケット情報ログに書くことにしたのに、このパケットだらけになって無意味

2011-05-01(日)

[]「さくらVPS」いろいろ初期設定 「さくらのVPS」いろいろ初期設定を含むブックマーク 「さくらのVPS」いろいろ初期設定のブックマークコメント

管理パスワード変更

コントロールパネルのパスワードと、初期設定OSrootパスワードは同じだが、当然のことながら連動していないので、それぞれ変更。普段手で打ち込むことはないので、長い文字列にしておく。


一般ユーザを作る

# useradd ユーザ名
# passwd ユーザ名
# usermod -G wheel ユーザ名
# visudo で、"%wheel  ALL=(ALL)       NOPASSWD: ALL" の行を有効にする(パスワード無しでsudoできるよう)

このあたりまでは管理パネルのコンソールから


ssh設定

公開鍵認証にすることにして、かつポート番号を変える。

1. とりあえずTeratermを使って一般ユーザパスワードログイン

2. Teratermの設定>ssh鍵生成で、RSAにチェックして生成ボタン

3. パスフレーズ適当に入れて、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)をTeratermフォルダに保存

4. 専用接続用にTeratermショートカットを作る。リンク先は、

"C:\Program Files\teraterm\ttermpro.exe"
  ssh://ユーザ名:パスフレーズ@IPアドレス:ポート番号 /auth=publickey /keyfile=id_rsa

5. Linux側で

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ vi ~/.ssh/authorized_keys
 公開鍵ファイルの中身をコピペ。
$ chmod 600 ~/.ssh/authorized_keys

6. 一旦、ポート番号22で公開鍵でログイン出来ることを確認

7. /etc/ssh/ssh_configを修正してパスワードログインを不可に等

・・・
#Port 22  =====>の下に
Port ポート番号
・・・
#PermitRootLogin yes  =====>の下に
PermitRootLogin no
・・・
PasswordAuthentication yes =====>の行を変更
PasswordAuthentication no
・・・

8. コンソールからsshdを再起動(service sshd restart)


いろいろインストール

1. まずは yum update =====> Kernel含めていろいろアップデートされる

2. yum install screen

3. yum install bash-completion =====> 無い! yum list をみたけど無さそう。別途 rpm からインストール

4. yum install vim-common vim-enhanced

5. yum install "php53*" <===== PHPは、5.1.6 と 5.3.3 がある

6. yum install readline-devel mysql-devel openssl-devel sqlite-devel <===== RubyやGemsのインストールに備えて

7. Ruby1.9.2をソースからインストール <===== yumインストール出来るのは 1.8.5 !!


いろいろ設定

・/etc/sysconfig/i18nを修正
LANG="ja_JP.UTF-8"
・/etc/profile.d/local.sh作成
alias m=less
alias ls="ls -xvF"
alias vi=vim
alias eman="LANG=C man"

bind "\C-p:history-search-backward"
bind "\C-n:history-search-forward"

HISTSIZE=9999
HISTIGNORE="&: *" #直前の行と同じor行頭が空白の場合はヒストリに残さない
export HISTTIMEFORMAT="%m-%d %T "
shopt -s histappend #.historyファイルに追加書き

export LC_TIME=C #日付書式は英文で

addpath(){
    local w
    eval w=\$$1
    case ":$w:" in
    *:$2:*) ;;
    *) export $1="${w}${w:+:}$2" ;;
    esac
}
addpath LD_LIBRARY_PATH /usr/local/lib
・/etc/inputrc の末尾に追加
"\C-n":history-search-forward
"\C-p":history-search-backward
・/etc/screenrc の末尾に追加
escape ^z^z
vbell_msg ""
・/root/.gemrc を作成Rubygems用)
gem: --no-ri --no-rdoc