今日は、ダニエル・ジュリアス・バーンスタインの誕生日(1971)
本名よりも、略称である DJB のほうが有名です。
…って、誕生日 1971年? 僕より年下だとは知らなかった!
10年くらい前に DJB の存在を知った時点で大学教授だったから、もっと年配だと思っていたよ。
どんだけ天才なんだ…
と、興奮気味に書き出してみましたが、UNIX で有名なソフト群を作った人です。
ただし、彼自身は暗号の専門家であり、ソフトウェアは専門ではありません。
でも、コンピューターがわかるから大学でコンピューターネットワークの管理をやらないといけなかった。
良くある話です。
そうしたら、四六時中ソフトウェアの脆弱性が見つかったり、新機能が追加されたりでアップデート作業が必要になった。
自分の研究時間を奪われることになった。
じゃぁ、俺がアップデートの必要なんてないソフトを作ってやる! と作ったのが、一連のソフト群。
UNIX のソフトで過去に見つかった「脆弱性」をよく研究し、脆弱性が出やすいポイントを「回避する」ように作られています。
WEB/FTP サーバーも作ったけど、これは非常に低機能なので誰も使ってないと思います。
メールも DNS も、ネットワークの必須機能。
しかも、すでに枯れた技術で、これから大きな新機能が追加されることもなさそうです。
これらを、脆弱性がないようにきっちり作り込んだ。
決して高機能ではありません。むしろ低機能。
ただし、高性能です。
枯れた技術なので、機能追加アップデートは不要です。
十分高性能なので、性能を上げるアップデートはありません。
そして、脆弱性はおそらく出ないので、セキュリティアップデートも不要です。
これで、アップデートのない、サーバー管理が実現できます。
DJB のソフト群は、非常に独特の構成をとっています。
一般的なソフトとは違いすぎて、管理概念になれるのが少し大変。
だから、DJB のソフトは嫌い、という人も多いです。
でも、この独特な構成は、セキュリティを高めるためです。
まず、「メールサーバー」と書きましたが、これだけで大きく分けて2つのソフトになっている。
メールを「受信する」のと「送信する」ので、別のソフトになっているのです。
そして、それぞれはさらに細かなソフトに分かれています。
プログラムが複雑化するとバグが出やすく、脆弱性の元になるため、動作を最小単位にまで分割しているのです。
これらの小さなソフトは協調して動きますが、決してお互いを信頼しません。
自分の任された仕事はきっちりやるけど、ほかのソフトが正しく仕事をしているとは信じないのです。
これにより、どこかに脆弱性が発生しても、全体として致命的な事態にならないようになっています。
そして、「他を信用しない」ために、それぞれのソフトが別の権限を持つようになっています。
UNIX では、権限は「ユーザーアカウント」で表現されるため、メールサーバーを入れるだけで6つのユーザーアカウントの登録が必要となります。
さらに、設定ファイルも細かく分割されます。
これは、分割されたソフトごとに別々の設定が必要、ということもあるのですが、「構文解析」、特に「文字列処理」という脆弱性の元となりやすい部分を無くすためでもあります。
構文解析というのは、「文章を読む」ということ。
普通設定ファイルには、いくつもの設定項目が書き込まれます。この文章を読み取る必要があるのですが、文章を読むという処理は結構複雑で、脆弱性を持ちやすいのです。
DJB のソフトでは、設定ファイルは「ファイル名」が設定項目で、中身が設定の値です。
そのため、構文解析の必要がなく、こうした脆弱性が入り込む余地がありません。
また、また、人間のミスによる「脆弱性」をなくす目的もあるようです。
一般的に、設定ファイルは1つであることが多いのですが、そのために、うっかり書き間違えると関係のない機能にまで影響が及ぶことがあります。
こうした「うっかり」をなくすために、設定1つごとに1ファイルなのです。
でも、この方法だと小さなファイルをたくさん作る必要があります。
もう、何から何まで分割したがる。
アカウントを6つも使い、設定ファイルだけで十個以上。
ここまでややこしい設定を要求しておきながら、できることは「UNIX のローカルアカウントへの配信」だけです。
普通のメールサーバーよりも低機能。
別マシンへ配送するための POP3 サーバーなどは、別途入れる必要があります。
さらに、このメールソフトは、動作ログを「標準出力」に吐き出します。
ファイルに残したいなら、標準出力をファイルに残すためのソフトを、別途入れる必要があります。
ソフトの動作を最低限の機能に絞って脆弱性を失くす、という方針なので、何をやるにしても「それは別のソフトで」となる。
DNS も同じ調子。
DNS って、「世界中の情報を調査する」ための機能と「自分の情報を提供する」機能の、2つに分かれている。
ところが、最初に DNS を実装した BIND では、この2つの機能をごちゃまぜに考えてしまって(最初はこれが別機能だという認識もなく)、同じポートで提供している。
#ネットワークの仕組みで、1つの「アドレス」に、受付窓口である「ポート」が複数あります。
ポートはサービスごとに異なっていて、メールなら 25、WEB なら 80 、というような番号で指定されます。
DNS は 53 番なのですが、この1つだけで「情報調査」と「情報提供」の両方を兼ねているのです。
DJB の作った DNS では、別の機能は別のソフトです。
でも、1つのアドレスで同じポートを使う2つのサービスは提供できない。だから、別の IP アドレスを使う必要があります。
なんと! サーバー1つ入れるために、1つのマシンに2つの IP アドレスが必要となってしまう。
これで困ってしまう人も多くて、DJB の DNS サーバーは、メールサーバーよりさらに不人気。
ここではインストール方法を書きたいわけではないので、詳細は書きません。
でも、ちゃんとおかしなことをしないで設定できる。設定できないと思うなら、管理者としての知識が浅いだけ。
世の中の「インストール方法」を書いたページにも、間違っているものが多数見受けられます。
一見動いているように見えるけど、外部 DNS サーバーを参照しているだけで、インストールした意味がないとかね。
ハッカー文化を表現する言葉に KISS というものがあります。
Keep It Simply, Stupid
「簡単で馬鹿なままにしておけ」、または「そのままにしとけ、馬鹿め」の意味とされます。
これ、結局は理系文化です。
シンプルで応用が利くものが良いのであって、「この機能を追加したら便利だろう」とか考えるのは浅はか。
大抵の「便利なもの」は、よく使う機能に特化したもので、応用は利きにくいのです。
その意味で考えると、UNIX でよく使われるメールサーバの Sendmail や、DNS サーバの BIND は、高機能になりすぎている。
肥大化して、シンプルではありません。
DJB は、KISS の精神で機能をバラバラに分解した。
Sendmail が1本のソフトでやっていることを、6本に分割した。
しかも、この6本を動かしてもまだ低機能で、ログを残すこともできない。
もちろん、「組み合わせられる」ことが KISS の良さですから、DJB のソフトも組み合わせて応用がききます。
ログを残すことはもちろん可能だし、POP3 対応にもできる。
別のソフトと組み合わせて、メールが来た時だけサーバーが起動するようにしてメモリを節約したり、万が一にもサーバーが停止した場合には自動再起動、なんてこともできます。
DJB 自身の手による「メーリングリストサーバ」もあって、もちろん簡単に組み合わせられます。
と書くと DJB のほうが優れているように見えますが、実態はそうでもないでしょう。
上に書いたように「組み合わせれば」いろいろできる、というのは、使う人に高度なプログラム能力を求めているのと一緒です。
組み合わせるって、「プログラムする」ってことですからね。
実際、各ソフトがどういう役割で動いているのか、副作用として何が起こるのか、ちゃんと理解しないと設定ができません。
先に書いたように、DNS ソフトの設定では、失敗している例が多数「設定例」として公開されている。
万人が使えるソフトではありません。
だけど、一度理解して設定してしまえば、非常に信頼性が高い。
アップデートなどの面倒を見る必要はないし、停止することもまずありません。
便利だけど使うには高度なスキルを必要とする、という、非常に癖の強いソフト群なのです。
同じテーマの日記(最近の一覧)
関連ページ
CentOS 7 上の ndjbdns の落とし穴【日記 16/10/10】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |