ふたつの川うるおう日記
2005-12-01 (Thu)
_ [Book] ネットワークセキュリティ Expert 3 (Amazon)
11月30日付けで技術評論社から発売されているようです。
「オープンソースで作る一元管理環境」という題で昨年Software Designに3回書かせていただいたものを最新の事情に合わせて書き直し + 1回にまとめてあります。
内容はディレクトリサービスを利用したシステムレベルのインテグレーションです。具体的には、次のものをLDAPで統合します。
- UNIXログイン (pam_ldap)
- メールサーバ (qmail-ldap)
- SMTP, SMTP AUTH, SMTP with STARTTLS, POP3, POP3S, IMAP, IMAPS
- OpenSSH LDAP PUBLIC KEY PATCH
- autofs with LDAP
本記事には書かれていませんが、これをベースにインテグレーションを進めると次のようなものも統合できます。
- Samba (NT Domain)
- Apache (mod_ldap)
- BASIC, DIGEST, SVN, etc...
- FTP
- BIND
- Groupware
- WEBアプリケーション
これらがたった一つのユーザアカウントですべて利用できたら嬉しいですよね。そんなお話です。
大きな改定内容は次の通りです。
- Fedora Core 1 -> CentOS 4.2 (= Red Hat Enterprise Linux 4.x)
- 実際に仕事で使える環境で!
- Courier-IMAP -> Binc IMAP
- Courier-IMAPの最近のバージョンは、courier-authlibデーモンが動いていないとIMAPサーバとして使えなくなってしまいました。これではdaemon toolsと併用した時にせっかくIMAPサーバ本体が死活管理されていても、authlibデーモンが落ちたらIMAPサーバとして意味を成さなくなります。そこで、最近急速に開発されているBinc IMAPに乗り換えました。
- OpenSSH-LDAP -> OpenSSH LDAP Public Key Patch
- スキーマ定義が再定義された新しいバージョンに対応しました。
- その他、各種サーバソフトのバージョンアップや細かな点の修正などを加えてあります。
ただし、本記事はすべてのサーバに当てはまるような一般的なものではないです(渇望されている所ももちろんある)。内容もモロ技術的な構築手順で、ノウハウ公開みたいなもんです。そんな事情も考慮して、LDAPに興味が無くても、サーバ管理者であれば1個1個単体でも興味を引けそうな話を入れてあります。もちろんLDAPに興味がある方向けにただ作るだけじゃない話題も入れてあります。次の話題に興味をそそられるものがあれば、是非お手元に1冊どうぞ。
- 独自認証局と署名証明書の作成方法
- メールサーバのプロトコルについて
- SSLとTLSの違い
- qmail周り
- daemontoolsのinittab寄生をやめる方法
- runファイルの自動生成方法
- OpenLDAPサーバのSSL/TLS化
- オブジェクトクラスのSUP、STRUCTURAL、AUXILIARYについて
本当はSambaとWEBアプリケーションまで統合し、分散・冗長性の話題まですると、WindowsやUNIX系のクライアントシステム構築されている方々向けに、もの凄いインパクトを与えられると思っているんですが、ページ数の都合などにより、ベースとなるディレクトリとメールサーバに焦点を当ててあります。
以上、興味をもたれましたら是非どうぞ。
2005-12-02 (Fri)
_ [Server] Apache 2.2 もうすぐ
出るのかな? CHANGES_2.2。
_ [Server] http://httpd.apache.org/
ということでリリースされたようです。
2005-12-03 (Sat)
_ [Server] Apache 2.2 モジュールいろいろ
まずは、標準状態のモジュールをチェック。
- オプション
"./configure" \ "--prefix=/usr/local/httpd2.2" \ "--with-mpm=prefork" \ "--enable-mods-shared=all"
- 結果
mod_actions.so mod_alias.so mod_asis.so mod_auth_basic.so mod_auth_digest.so mod_authn_anon.so mod_authn_dbd.so mod_authn_dbm.so mod_authn_default.so mod_authn_file.so mod_authz_dbm.so mod_authz_default.so mod_authz_groupfile.so mod_authz_host.so mod_authz_owner.so mod_authz_user.so mod_autoindex.so mod_cern_meta.so mod_cgi.so mod_dav.so mod_dav_fs.so mod_dbd.so mod_deflate.so mod_dir.so mod_dumpio.so mod_env.so mod_expires.so mod_ext_filter.so mod_filter.so mod_headers.so mod_ident.so mod_imagemap.so mod_include.so mod_info.so mod_log_config.so mod_log_forensic.so mod_logio.so mod_mime.so mod_mime_magic.so mod_negotiation.so mod_rewrite.so mod_setenvif.so mod_speling.so mod_status.so mod_unique_id.so mod_userdir.so mod_usertrack.so mod_version.so mod_vhost_alias.so
いろいろ足りないな。
結局2.0で使ってたもののうちから、変更点は一点だけっぽい。
"--enable-auth-ldap" \ ↓ "--enable-authnz-ldap" \
そして、mod_jkの代わりとなるmod_proxy_ajpを追加かな。
"--enable-proxy" \
(mod_proxy_ajpもこれで一緒に入る)
2005-12-04 (Sun)
_ [Server] Apache 2.2 dav_svnがエラー (解決)
2.0で動いていたリポジトリが2.2にすると次のエラーで動かなくなりました。
[error] [client ***.***.***.***] Could not fetch resource information. [500, #0] [error] [client ***.***.***.***] Could not open the root of the repository [500, #22] [error] [client ***.***.***.***] Can't set position pointer in file '/home/groups/example/svn/db/revs/1': Invalid argument [500, #22]
解決方法を見つけられませんでした。このエラーはパーミッションが無い場合に出るみたいだけど、2.0だと動くのでそれとは別のとこが原因のようです。バージョンはSubversion 1.2.3。
PHP 5.1.1とmod_proxy_ajpは問題なさそう。
追記: 解決
原因は、SubversionのAPRのバージョンの問題でした。
"./configure" \ "--with-ssl" \ "--with-apxs=/usr/local/httpd/bin/apxs" \ "$@"
今まではこれでコンパイルしていたけど、これだとSubversionに付属しているaprとapr-utilを使うようで、それが0.9.x系なためにApache 2.2で標準となった1.xと互換性が無いためでした。
"./configure" \ "--with-ssl" \ "--with-apr=/usr/local/httpd" \ "--with-apr-util=/usr/local/httpd" \ "--with-apxs=/usr/local/httpd/bin/apxs" \ "$@"
でコンパイルし直して解決。/usr/local/httpdはApacheのインストール先(通常: /usr/local/apache2)。ここにApache 2.2に付属する1.xのaprとapr-utilがあるのでそれを使わせればOK。
_ [Server] Apache 2.2 mod_proxy_ajp
mod_proxy_ajpは超簡単。ロードバランサー使わない場合は1行でOK。
<IfModule proxy_ajp_module>
ProxyPass /example ajp://localhost:8009/example
# Load Balancer
ProxyPass /balancer-example balancer://ajp-balancer
<Proxy balancer://ajp-example>
BalancerMember ajp://192.168.1.2:8009/example/
BalancerMember ajp://192.168.1.3:8009/example/
</Proxy>
</IfModule>
2005-12-07 (Wed)
_ [Server] Apache 2.2 -lssl -lcrypto
古いSSLライブラリにリンクされる件、解決しました。というか、A氏のお力、ありがとうm(_ _)m。
問題の箇所は、configureして生成されるhttpd-2.2.0/build/config_vars.mk内のEXTRA_LIBSとSSL_LIBSでした。Apache 2.0.xでは、SSL_LIBSというのが無くて、EXTRA_LIBSに-lssl -lcryptoも入っていたのが、2.2.xからSSL_LIBSに-lssl -lcryptoが入るようになっていて、このSSL_LIBSはmod_sslをコンパイルする時のみに使われるものの、それ以外の本体やモジュールでは参照されていませんでした。
なわけで、とりあえずの解決策としては、configureした後に下記のように修正してコンパイルすればOK。
vi build/config_vars.mk
EXTRA_LIBS = -lm ↓ EXTRA_LIBS = -lm $(SSL_LIBS)
- 結果
Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.8a DAV/2 PHP/5.1.1 SVN/1.2.3
ldd mod_ssl.soするとちゃんと新しいSSLモジュールをリンクしているのに、本体がリンクしている古いバージョンを返していたので、このServerTokenは、モジュールが情報取ってそれを本体に渡してるのではなくて、少なくともmod_sslの場合は、本体のリンクしているライブラリバージョンを返すんですね。
というわけで、trunkに修正が反映されていないようなので、Bugzillaに登録しようと思います。
ただ、今Apacheのサーバ落ちてるみたいだけどね・・・。
[追記]: 投げました。ASF Bugzilla Bug 37823: The openssl library linked is different between httpd and mod_ssl
2005-12-18 (Sun)
_ [Java] ikushipe面白い
修論始める前に初リリースということでとりあえず遊んでみました。実際ものを触ってみると楽さが良くわかりました。標準で無設定でいけるし、パッケージの構成を sample.page sample.logc sample.model とかにしてもちゃんと動くし(当たり前(汗)、URLも良い感じだし(Railsっぽい)、Seasarの現時点の管理アプリであれば、S2Strutsから置き換え可能です。標準で提供されるTaglibとValidatorが充実すれば現在Struts使ってる方も難なく乗り換え可能っぽいです。ただ、S2Strutsとシェアを取り合いそうですけど(;´ー`)。
2005-12-22 (Thu)
_ [Java] IkushipeのURL
ちょこっと触っただけですが、細かな要望を。標準の<url-pattern>/*</url-pattern>時に、
- http://localhost:8080/ikushipe-example/login
- http://localhost:8080/ikushipe-example/login?userName=abc&password=ABC
で表示(処理)されるものが、
- http://localhost:8080/ikushipe-example/login/
- http://localhost:8080/ikushipe-example/login/?userName=abc&password=ABC
でも同じようにアクセスできると嬉しいです。
Apacheのmod_rewriteで小細工しても出来るんですが、フレームワーク自身でできると嬉しいなーって感じです。
2005-12-24 (Sat)
_ [Server] 双方向MySQLレプリケーション
MySQLだとお手軽にレプリケーションが出来るわけですが、2台で双方向でも出来るんだね。ただし、非同期式なので、双方に更新できるようにする場合は使うクエリに注意が必要だけど、ロードバランサー使ってホットスタンバイで用意しておいて切り替えるとかする場合には有用っぽい。
んで、構築するのはそんなに問題無いんだけど、片方のHDDがクラッシュしたと想定してデータコピーからやり直すのにハマりました。マスタとする方も復旧する方のスレイブになっているので、そのデータを復旧するサーバにコピーした後、起動するとスレイブ用のログを探しに行ってしまうのでした。
解決方法は、スナップショット取る時にスレイブ設定を一旦、停止・リセットしてからやればOK。
- Server1 - terminal 1
SLAVE STOP; -- スレイブ設定停止 RESET SLAVE; -- スレイブ設定リセット FLUSH TABLES WITH READ LOCK; -- スナップショット取るためにテーブルロック SHOW MASTER STATUS; -- ログファイル名とポジション記録
- Server1 - terminal 2
tar czf mysql.`date -I`.tar mysql # スナップショット化 scp mysql.`date -I`.tar.gz root@server2: # Server2へコピー
- Server1 - terminal 1
UNLOCK TABLES; -- テーブルロック解除
- Server2
- 通常の手順でスレイブ化
CHANGE MASTER TO ... (省略) -- Server1のスレイブに
- Server1
- 通常の手順でスレイブ化
CHANGE MASTER TO ... (省略) -- Server2のスレイブに
2005-12-28 (Wed)
_ [Java][Seasar] 久々S2Directory
久しぶりに見る(ダメすぎ。一応DTOによるSELECT・UPDATE・DELETEはできてたり。SQLの代わりになるものを作るかどうか考えて放置してたけどこのままでも良い気になってきました。CREATEはEntryから作成するのはまだないけど、属性追加ならUPDATEでできます。放置しすぎてるので、一旦alphaで出して、複数属性とかバイナリモードはその後作ろうかな。あと、パスワード変更機能(SSHA形式)は提供したいな。
とりあえず、ソースをPOJO生成器と本体に分離して整理してみたら、全然コード書いてないことがわかった(;´ー`)。
2005-12-29 (Thu)
_ [Java][Seasar] S2Directory パスワード変更機能とバイナリ型サポート
書いたら作りたくなったので作りました。パスワードはとりあえずMD5とSHAだけで、SSHAは無いです。理由は、Commons Codecがサポートしてなかったから。Base64はJDK本体についてても良いのにな。
追記: 暗号形式追加
MD5、SMD5、SHA、SSHAを追加しました。CRYPTは実装依存らしいので放置。UNIXの場合の実装例。
2005-12-30 (Fri)
_ [Java][Seasar] S2Directory 0.1 Released
S2Directory 0.1とバージョン付けて出しました。ドキュメントは用意してないので、付属するexamplesのソースコードを参考にしてください。S2Daoを使ったことあれば同じように使えばOKです。
POJOを生成するユーティリティをリリースし忘れてました。S2DirectoryGeneratorって名前にして出したけど、これ単体で動くからS2つける必要無かったりw。
_ [Java][Seasar] S2Directory バイナリ型について
バイナリ型は、java.naming.ldap.attributes.binary で定義されたものがあった場合にStringに変換して格納します。基本的にバイナリ型であっても、他のテキスト型と同じようにStringに入れれば良いです。
_ [Java][Seasar] S2Directory パスワード変更について
パスワードとは、userPassword;binary属性に保存された暗号化ハッシュのことを指します。バイナリ型同様、特別なことはしないで良いです。単純にString型のuserPasswordフィールドを持ったPOJOクラスを用意すれば、既に格納されている暗号方式で新しいパスワードを検証し、異なっている場合は、directory.diconで設定した暗号方式(無設定時SSHA)で暗号化して保存します。尚、CRYPTによる暗号方式は環境依存のようなのでサポートしていません。
パスワード変更というか、更新・削除も読み出し時同様ユーザモードで実行できます。




_ marry [Xii4Lf sd89Vy7fF7f7siDq0j]
_ darry [WoCs4F fvdf87y978sdct9bvd892hbsc]
_ jonn [grererret]