2009年9月16日水曜日

ユーザ権限でgemをインストール

gemをインストールするにあたって、ユーザ権限でインストールしている。
ユーザ権限でインストールを行なうと、~/.gem配下にインストールされる。

pure rubyのgemの場合には問題無くインストール出来るが、sqlite3-rubyをイ
ンストールする際に、2点程注意点があるので、その備忘録。

なにも考えず、以下のコマンドだとインストールエラーとなった。

gem install


結論から言うと、以下のコマンドでインストール出来た。

env RB_USER_INSTALL= gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


そもそも、sqlite3-rubyはpure rubyのコードでは無く、C言語のソースをコン
パイルしてOSネイティブのライブラリを作成して、インストールされている。

sqlite3-rubyについては、extconf.rbを実行することで、Makefileを作成して、
コンパイルを実施している。他のOSネイティブのライブラリを用意するgemも、
多くはextconf.rbを使用していると思われるので、同様の手順で実施可能であ
ろう。

ライブラリの指定


対象gem固有のextconf.rbオプションの設定について。

gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


gem installをそのまま指定した場合、sqliteのライブラリを見つけることが
出来なかった。~/.gem/ruby/1.8/gems/sqlite3-ruby-1.2.5/README.txtにやり
かたその物が記載されていたので、それを参考に実施。

gem installの引数に、「--」で区切って、extconf.rbに渡す引数を指定する
のがミソのようだ。

ユーザ権限でインストール


extconf.rbを用いてユーザ権限でインストールする方法について。

env RB_USER_INSTALL= gem install 。。。


FreeBSDのextconf.rbはデフォルトではインストール時に、インストールファ
イルをroot権限に変更しようとする。その為、ユーザ権限でインストールしよ
うとしても、ファイルをroot権限に変更出来ないのでエラーとなる。
環境変数 RB_USER_INSTALL を設定してあげれば、ユーザ権限でインストール
が可能になるので、コマンドラインでenvを用いて指定してあげる。

2009年9月13日日曜日

mv: set flags (was: 00000000): Invalid argument

security run outputエラー


FreeBSDで日々送付されるsecurity run output内に、気になるメッセージ
が。。。

mv: /var/log/setuid.today: set flags (was: 00000000): Invalid argument


どうも、ZFSのバージョンによるが、UFS領域からZFS領域にファイルをmvする
とこのメッセージが発生するようです。

私の環境は、ルートがUFSでそれ以外はZFSという設定で、security run
output内のcheck_diff関数で/tmp(UFS)から/var/log(ZFS)にファイルをコピー
するので、上記のメッセージが出ている。

FreeBSDでは、zfsのバージョンは現在3、zpoolのバージョンは現在13となってい
る。私の環境だと、zfs:1/zpool:6となっていて結構古い。これが原因のよう。

(参照) http://www.mail-archive.com/freebsd-stable@freebsd.org/msg104840.html

とりあえずエラーは出るけど、動いてはいるようなので、無視してます。

zfsやzpoolのバージョンを上げれば問題無いみたいだから、上げるのか吉かと。


このmvはどこで呼ばれている?


mvは/etc/periodic/security/security.functionsのcheck_diff関数で使用さ
れています。
check_diff関数は/etc/periodic/security/配下の各ファイルで使われている
みたい。

2009年9月12日土曜日

bsnmpd

bsnmpdツールのインストール。



net-mgmt/bsnmptoolsをインストールすることで、bsnmpwalkを使えるようになる。

/etc/snmpd.configの編集


方針としては、「trapやwriteを無効」「MIBは可能な限り有効」。

@@ -6,18 +6,18 @@
#
# Set some common variables
#
-location := "Room 200"
-contact := "sysmeister@example.com"
+location := "mobile"
+contact := "秘密"
system := 1 # FreeBSD
-traphost := localhost
-trapport := 162
+# traphost := localhost
+# trapport := 162

# Change this!
-read := "public"
+read := "秘密"
# Uncomment begemotSnmpdCommunityString.0.2 below that sets the community
# string to enable write access.
-write := "geheim"
-trap := "mytrap"
+# write := "geheim"
+# trap := "mytrap"

#
# Configuration
@@ -50,9 +50,9 @@
begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4

# send traps to the traphost
-begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
-begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
-begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)
+# begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
+# begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
+# begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)

sysContact = $(contact)
sysLocation = $(location)
@@ -74,10 +74,10 @@
#
# Netgraph module
#
-#begemotSnmpdModulePath."netgraph" = "/usr/lib/snmp_netgraph.so"
-#
-#%netgraph
-#begemotNgControlNodeName = "snmpd"
+begemotSnmpdModulePath."netgraph" = "/usr/lib/snmp_netgraph.so"
+
+%netgraph
+begemotNgControlNodeName = "snmpd"

#
# pf(4) module
@@ -88,10 +88,10 @@
# Host resources module
# This requires the mibII module.
#
-#begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"
+begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"

#
# Bridge module
# This requires the mibII module.
#
-#begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"
+begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"


bsnmpdの起動。


/etc/rc.confに「bsnmpd_enable="YES"」の行を追加して、

# sudo /etc/rc.d/bsnmpd start

を実行することにより、起動。

bsnmpwalkでの動作確認


OIDを文字列にする為に、「-i」オプションでdefファイルを設定。
絶対パスで指定するのが基本みたいだけど、デフォルトでは
「/usr/share/snmp/defs」を検索してくれるので、ファイル名のみを「-i」で
複数する。

