2008/03/16(日)FreeBSD 7.0R で csh が segmantation fault(SEGV)

2017/10/11 8:24 サーバ運営・管理
順次サーバOSを FreeBSD 7.0R に更新しているわけですが、 samba を使うために libiconv 1.12 をインストールして再起動したら、
ログインが全く出来なくなってしまった..orz

シングルユーザモードにしたら何とかシェル(csh)を使うことが出来たので、ログを見てみると、

kiew kernel: pid 13642 (csh), uid 1001: exited on signal 11 (core dumped)

のようなメッセージが出ている。
共有ライブラリ回りだというのは何となく判るが、何が問題なのか判らないので、先ずはOSをバイナリインストールしなおしてみる。。
上手く行かない。
試しにシェルを sh に変えてみると、core dump は出ない(使用できる)。

この現象は libiconv をソースコードからコンパイルにてインストールしてからでたので、libiconv と csh の関係を調べる。
ここしか有用な情報に突き当たらなかったが、やはり libiconv が問題の可能性が高いことに確信を得ました。

それでわ、、ということで、強引に /usr/local/lib 配下の libiconv.so.3,libiconvso.6 とそのリンクを削除し、その上で csh を起動してみる。そうすると正常に起動しました。これで libiconv.so の問題ということは判りました。

ここで、libiconv-1.12 をインストールしてみます。そうすると、 libiconv.so.6 がインストールされます。
こうすると、csh は再び segmantation fault を出し、ライブラリ依存する gmake を叩いてみると、'llbiconv.so.3 が 要ります' のようなメッセージを出す。

ということは、 csh は libiconv.so.3 を前提にしたバイナリパッケージ、ということが簡単に予測できます。
実際、packages にて libiconv-1.11_1 をインストールすると、 libiconv.so.3 がインストールされました。
この状態で csh を起動すると、segmantation fault は出ません。

原因は判ったのですが、今度は samba が上手く使えないのでないか?という疑問が、、
packages にて libiconv-1.11_1 をインストールした状態で、

$ iconv -l | grep MS
とすると、
kiew-lifekrnl% iconv -l | grep MS
40:CP1250 MS-EE WINDOWS-1250
41:CP1251 MS-CYRL WINDOWS-1251
42:CP1252 MS-ANSI WINDOWS-1252
43:CP1253 MS-GREEK WINDOWS-1253
44:CP1254 MS-TURK WINDOWS-1254
45:CP1255 MS-HEBR WINDOWS-1255
46:CP1256 MS-ARAB WINDOWS-1256
66:ARMSCII-8
85:MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS
92:CP936 MS936 WINDOWS-936

となり、使えそうな感じ。
わざわざソースコードから最新の libiconv 入れる行為が却って仇になる模様。。

pakages/ports 使うと、セキュリティバージョンアップの対応の遅さや、インストールディレクトリなどが環境に微妙に合わなかったりすることが結構多かったりして、使いにくいので、出来るだけ使わない方向でいるんですが、、

いまのところ、packages の libiconv-1.11_1 で samba 3.0.28a が一応利用出来ているみたいです。

2008/03/15(土)安全なサイトの作り方

2017/10/11 8:27 サーバ運営・管理
当方では、IPA(独立行政法人 情報処理推進機構) が定期的に発信するセキュリティインシデント情報なんかを電子メールで受け取っている訳ですが、そのなかに こんなものがありました。 → 「安全なウェブサイトの作り方 改訂第3版」を公開 〔PDFファイル〕

いつもWebサイトを利用したシステム構築を行う際は、セキュリティ対策には充分に検討して手抜かりの無い様にしているつもりだが、それでも想定外のことは起きるもので。。
上記資料では、9種類の主な脆弱性を挙げて対策手法の注意点などを挙げています:

1)SQLインジェクション(IPAに報告された全体の3割がこれらしい)
2)OSコマンドインジェクション
3)パス名パラメータ未チェック/ディレクトリトラバーサル
4)セッション管理の不備(セッションハイジャック)
5)クロスサイトスクリプティング(XSS、IPAに報告された全体の4割がこれらしい)
6)CSRF
7)HTTPヘッダインジェクション
8)メールの第3者中継
9)アクセス制御や認可制御の欠落

