2017-11-26

"標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド" 有限会社ナレッジデザイン 著

千ページ近くもある分厚さ!OS で熱くなりたければ、このくらい厚くないと...

一つの OS に初めて触れるにはリファレンス的な存在が欲しいが、いくら Linux が無料とはいえ、こうして参考書を漁れば金がかる。それでも、強制的でないところがいい。人間の本質とも言うべき多様性ってやつは、小さな知識、小さな経験、小さな感情、そして、小さな思考の集合体として形成される。しかも、この集合体はあらゆる方向に選択肢の網を張り、自由精神とすこぶる相性がいい。どの文献を選ぶかは、自分の知識レベルに合わせればいいだけのことで、動機は極めてシンプルだ。シンプルな部品を組み合わせて多様な処理をする... これぞ、Unix ライクな世界と言えよう。まさに本書には、部品的な情報が満載!これをヒントに、後はググれば大抵の情報は入手できそうである...

"Unix comes with a small-is-beautiful philosophy. It has a small set of simple basic building blocks that can be combined into something that allows for infinite complexity of expression."
 - Linus Torvalds -

さて、Fedora Core の時代から愛用してきた Fedora だが、システム入れ替えのために CentOS へ鞍替えすることに。というのも、バージョン 2X あたりからであろうか、GUI 環境の不安定さが目立つようになった。ハードウェアとの相性か。
Fedora の魅力は、なんといってもパッケージの豊富さ!最新版のカーネルに触れることもでき、そのために distro の実験台とも囁かれ、実験好きにはたまらない。
しかしながら、Unix の本来の姿は、安定性の方にあるのだろう。厳密には、Linux は Unix とは認められていないが、Unix ライクであることに違いはない。
そこで、安定感抜群との噂の CentOS というわけである。なるほど、RHEL のクローンと呼ばれるだけのことはある。ただ、パッケージ群がちと寂しい。それでも、あちこちから拾い集めたり、ソースからビルドしたりすれば、なんとかなりそう。systemd の採用は CentOS 7 からのようだが、Fedora で経験済みなので、まったく違和感なし。dnf が yum に戻って、ちょっと古い Fedora ってな感じ。これを機に、Linux の勉強をやり直してみるのも悪くない...

ところで、本書にはサーバ監視に関する情報が満載だというのに、なぜか?SNMP に関する記載が見当たらない。時代の流れからすると、https + 暗号化の方向であろうが、SNMP にも v3 でセキュリティ機能も強化されている。だが本書は、OpenLMI について触れていて、どうやら WBEM ベースが流れのようである。
結局、酔いどれネアンデルタール人は、snmpwalk コマンドを叩きまくって、霧に包まれたプロトコル空間を歩き回ることに。リュケイオンの学徒のごとく。だから逍遥する学派などと呼ばれる。いや、彷徨する学派か。いやいや、崩壞する学派か。行き詰まると... 自分でやれない事は素直に諦めな!... とメフィストフェレスが囁いてくる。誰かがヒントを与えてくれたとしても、手取り足取り教えてくれる者はいない。だから自由なのだ。自由人とは、自己能力の縄に縛られながらも、それを快感にできる人のことをいうのだろう。きっと、M に違いない...

1. 趣味が昂じた世界
当初、リーナス・トーバルズ氏は、自分の名前を OS につけるのは利己的と考え、Freax と名付けたそうな。自由を匂わせる名である。これを友人のレムケ氏が気に入らず、Linux という名を与えたとか。リーナスも最終的に同意し、冗談まじりにこう語ったという。
「Linux は良い名前だし、その名前を付けたことを僕は誰か他人のせいにできる。今もそうしているようにね...」
商用 Unix は高価で一般ユーザにはなかなか手が届かない。そこで、386 アーキテクチャ用にチューニングを試みてきたのが、Minix や Linux といった Unix ライクな世界である。
Linux の前身 Minix は、マイクロカーネル。つまり、ファイルシステムやメモリ管理は、それぞれ独立したプロセスとしてカーネルの外に置かれ、カーネルは割込み、プロセス管理、メッセージなどの最小限の機能のみを持つ。この方式は、プロセス間のメッセージ通信のための実装が重くなり、パフォーマンスが劣るのが気になるところ。
そこで、リーナスは興味本位でチューニングし、モノリシックカーネルとして設計し直したのが Linux である。つまり、プロセス管理、メモリ管理、ファイルシステムなどのコードを単一ファイルで管理し、それを単一のアドレス空間にロードして実行するという方式で、vmlinux に収められる。Unix っぽいのは、細かく部品化するマイクロカーネルの方であろう。モノリシックカーネルは移植性に劣るとの批判を受けてきた。
しかしながら、カーネルモジュールという動的に機能追加できるチューニング思想のおかげで、ちょいと古いマシンでも Linux 化して延命できるし、組込システムのようなリアルタイム性を重視する分野とも相性がいい。x86 ベースのパソコンのためにスクラッチから書かれ、しかも、POSIX 準拠を目指せば、一般ユーザ向け Unix クローンとしての存在感を増す。著作権も、とっくに GPL へ移行済だし。今では、x64, Alpha, arc, arm への移植性も担保され、この酔いどれ天の邪鬼も二十年以上に渡って恩恵を受けてきた。Unix を権威主義的とするなら、Linux は民主主義的である。自由精神とは、こうした才能豊かな人たちの趣味が昇華した姿ということは言えるのかもしれん...

