ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

FreeBSD

SMART の有効化

smartmontools をインストールして、HDD の SMART を確認しようとしたら $ sudo smartctl -a /dev/ad1 SMART support is: Disabledあれ?と思って $ sudo smartctl -s on -a /dev/ad1これで問題なく動作。 でも再起動するたびに -s on しなければいけなくて…

jail 内部で ports に与えるコンパイルオプション

ports のオプションで設定できない項目、例えば apache の SUEXEC_DOCROOT などを設定したい時、通常は make.conf に設定を書きます。Web で検索するとこう書くらしいです。 .if ${.CURDIR:M/usr/ports/www/apache*} SUEXEC_DOCROOT=/path/to/pages .endifと…

ntpd の使い方

まずは /etc/rc.conf に ntpd を有効化する記述を加えます。 ntpd_enable="YES" ntpd_sync_on_start="YES"ntpd_sync_on_start は、起動時に一度時刻を同期する設定で、 ntpdate と併用するよりはこっちの方がいいらしいです。 で、/etc/ntp.conf に設定を書…

ipv4_addrs で NIC の設定

かつて、NIC に割り当てる IP アドレスは /etc/rc.conf に以下の記述を書いていました。 ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 192.168.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 192.168.1.…

ipfw の設定を外部に書く時の注意点

ipfw の設定をするときに、/etc/rc.conf に firewall_enable="YES" firewall_type="/etc/ipfw.rules" firewall_flags="-p /usr/bin/m4"こんな風に書いて置くと、ルールを /etc/ipfw.rules に # IP addresses define(HOST_IPv4, `192.168.1.254') define(SUBN…

ezjail で複数 IP を使う方法

/usr/local/etc/ezjail/hoge に仮想マシン hoge 固有の設定が入っているので export jail_hoge_ip="192.168.1.3,192.168.1.4" こんな風に IP をカンマ区切りで列挙すると、複数 IP が中から見えるようになります。 もちろん、こんな風にIPv6 アドレスを書く…

su のセキュリティを少し向上させる tips

su コマンドって、パスワードさえわかればどのユーザにでもなれて便利なんですが、 その半面、サーバ内のユーザがどれか一つでも割れると被害が拡大する危険があります。 jail 内システムのように、そもそも root に昇格する必要がない場面などでは無効化し…

vfs.devfs.rule_depth の謎

ある日、sysctl -a を眺めていると面白そうなパラメータを見つけた。 vfs.devfs.rule_depthdevfs らしいからカーネルのソースを読んでみる。 このパラメータが導入されたのは src/sys/fs/devfs/devfs.c の 1.16 の時。コミットログをざっくりと意訳するとこ…

jdk のコンパイルで気をつけること

# umount /procprocfs がマウントされていると、libproc.a がないとか言われてコンパイルに失敗する。ref: http://ijovanni.blogspot.com/2009/06/could-not-find-libjavaso.html 最近の ezjail は各 jail で procfs をマウントしてくれるようなので、 ezjai…

net-snmp の smux を無効にする

smux なんて要らないよ!不要ポートは閉じてやる! というわけで、/etc/rc.conf の snmpd_flags を書き換えます。 snmpd_flags="-a -I -smux"これで smux のポートが閉じられます。 $ netstat -an | grep LISTENよし、消えた。 9/16 1:07修正 わざわざ sudo…

ポートの持ち主はだれ?

余計なポートが開いてるのはセキュリティ上よろしくない上に気持ち悪い。 というわけで開いてるポートを確認。 $ netstat -an | grep LISTEN tcp4 0 0 *.199 *.* LISTENあれ?これは何?誰が LISTEN してるの?? というときは sockstat で調べます。 $ sock…

chkrootkit 誤検出の巻

chkrootkit なる、ルートキットの検出ツールがあるということで、 しばらく前に試しにインストールしていたものを、久しぶり実行してみた。 Possible t0rn v8 \(or variation\) rootkit installed …… !? えっ!?と思って手元の Windows マシンで chkrootk…

ipfw で動的ルールを設定する

ipfw 関係の web ページを見ていると、 「keep-state と check-state を使って...」 みたいな書き方がされていて、 「もしかして check-state って必須?でも keep-state 単体でも動いてる…」 と思ってしまったので調べてみました。 結論から言えば man ipfw…

PostgreSQL のデータベースのバックアップ

諸事情で必要になったのでメモ。 $ pg_dump DBNAME > db_backup.sqlこれで、データベース DBNAME の中身が SQL 文の形式で まるっとファイルに吐き出されます。 リストアするときは $ psql DBNAME < db_backup.sqlで SQL スクリプトとして食わせればOK。 中…

OpenVPN のブリッジ設定

FreeBSD 6.x までは bridge.ko を使っていたんですが、 7.x からは if_bridge.ko を使うそうです。 うちは NIC が fxp0 なので、/etc/sysctl.conf で net.link.ether.bridge.config="tap0,fxp0" net.link.ether.bridge.enable=1これが bridge を使った古いや…