現状で注意が必要なのは、5)のクロスサイトスクリプティングですかね。
これははっきり言って、CGIなりで対処するだけでは不十分で、不審な振る舞いをしていないかどうか、偽サイトの有無のチェックとかにも目を光らせる必要があり、クライアントにも協力をしてもらわないといけません。

当方では過去に8)の脆弱性で 1999年に作成したCGI に関して一度外部から報告を受けて対処しただけです。このときは、 spam メールの発信基地になってしまっていたのでした。根本的原因の対処をしまし た。
他の脆弱性で報告を受けたことはありません。

特に1)、3)、4)、9)は、当方が 1998年に営利事業としてWebアプリケーション構築を始めてから注意している点で、今までに問題は起きていません。2003年以降は、1)~9)全て網羅の上で、構築を手がけているつもりです。

9)は、オペレート(運用)する人が全くの素人だと、いくら仕組みを作っても管理がずさんになりがちで、問題が起きる確率は高いのですが、幸いにも情報漏えいの事故の報告は無く、これはクライアントの皆さんが危険をそれなりに認知してもらっているのだろうと考えています。

2008/03/08(土)FreeBSD 7.0 における Cyrus-SASL インストール

2017/10/11 8:29 サーバ運営・管理
このライブラリをコンパイル・構築する際に、libtool という構築ツールを使用するようだが、FreeBSD 7.0 ではこれが悪さをして、Postfix で動作しない SASL 認証ライブラリが構築されてしまい、更に電子メール送受信が不可能になります。

google などで検索すると結構出てくるのですが、以下のようなログを /var/log/maillog に出します。

Mar 7 04:27:34 clione postfix/smtpd[5267]: warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms
Mar 7 04:27:34 clione postfix/smtpd[5267]: fatal: no SASL authentication mechanisms
Mar 7 04:27:35 clione amavis[2970]: (02970-07) (!)FWD via SMTP: -> , 451 4.
5.0 From MTA([127.0.0.1]:10025) during fwd-connect (Negative greeting: at (eval 103) line 442, line 37.): id=02970-07
Mar 7 04:27:35 clione postfix/master[3021]: warning: process /usr/libexec/postfix/smtpd pid 5266 exit status 1
Mar 7 04:27:35 clione amavis[2970]: (02970-07) Blocked TEMPFAIL, -> , Message-ID: <20080306184755.9175867841@clione.lifekernel.ne.jp>, mail_id: XLLnLafANNab, Hits: -, 1298 ms
Mar 7 04:27:35 clione postfix/master[3021]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
Mar 7 04:27:35 clione amavis[2971]: (02971-04) (!)FWD via SMTP: -> , 451 4.5.0 From MTA([127.0.0.1]:10025) during fwd-connect (Negative greeting: at (eval 103) line 442, line 34.): id=02971-04

SASL ライブラリが上手く動作しないと出る現象。
ところが本当の原因は /var/log/maillog をみたのでは駄目。

/var/log/messages を眺めましょう。すると直接的原因が判ります:

Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libsasldb.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libdigestmd5.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libotp.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libgssapiv2.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libplain.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: liblogin.la
Mar 7 05:37:33 clione postfix/smtpd[8462]: Could not find a dlname line in .la file: libldapdb.la

これは、shared ライブラリが構築されていないと出ます。
調査すると、どうも Cyrus-SASL に同梱されている libtool のバージョンが古過ぎて(1.35) 、FreeBSD 7.0 にが対応していないようです。

pakeages にて libtool-1.5.24 (2008/03/08 現在)をインストールし、configure 後に、libtool を削除して、pakages でインストールした libtool を使用するようにすると、あっさり解決しました。
具体的には、
# ./configure
# rm libtool
# ln -s /usr/local/bin/libtool

としてから、通常の make , make install をやれば良いです。

2008/03/07(金)DBD::Pg 関係 (Perl 5.8.8)

2017/10/11 8:30 サーバ運営・管理
最近、DBD::Pg のバージョンアップが頻繁です。
今日(3/7) 現在の最新は 2.2.2 。

FreeBSD + PostgreSQL 8.3.0 という環境ですが、DBD::Pg のバージョンによっては、
Segmentation fault を起こして、正常に動作しません。
当方で確認したのは、以下のバージョン組み合わせです。