2. ユーザ管理: LDAP
簡単そうで侮れないのが、ユーザの一括管理。Unix 系のシステム管理で最初に遭遇するのが、ユーザデータベースとしての二つのファイルの扱いであろう。/etc/passwad と /etc/shadow がそれである。
だが、ネットワーク環境が当たり前の今日、これらのファイルでマシン毎に管理するのは非現実的であり、アカウント情報やホスト情報などを共有し、自動配布するための仕掛けが欲しい。ひと昔前には、NIS や NIS+ で運用し、Sun Microsystems の講座を受けたりもした。
そんなネアンデルタール人にとって、OpenLDAP はありがたいツールである。本書は、あまり興味のなかった Active Directory との連携にも触れられ、LDAP サーバの視点から語ってくれる。

3. ログ管理: Journald
systemd では、ログ収集のためのツールに Journald ってやつがある。ただ、ルータ管理のために rsyslogd に馴染んできたので、Journald と別々に扱うのはスッキリしないなぁ... と思いつつ、保留状態であった。本書は、こららの連携についても触れてくれる。

4. NTPサーバ: chrony
インストールして、いきなり ntp 系のデーモンが動作中?ntpd は、まだインストールもしていないのに。どうやら、CentOS 7 から chronyd ってやつが標準のようだ。ntpd よりも効率的に同期してくれるのだとか。どういうふうに効率的なのかは知らんが...

5. SELinux の感覚
ルータのフィルタリング管理では、まずはすべてを遮断し、徐々に必要なポートを開けていくという考え方があり、フィルタリング設定が熟成されていく様が快感だったりする。静的フィルタリングだけ考慮していればいい時代では、それで十分だったが、いまや悠長に構えてはいられない。ただ、基本的な考え方は、あまり変わらないだろう。SELinux にしても、Firewall にしても...
SELinux のような LSM(Linux Security Modules)の感覚がちと違うのは、独立したセキュリティポリシーの元で管理されるために、サービスを外からアクセスする時に結構厄介だったりする。煮詰まった時は、SELinux を疑え!という標語ができそうなほどに。そして、とりあえず停止してみると、たいていうまくいったりする。この時、アクセスを許可しながらログを記録してくれる Permissive モードはありがたい。そして、エラーログを拾いながら、setsebool コマンドで必要なブール値を許可していくといった手順を踏む。SELinux を disable してしまうという荒っぽい手もなくはないが、そんな気にはなれない。
そして、ファイルのパーミッションは、ACL(Access Control List)を適切に設定することを忘れずに...

6. サーバ監視ツール: Zabbix
サーバ監視ツールといえば、昔から MRTG が定番だったが、ちと面倒なところがある。必要な情報が限られていれば、データベースに記録される情報をクライアント側からテキストレベルで拾ってきて、独自に html 化してブラウザで視覚化するといったこともやってきた。
ところが最近、視覚的にも、操作的にも、進化したものがたくさん登場しているようだ。この機会に少し試してみよう。簡易的にブラウザで覗けるツールとして、Monitorix を愛用してきたが、Munin もなかなか。
本書は、古参の Nagios、デファクトスタンダード的な Zabbix、日本生まれの Hinemos を紹介してくれる。惚れっぽい酔いどれ天の邪鬼は、「デファクトスタンダード」という言葉に弱い。てなわけで、Zabbix を試すことに...
なるほど、操作性もよく、スクリーン設定が柔軟で、グラフやサーバー情報を行列で配置できる。複数のスクリーンをスライドショーできるのも魅力で、ルータ群やサーバ群の監視画面を指定の時間間隔で循環させられる。おまけに、マップが作れる。つまり、ネットワーク構成のお絵描きができて、ルータ、サーバ、モバイルなどアイコンも豊富。こりゃ、病みつきになりそう...