bsnmpwalk -i atm_freebsd.def -i hostres_tree.def -i pf_tree.def -i atm_tree.def -i mibII_tree.def -i tree.def -i bridge_tree.def -i netgraph_tree.def -s ”秘密”@localhost


現在有効なOIDの行数を確認すると、9056行だった。

hrProcessorLoad(1.3.6.1.2.1.25.3.3.1.2)


どうもhrProcessorLoadは上手く取得出来ない様子。
(参考) http://www.mail-archive.com/freebsd-stable@freebsd.org/msg100522.html

ここから特に話は進んでない様子。

2009年7月5日日曜日

/usr on zfs

FreeBSDのroot以外をzfsで構築している。
昨日(2009/07/05)のcsupでソースをアップデートした所、
make installworldでこけた。

理由はinstallコマンドでschgが設定される為エラーになった。
zfsはFreeBSDのファイルフラグに対応していない為。

make installworld -DNO_FSCHG

でファイルフラグが付くのを回避出来た。
(参照) /usr/share/mk/bsd.lib.mk と bsd.prog.mk

2009年1月26日月曜日

Rubyでファイルの暗号化(RSA)

rubyにて、opensslライブラリを用いて、文字列の暗号化。
公開鍵で暗号化して、秘密鍵で複合化。

webからはデータの入力だけにして、確認は人手で別途実施する場合などに使えるかと思います。

個人的には、南京錠で言うところの、錠(ジョウ)が公開鍵、
鍵(カギ)が秘密鍵だと理解しているので、それも追加しながらコメント

require 'openssl'
include OpenSSL::PKey

rsa = RSA.generate(2048)
これで、RSAを作成出来た。

rsa.public? # => true
rsa.private? #=> true

rsaには、公開鍵(錠)と暗号鍵(鍵)が含まれている。

公開鍵(錠)は、そのままテキストで取り出し。
public_key = rsa.public_key.to_s

暗号鍵(鍵)は、AESで暗号化し(パスワード付け)て取りだし。
private_key = rsa.export(OpenSSL::Cipher::Cipher.new('aes256'),
'password')

さて、ここで特定の文字列を暗号化してみる。対象はこれね。
target = 'hogehoge'

まずは、public_keyから公開鍵(錠)のrsaオブジェクト作成
pub = RSA.new(public_key)
pub.public? #=> true
pub.private? #=> fale

さあ、暗号化。
enc_target = pub.public_encrypt(target)
これで、targetを暗号化出来ました。
たしかに、’hogehoge’という文字列はみるかげもありません。

ちなみに、enc_targetはStringのようです。
enc_targe.class #=> string

では、次に複合化します。先程とは逆に秘密鍵(鍵)のrsaオブジェクト作成
private = RSA.new(private_key,'password')
こちらは、錠と鍵の両方を持っているようです。
private.public? #=> true
private.private? #=> ture

private.private_decrypt(enc_target) #=> 'hogehoge'

おおお、複合化出来ました。

2008年9月22日月曜日

auditを使用してみる。

結局は http://paranoid.dip.jp/kaworu/2007-06-04-2.html の情報の焼き直しかな。
あと、sunのページのauditの情報を見るのも役になったです。

auditを有効にするには、/etc/rc.conf で、auditd_enable="YES" を設定してやる。
/var/audit/も作成してあげないとダメだったかも(ディレクトリはaudit_controlで設定される)。

設定ファイルは、/etc/security/ 配下にある。

= auditとして監視するクラス(?)の記述ファイル
audit_class
audit_event

= audit対象の設定ファイル
audit_control
audit_user

= audit(デーモン?)に問題があった場合のログ出力先
audit_warn

多分、audit_eventにイベント一覧があって、各行の最後のコロン(:)以降にクラスを設定する。クラスは、audit_classに記載のある物でないとNG。

で、このクラスに対して、audit_controlやaudit_userで、監視する内容を設定する。
audit_controlはデフォルトの監視クラスや、auditとしての振舞を設定。audit_userには、各ユーザ毎の監視クラスを個別に設定。
ここで指定した監視クラスに引っかかった内容が、audit_controlのdirディレクトリ(デフォルト /var/audit/)配下のログファイルに出力される。
/var/audit/日付.not_terminatedが多分開かれているファイルで、auditを停止したり、ログがローテートされる(タイミングは不明。auditの停止だったっけ?)と、not_terminatedが削除されたファイルが作成される。

audit_warnは、よくわからないけど/var/auditのあるストレージがあふれたりしたら、この内容にそってログが出力されるのだと思われる。

で、ログを見るコマンドが、 praudit。 引数にファイルを指定してあげれば、監視によってログされた内容を見ることが出来る。
praudit /var/audit/20080921200406.not_terminated

zfsが遅かった問題

今回 buildworldをし直したらな、問題無いようす。
多分/usr/obj/配下を削除して、buildし直したからだと思われる。

もしかしたら、OSのソースの変更があったかもしれないけど、以前のOSのソースを残していないので、今と昔のソースの違いがわからない。時刻を手掛かりにcvswebなどを見ての変更されていないので、ビルドのしかたの問題なのでしょう。

現在のuname -a の内容は以下。

7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #0: Mon Sep 22 04:14:43 JST 2008 root@:/usr/obj/usr/src/sys/GENERIC i386