FreeBSD 6.3R, DBD::Pg 2.1.3 ×
FreeBSD 6.3R, DBD::Pg 2.1.2 ×
FreeBSD 6.3R, DBD::Pg 2.1.0 ○
FreeBSD 6.3R, DBD::Pg 2.0.0 ○
FreeBSD 7.0R, DBD::Pg 2.2.0 ○
FreeBSD 7.0R, DBD::Pg 2.2.2 ○
FreeBSD 6.3R, DBD::Pg 2.2.2 ○ (2008/03/08 追記)

○は正常動作、×は Segmentation fault で使い物にならないバージョン。
いずれも Perl のバージョンは 5.8.8、PostgreSQL のバージョンは 8.3.0、DBIのバージョンは 1.602 です。

DBD::Pg が動作しない場合、最悪は DBD::PgPP で代用するという手段もあります。
機能的には大体同じですが、DBD::PgPP の方は PostgreSQL のライブラリに依存しない分、たぶん遅いでしょう。プラットフォームに完全に依存しないで済む、という大きなメリットもありますが。

2008/03/06(木)FreeBSD 7.0 における Postfix

2017/10/11 8:32 サーバ運営・管理
FreeBSD 7.0 においては、Postfix のバージョンは、2.5.1 でないと駄目なようです。
2.4.7 をインストールしようとしたら、make の最初の時点で

ATTENTION:
ATTENTION: Unknown system type: FreeBSD 7.0-RELEASE
ATTENTION:
*** Error code 1

Stop in /******/postfix-2.4.7.
*** Error code 1

Stop in /******/postfix-2.4.7.

のようなエラーになります。
2.5.1 では、無事に構築できました。

2008/03/06(木)FreeBSD 7.0 における Courier-IMAP

2017/10/11 8:31 サーバ運営・管理
Maildir 形式なPOP3/IMAP4 対応のまともな MDA といえば、Courier-IMAP が一番使い物になるので、
これを4年前から採用して、運用しています。
同様なものに Cyrus-IMAP があるが、これは格納形式が独自で汎用性が無いようなので、却下。

蛇足ですが、mailbox 形式でメールサーバに電子メールを格納すると、サーバ負荷が上がって、業務用には厳しいものがあります。

今回初めて、Courier-IMAP の 4.3.0 を試験的に採用してみたわけだが、構築テストで一部問題が、、

configure を行い、make(FreeBSD の場合は gmake) を行うまでは良いのですが、
その後の gmake check で、


*** [check-am] Alarm clock: 14

これが、waitlib のところで出ます。テストが中断してしまい、どうやっても駄目。
挙動見ると、一定時間待ったあとに、シグナルを発生するか、というテストのようだが、よく判らない。。
数時間あれこれ configure を変えたり、コンパイルオプションを変えても駄目だったので、
このテストを強制スキップするように Makefile 書き換えてみたら、他の部分はすんなりOK。
とりあえずインストールして実験用サーバにて様子見ることにしました。

ちょっと本番環境に適用するのは怖いものがあるので・・・

2008/03/02(日)ImageMagick の最新バージョン

2017/10/11 8:34 サーバ運営・管理
最近(2008/03/02 現在) の Imagemagick のバージョンは 6.3.8-2。
ところが、 6.3.7 あたりから FreeBSD 上で動作させると
/libexec/ld-elf.so.1: /usr/local/lib/libMagick.so.10: Undefined symbol "pthread_equal"....
のようなエラーが出て動作しない。

これは、FreeBSD 固有の問題らしいです。
スレッド動作させる場合、FreeBSD の場合は、libc ではなく、libc_r をリンクするように構築しなければならないはずなのですが、
ImageMagick の configure がおかしいので、そうならないのです。これがエラーの原因。たぶん libc をリンクしてしまっているんでしょう。

configure スクリプトを修正すればいいのですが、修正部分を調べるような余裕ないので、仕方なく

./configure --with-perl --without-threads

としています。たぶん、Imagemagick の動作は重くなるでしょうが。。

〔追記 2008/03/11〕
その後、FreeBSD 7.0R をインストールしたマシンで構築してみると、上手くいくようです。
もう少し様子見します。

2008/02/29(金)FreeBSD 7.0R リリース

2017/10/11 8:35 サーバ運営・管理
2/27 から 2/28 にかけて、メールサーバの1つがマザーボードごと逝ってしまったために、予備(というか、某社に返却しようかと思っていたんだが)のマザーボードとHDD、他(電源だけは自前で買って 来た)を交換する復旧作業のどさくさに紛れてです・・・

当初の予定より2ヶ月遅れです。FreeBSD 的には平均的な遅延。。
http://www.freebsd.org/releases/7.0R/announce.html
ここしか情報がない(最近、和訳してくれないですつーか)のですが、機械翻訳をかいつまんでみると。。。:

・サポートプラットフォーム= amd64,i386,ia64,pc98,powerpc
 近日中にsparc64 版もリリース予定
※通常のAT互換機ベースものの他に、昔のPC-9821シリーズとApple の PowerPC が使えます

・SMP環境において、FreeBSD 6.x 比で 350% から 最大 1500% のパフォーマンス向上。
 Linux 2.6.22 or 2.6.24 比で 15% の性能向上。
#Linux のパフォーマンステストはあまり信用できないけどね。ちょっと処理の中身聞いちゃうと。。
※SMP というのは、2つ以上CPUが乗っかっている機器を指します

・sun の(恐らく solaris のことだろう) ZFS ファイルシステムを実験的にサポート
・SCTP(Stream Control Transmission Ptotocol) の実験的サポート
※IP電話に使われることを意図している通信プロトコルですが、どの程度普及しているかは不明

・ワイヤレスLAN(IEEE 802.11) サポートの様々な改良
・バイナリアップデートをサポートする freebsd-update(8) が、新リリースアップデートに標準対応
・GUI環境べースを X.Org 7.3, KDE 3.5.8, GNOME 2.20.2 に変更
・同梱 GNU Cコンパイラを 4.2.1 に変更
・BIND を 9.4.2 に変更(6.x は bind 9.3系)
・nForce なイーサネットドライバが nve(4) から nfe(4) に変更。
これで昨年までに販売された多くの nForceなマザーには標準対応したと思われる

・OpenSSL が 0.9.7e から 0.9.8e に変更
・pf が 3.7 から 4.1に変更。これでパフォーマンスの大幅向上が期待できる

他にもいっぱいあるようですが、きりが無いので割愛。
今回は性能・機能向上に精力が注がれた感じで、安定度の方はどうか(現時点ではは使いものになるかどうかは、実際に使ってみないと判らない)という状況です。

2008/02/18(月)putty よりも簡単に SSL 通信を実現する stone

2017/10/11 8:36 サーバ運営・管理
恥ずかしながら、最近まで存在を知らなかったですが...orz
やはり、日本人開発者による日本語のドキュメントはいいです。 → http://www.gcd.org/sengoku/stone/Welcome.ja.html 〔Simple Repeater `stone' 〕

FreeBSD では、package や ports でインストールできます。(個人的には余計な起動ファイルまで入ってしまうのですが orz)
Windows 98/2000/NT/XP 版もあるようです。

SSL 通信するためには、自己署名の証明書(いわゆるオレオレ証明書)の用意が最低限必要。
これは随所に提示されているので、割愛するとして、、、

コマンドラインでも設定できるが、通常は、設定ファイルを作成し、それを指定して起動するほうがよいです。
単純に以下の例を想定して簡単にまとめてみると、、

stone.png

こんな感じです。
クライアント側がサーバA、サーバ(中継も可能)側が、サーバB。
中継(簡単なゲートウェイ)もでき、こうすれば、外部からLAN内のサーバにアクセスさせることも可能。
こういう構成のセキュリティ対策は、またべつの話なので、ここでは割愛します。

この設定で、サーバAからサーバBを経由して、サーバC、D、E,Fへアクセスが出来るようになります。

設定のポイントは、アクセスしたいサーバの代わりに localhost の特定ポート経由で(どのアプリケーションも使っていない空きポートにする必要がある)をアクセスすることで、 stone を通して目的のサーバ、ポートをアクセスするようにする、ということ。

上図の場合、サーバAがlocalhost:9001 へアクセスすることで、stone が サーバBのポート3231へ接続をし、サーバB側では、ポート 3231 へやってきた接続を、サーバCのポート1230 へ転送するという動作を行います。
サーバB自身へ接続したい場合は、例えば、サーバCの代わりに localhost とすればサーバBでは、localhost:1230 で サーバA localhost:9001 との通信が可能になるわけです。
SSH トンネルと同じようなことをやっているわけです。

サーバBからサーバAにstone を使って接続する場合は、設定をもう一対用意するのが簡単でしょう。