構成要素は、Zabbix サーバ、Zabbix エージェント、データベースサーバ、Web サーバの四つ。監視対象にエージェントをインストールしておけば、サーバ側で統合監視ができる。したがって、自分自身を監視したければ、サーバとエージェントの両方をインストールすればいい。
データベースサーバは選択でき、ここでは MariaDB を使用する事例を紹介してくれる。MariaDB は、MySQL から派生した RDBMS で違和感はない。
おっと!いきなり、"Zabbix server is running" が、"no" になってやがる... Oh no!
サービスは起動中なのに?そして、SELinux を疑い... Firewall を疑い... 半日を費やす。あれ?設定ファイル(/etc/zabbix/zabbix_server.conf)には...

  DBUser=zabbix

GUI 画面で設定したはずが、デフォルト値っぽい。変わったユーザ名にしたのは確かだけど。あるいは入力ミスか?本書の事例では、ユーザ名を zabbix にしているので、問題ないってわけか。
なので、mysql コマンドで設定したユーザ名に変更すると、無事 "yes" が表示された。Zabbix サーバの起動が、"no" なんていうから悩んでしまったが、実はサーバが起動していなかったわけではなく、単にユーザがデータベースの情報を参照できなかったというオチ。その間、障害や警告のログを貯めてしまう。はぁ~、情けない!
ただ、こんな些細なことでも、引っかかるから仕組みを理解しようと真剣になれるのであって... などと自分に言い訳するのであった。

7. SNMP を歩き回る... : Zabbix + snmp
さて、本書では触れられないが、実はここからが本チャン!まずは昔を思い出しながら、SNMP を歩き回ってみる。
監視対象ルータは、YAMAHA RTX810 で、SNMPv2c で運用中。まず、YAMAHA が公開している MIB を  /usr/share/snmp/mibs 配下に置いて、snmpd を起動。以下がそのファイル群。

  yamaha-product.mib.txt
  yamaha-rt-firmware.mib.txt
  yamaha-rt-hardware.mib.txt
  yamaha-rt-interfaces.mib.txt
  yamaha-rt-ip.mib.txt
  yamaha-rt-switch.mib.txt
  yamaha-rt.mib.txt
  yamaha-smi.mib.txt
  yamaha-sw-errdisable.mib.txt
  yamaha-sw-firmware.mib.txt
  yamaha-sw-hardware.mib.txt
  yamaha-sw-l2ms.mib.txt
  yamaha-sw.mib.txt

MIB 内のオブジェクトは、階層構文の SMI(Structure of Management Information) で定義されているので、地道に中身を追っていけば、エンタープライズ ID が "1182" であるとか、他のオブジェクト ID も見えてくる。

階層を辿るには、snmptranslate コマンドが便利で、例えば、こんな感じ...
# snmptranslate -On YAMAHA-RT-INTERFACES::yrIfPpInUtil
.1.3.6.1.4.1.1182.2.3.9.1.25

ファイルを覗かなくても頭から追っていけば、ネットワーク関連が以下の OID 配下にあることが見えてくる。
# snmptranslate -Tp
# snmptranslate -Tp .1
# snmptranslate -Tp .1.3
     ...
# snmptranslate -Tp .1.3.6.1.2.1.2.2
+--iso(1)
   |
   +--org(3)
      |
      +--dod(6)
         |
         +--internet(1)
            |
            +--mgmt(2)
               |
               +--mib-2(1)
                  |
                  +--interfaces(2)
                     |
                     +--ifTable(2)
                        |
                        +--     ...
                        +-- -R-- Counter ifInOctets(10)
                        +--     ...
                        +-- -R-- Counter ifOutOctets(16)
                        +--     ...

ある程度あたりをつけたら、snmpwalk コマンドを叩きまくる。
# snmpwalk -v 2c -c "コミュニティ名" "IPアドレス" .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 864038922

# snmpwalk -v 2c -c "コミュニティ名" "IPアドレス" .1.3.6.1.2.1.2.2.1.16.2
IF-MIB::ifOutOctets.2 = Counter32: 477116257

これらの情報を元に、Zabbix サーバでアイテムを作成していくわけだが、一個作るだけでヘトヘト!

  Name     = WAN0 Recv bps
  Type     = SNMPv2 agent
  Key      = ifInOctets.2
  SNMP OID = .1.3.6.1.2.1.2.2.1.10.2
  Port     = 161
    ...

  Name     = WAN0 Send bps
  Type     = SNMPv2 agent
  Key      = ifOutOctets.2
  SNMP OID = .1.3.6.1.2.1.2.2.1.16.2
  Port     = 161
    ...

Munin だったら、拾える情報を自動的にソフトリンクしてくれるコマンドがあるんだけどなぁ... などとぼやいていたら、なんと!テンプレートを公開してくれる素敵な方々がおられるではないか。素直にググってれば、5分とかからなかっただろう。ネアンデルタール人には、SNMP は歩き回るものという先入観がある。はぁ~、情けない!
自由人になるには、まず時間を有効活用すること。それでも、勉強にはなったぞ!と自分に言い訳するのであった...

0 コメント:

コメントを投稿