RAM-Disk の作り方

FreeBSD 7.x になって RAM-Disk の作り方が変わったみたいです。 まずは /etc/rc.conf に mdconfig_md0="-t malloc -s 100m"と書き足して、/etc/fstab で /dev/md0 /mnt/memdisk ufs rw 0 0とマウントポイントを指定します。 これで再起動すれば RAM-Disk が…

6.3-R から 7.2-R へのアップグレード with ezjail

freebsd-update を使うと major version をまたいでバージョンアップができるらしい! ezjail なら ezjail-admin update でユーザランドを更新して ports を再コンパイルするだけでいいのかも!? というわけでやってみました。 参照: http://www.daemonolog…

ruby-1.8.7.160,1 は地雷。160_2 以降推奨。

FreeBSD のパッケージ管理には portupgrade を使うのが(少し前まで)メジャーでしたが、 これ、実は ruby スクリプトなんです。 portupgrade, portversion, portinstall など、便利なコマンドがまとまっていたんです。 で、ruby-1.8.7.160,1 のバグによって…

portmaster のマニュアル一部訳

マニュアルを一部だけ訳してみたので公開。 DESCRIPTION 解説 The portmaster utility is a tool for updating your ports. It uses no external database to track what you have installed. Rather it uses the existing ports infrastructure, including …

portmaster -L

現在インストールされているパッケージの一覧と、 その更新の有無をリストアップします。 portversion の代わりですね。 # portmaster -L ===>>> Root ports (No dependencies, not depended on) ===>>> libtool-1.5.26 ===>>> perl-5.8.9_3 ===>>> portmast…

いまさら始める IPv6 with 6to4

もう散々話題になって忘れられかけている IPv6。 いまさらながら IPv6 を開通させようといろいろ実験中。 今回は 6to4 を使って接続するときのためのメモ。 そもそも 6to4 は IPv4 アドレスから IPv6 アドレスを生成して使うものなので、 面倒なアカウント生…

FreeBSD の起動スクリプト

先日の記事の続き。 http://d.hatena.ne.jp/Hossy/20090218#p1 The following key points apply to old-style scripts in /usr/local/etc/rc.d/: Scripts are only executed if their basename(1) matches the shell globbing pattern *.sh, and they are ex…

解決!PHPのバグ

ここ一か月近く追い続けた PHP の signal 6 ( SIGABRT ) のバグについて。 先日、日本の PHP-dev ML に投げたところ以下のレスをいただきました。 よくよく見てみたら、apache SAPIでは下記のマクロの中でシグナルをブロックするハンドラに飛ばしていたので…

PHP のバグ 〜後日談〜

free の recursive call は解消されたけれども... httpd in free(): error: chunk is already free [Thu Feb 26 09:57:03 2009] [notice] child pid 6589 exit signal Abort trap (6) httpd in free(): error: chunk is already free [Thu Feb 26 10:53:03 2…

続々・PHP のバグ 〜俺の忘れもの編〜

前回の PHP パッチ(&APIフック)でしばらく放置。 特に問題は発生しなかったのでフックの仕掛け方を改良。 # gcc -fPIC -shared -o malloc.so malloc.c # setenv LD_PRELOAD /full/path/malloc.so # /usr/local/etc/rc.d/apache22 restart マシンを再起動…

PHP のバグ 〜回避パッチ編〜

アプローチとしては2点。 LD_PRELOAD を用いて malloc(), free(), realloc() 関数をフックしてシグナルブロック zend_error() から戻った後に exit() で終了 前者だけだと Zend のヒープ管理が破綻して zend_mm_heap corruptedこんな funny なメッセージが出…

PHP のバグ ( httpd in free(): recursive call )

というわけで、httpd が SIGABRT で死ぬ原因を探しました。 dmesg がこんな感じ。 pid 49335 (httpd), uid 80: exited on signal 6 pid 61486 (httpd), uid 80: exited on signal 6 pid 61530 (httpd), uid 80: exited on signal 6 pid 62145 (httpd), uid 8…

snmpd がなぜか起動しない

表題の通り、FreeBSD 起動時に自動で起動するはずの snmpd が起動しない。 しかもコンソールから $ sudo /usr/local/etc/rc.d/snmpd start って打つと正常に起動する。 おっかしーなー…… と今までずっと思っていたのですが。 何のことはない、/usr/local/etc…

SASL で LDAP を使うとき

以上のことから、LDAP を使うときはいろいろ手がある。 auxprop で auxprop_plugin: ldapdb にする saslauthd -a ldap でやる saslauthd -a pam にして pam_ldap を経由する ただし、CRAM-MD5 とか DIGEST-MD5 を使うためには SASL がパスワードを平文で手に…

SASL の認証

SASL はどうやら UserID-Password の認証を行うライブラリのようなものらしい。 認証を行うプログラムから SASL 経由で認証を行う、と。 このときに、PAM 同様にアプリケーション名が SASL に送られるそうで、 それによって認証の設定ファイル /usr/local/li…