SMTP-AUTHでtelnetの認証失敗

SMTP-AUTHの認証失敗でドハマリ。
メールクライアントからはSMTP-AUTHで接続できていたが、telnetを使用して確認した時に認証失敗して一苦労。

■事象

SMTP-AUTHのPLAIN認証を確認するため、"ユーザ名\0ユーザ名\0パスワード"の形式で、BASE64エンコードする。

[root@dev ~]# perl -MMIME::Base64 -e 'print encode_base64("user01\0user01\0passwd");'
dXNlcjAxAHVzZXIwMQBwYXNzd2Q=

以下の様な感じで、認証に失敗する。

[root@dev ~]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 dev.larcaim.intra ESMTP MailServer
EHLO dev.larcaim.intra
250-dev.larcaim.intra
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN dXNlcjAxAHVzZXIwMQBwYXNzd2Q=
535 5.7.8 Error: authentication failed: 
■原因

今回の事象の原因は以下の2つ。
1.そもそも認証時の書式が間違っている。
正しくは"ユーザ名\0パスワード"。
2.BASE64エンコード時のエスケープが間違っている
NULL値をエスケープする場合に、「"」と「'」の使い方で結果が異なる。
[root@dev ~]# perl -MMIME::Base64 -e "print encode_base64('user01\0user01\0passwd');"
dXNlcjAxXDB1c2VyMDFcMHBhc3N3ZA==
[root@dev ~]# perl -MMIME::Base64 -e 'print encode_base64("user01\0user01\0passwd");'
dXNlcjAxAHVzZXIwMQBwYXNzd2Q=

■対処

"ユーザ名\0パスワード"の形式で、BASE64エンコードする。クォートの使い方を正す。

[root@dev ~]# perl -MMIME::Base64 -e "print encode_base64('user01\0passwd');"
dXNlcjAxXDBwYXNzd2Q=
■調査

そもそも解決の糸口となったのは、以下のサイト。
Chiral Software, Inc. GSA IT70 Java, Android, security software developers in Los Angeles
http://chiralsoftware.com/linux-system-administration/secure-relaying-postfix-sasl-tls-dovecot.seam
このサイトではJarファイルをダウンロードすることで、Javaで簡単にBase64エンコードできる方法が記載されているが、
この方法で、生成した文字列でSMTP-AUTH認証に成功した。(使い所少ないけど、Perlエンコードより覚えやすい)
Base64可逆なのでデコードしてみると、書式が間違っていることが判明。
さらに、PerlBase64エンコードする場合、NULL値をエスケープすると「"」と「'」の使い方で結果が異なることがわかった。

# 「'」でエンコード
[root@dev ~]# perl -MMIME::Base64 -e "print encode_base64('user01\0user01\0passwd');"
dXNlcjAxXDB1c2VyMDFcMHBhc3N3ZA==
# 「"」でエンコード
[root@dev ~]# perl -MMIME::Base64 -e 'print encode_base64("user01\0user01\0passwd");'
dXNlcjAxAHVzZXIwMQBwYXNzd2Q=

# エンコードした文字列をデコードする
[root@dev ~]# perl -MMIME::Base64 -e "print decode_base64('dXNlcjAxXDB1c2VyMDFcMHBhc3N3ZA==');"
user01\0user01\0passwd
[root@dev ~]# perl -MMIME::Base64 -e "print decode_base64('dXNlcjAxAHVzZXIwMQBwYXNzd2Q=');"
user01user01passwd

# NULL値(\0)がなければ、結果は変わらない。
[root@dev ~]# perl -MMIME::Base64 -e 'print encode_base64("user");'
dXNlcg==
[root@dev ~]# perl -MMIME::Base64 -e "print encode_base64('user');"
dXNlcg==

よって、SMTP-AUTH時に、認証メカニズムでLOGINから認証している場合は、おそらくエンコード結果が変わらないので問題なかったはず。
PLAINでの書式でNULL値が入っていたため、結果が異なり困った。
ほとんどのサイトで上記設定でイケてるようなので、そもそもOpenVPS上でやってる自分の環境がおかしいのかもしれない。

Dovecot2やLDAP2.4など、アップデートされた構築は一苦労。CentOS5から6に乗り換えてるだけだけど。

perl MIME エンコード/デコード

  • CentOS6

Postfixで文字列チェックしてた時のワンライナー
絶対覚えていない自身があるのでmemo。
perlのバージョンによっては変換できない模様。少なくともPerl v5.8以上は必要ぽい。

# バージョンチェック
[root@dev tmp]# rpm -q perl
perl-5.10.1-119.el6_1.1.i686
# エンコードモジュールのバージョン
[root@dev tmp]# head /usr/lib/perl5/Encode.pm 
# $Id: Encode.pm,v 2.35 2009/07/13 00:49:38 dankogai Exp $

# エンコード
[root@dev tmp]# perl -Mutf8 -MEncode -le "print encode('MIME-Header-ISO_2022_JP', '出会い');"
=?ISO-2022-JP?B?GyRCPVAycSQkGyhC?=

# デコード
[root@dev tmp]# perl -MEncode -le "print decode('MIME-Header','=?ISO-2022-JP?B?GyRCPVAycSQkGyhC?=')";
Wide character in print at -e line 1.
出会い

Google Chrome 文字の表示がおかしい

■事象

以下の画像のようにフォントがおかしい。フォントの上下にラインが入る。
非常に見にくい。フォントによっては拡大縮小すると見える文字にはなる。
サイトによっては問題ない。(おそらくフォントが固定されている)
設定画面のボタンラベルなどは最大化しないと全く見えない。(マウスオーバーすると見える)
IEFirefoxだと再現しない。またChromeのアドオンでIEtab使っても再現しない。
Chrome固有か?


chrome-ver.18.0.1025.142

chrome-ver.18.0.1025.142 on Addon(IE tab)

ie-ver.9

firefox-ver.11.1


フォーラムにも以下のような質問があり、既知のバグぽい。
・18.0.1025.142 mで縮小するとcssがおかしくなる?
https://groups.google.com/a/googleproductforums.com/forum/?fromgroups#!topic/chrome-ja/F9YuyuhU3iE

■原因

gdippいれてフォント変更してることが原因か。
gdippのサービス落としても再現する。

■対策

Fixされるとすれば次の安定版だとして5月中ごろ(6週間周期だったかと)と思うので
それまでどうするかということで、ダウングレードしてみた。

■手順
1.まず、Chromeをアンインストール。(お気に入りや拡張機能は残ってる)
2.以下のサイトから1つ前のバージョンを探してダウンロード
   http://www.filehippo.com/jp/download_google_chrome/history/
   ダウンロードしたバージョンは、Google Chrome 17.0.963.83
   http://www.filehippo.com/jp/download_google_chrome/11928/
3.前バージョンをインストール。
4.以下のファイルを削除
   C:\Users\ユーザー名\AppData\Local\Google\Chrome\User Data\Default
    ・Web Data
    ・Web Data-journal
5.Chrome起動

※手順4で、ファイルを削除しないとChromeを起動するたびに、以下のダイアログが表示される。
 バージョンが新しいGoogle Chromeのプロフィールは使用できませ(略

とりあえず、文字表示は解消。
自動更新を避けようと思って、「Google Chromeについて」を確認すると、
「更新サーバーにアクセスできません(エラー: 3)」のメッセージ。
できないならできないでいいやと。解決したい場合は、以下。
http://support.google.com/chrome/bin/answer.py?hl=ja&answer=111996

で、5月中頃またアンインストールして新しいの入れて治ってるかどうか確認。
以下のサイトをチェックすればわかる。
 http://googlechromereleases.blogspot.jp/

■経緯

アンインストール前に、Devバージョンを入れてみたが解決されなかった。
 Google Chrome 19.0.1084.9 Dev
次安定版もあまり期待できいかも。

現行のVer.18.0.1025.142では、GPU アクセラレーションがかなり改善されている。
1つ前のバージョンに戻すと、かなりFPSが悪くなる。
以下のサイトでHTML5ベンチマークを検証。
http://ie.microsoft.com/testdrive/Performance/FishBowl/
 >現行 :10匹(デフォ)で60fps。金魚MAXにしてもさくさく動く。キモい。
 >1つ前:10匹(デフォ)で23fps。1000匹あたりでもう無理。
Chromeでゲームアプリ使用する場合は、ダウングレードはおすすめしない。
ちなみにIE9の10匹はさくさく60fps。Firefoxもっさり1fpsで、水が赤色。


■追記

どうやらgdippChromeダウングレードより、MacTypeChrome現行がよいみたい。
Chrome最新版でgdi++派生ソフトMacTypeを有効にする方法 | 情報科学屋さんを目指す人のメモ
http://did2memo.net/2012/04/02/chrome-mactype/
MacTypeアンチエイリアス (さようなら Google Chrome 18) | 見なかったことにしてください
http://bsdlove.jugem.jp/?eid=310

やっぱりツールに振り回されるのってやだなぁ。と思う今日この頃。
DesktopとしてLinuxに戻るってのも手だけど、Ubuntu迷走してるしFedoraは自慰行為だし。
Mint気になるけどこの先どうなるか…。Win8もMeやVista的な存在になるかもしれんし。
いろいろ考えるとやっぱりMacを選択しちゃいそうな今日この頃。

OpenVZ-CentOS6-mini

OpenVZで用意されているCentOS6のテンプレートにはsendmailやxinetdなど不要と思われるものがあったので、差分を調べた。
比較対象の環境はVirtualBoxで最小構成でインストールした環境。
対象はどちらもインストール後、アップデートを実施。

以下のパッケージを削除すれば、テンプレートのパッケージは、最小構成の環境と一致する。

yum remove xz xinetd wget vim-enhanced vim-common usermode setuptool unzip traceroute tmpwatch  time telnet tcsh tcp_wrappers tcpdump talk stunnel sendmail screen samba samba-common samba-winbind-clients rsync rpcbind procmail fetchmail pkgconfig perl net-snmp net-snmp-libs net-snmp-utils perl-Module-Pluggable perl-Pod-Escapes perl-Pod-Simple perl-libs perl-version ntsysv nscd openssh-clients ncompress mlocate make mailx mailcap httpd lynx lsof lm_sensors-libs libtirpc libtiff cups-libs libtdb libtasn1 gnutls libtalloc libpng libpcap libnl libjpeg libgssglue libedit jwhois httpd-tools hesiod gpm-libs ftp finger elfutils ed centos-indexhtml bind-libs avahi-libs aspell apr-util apr elfutils-libs

以下のパッケージを追加すれば、テンプレートのパッケージは、最小構成と一致するがファームなどは不要と思われる。その他箇所のみ必要かも。

■Firmware関連
ql2100-firmware-1.19.38-3.1.el6.noarch
ql2200-firmware-2.02.08-3.1.el6.noarch
ql23xx-firmware-3.03.27-3.1.el6.noarch
ql2400-firmware-5.06.02-1.el6.noarch
ql2500-firmware-5.06.02-1.el6.noarch
ipw2100-firmware-1.3-11.el6.noarch
ipw2200-firmware-3.1-4.el6.noarch
ivtv-firmware-20080701-20.2.noarch
iwl1000-firmware-39.31.5.1-1.el6.noarch
iwl100-firmware-39.31.5.1-1.el6.noarch
iwl3945-firmware-15.32.2.9-4.el6.noarch
iwl4965-firmware-228.61.2.24-2.1.el6.noarch
iwl5000-firmware-8.83.5.1_1-1.el6_1.1.noarch
iwl5150-firmware-8.24.2.2-1.el6.noarch
iwl6000-firmware-9.221.4.1-1.el6.noarch
iwl6000g2a-firmware-17.168.5.3-1.el6.noarch
iwl6000g2b-firmware-17.168.5.2-1.el6.noarch
iwl6050-firmware-41.28.5.1-2.el6.noarch
aic94xx-firmware-30-2.el6.noarch
atmel-firmware-1.3-7.el6.noarch
bfa-firmware-3.0.0.0-1.el6.noarch
b43-openfwwf-5.2-4.el6.noarch
zd1211-firmware-1.4-4.el6.noarch
xorg-x11-drv-ati-firmware-6.14.2-7.el6.noarch
libertas-usb8388-firmware-5.110.22.p23-3.1.el6.noarch

■SELinux関連
selinux-policy-3.7.19-126.el6.noarch
selinux-policy-targeted-3.7.19-126.el6.noarch
audit-2.1.3-3.el6.i686
libselinux-utils-2.0.94-5.2.el6.i686
libsemanage-2.0.43-4.1.el6.i686
policycoreutils-2.0.83-19.18.el6.i686
checkpolicy-2.0.22-1.el6.i686

■Kernel関連
kernel-2.6.32-220.7.1.el6.i686
kernel-2.6.32-220.el6.i686
kernel-firmware-2.6.32-220.7.1.el6.noarch

■Boot関連
plymouth-0.8.3-24.el6.centos.i686
plymouth-core-libs-0.8.3-24.el6.centos.i686
plymouth-scripts-0.8.3-24.el6.centos.i686
grub-0.97-75.el6.i686
grubby-7.0.15-2.el6.i686
efibootmgr-0.5.4-9.el6.i686

■Boost関連
boost-1.41.0-11.el6_1.2.i686
boost-date-time-1.41.0-11.el6_1.2.i686
boost-filesystem-1.41.0-11.el6_1.2.i686
boost-graph-1.41.0-11.el6_1.2.i686
boost-iostreams-1.41.0-11.el6_1.2.i686
boost-program-options-1.41.0-11.el6_1.2.i686
boost-python-1.41.0-11.el6_1.2.i686
boost-regex-1.41.0-11.el6_1.2.i686
boost-serialization-1.41.0-11.el6_1.2.i686
boost-signals-1.41.0-11.el6_1.2.i686
boost-system-1.41.0-11.el6_1.2.i686
boost-test-1.41.0-11.el6_1.2.i686
boost-thread-1.41.0-11.el6_1.2.i686
boost-wave-1.41.0-11.el6_1.2.i686

■matahari関連
matahari-0.4.4-11.el6.i686
matahari-agent-lib-0.4.4-11.el6.i686
matahari-broker-0.4.4-11.el6.i686
matahari-host-0.4.4-11.el6.i686
matahari-lib-0.4.4-11.el6.i686
matahari-network-0.4.4-11.el6.i686
matahari-service-0.4.4-11.el6.i686
matahari-sysconfig-0.4.4-11.el6.i686

■AMQP関連
qpid-cpp-client-0.12-6.el6.i686
qpid-cpp-client-ssl-0.12-6.el6.i686
qpid-cpp-server-0.12-6.el6.i686
qpid-cpp-server-ssl-0.12-6.el6.i686
qpid-qmf-0.12-6.el6.i686

■LVM関連
lvm2-2.02.87-6.el6.i686
lvm2-libs-2.02.87-6.el6.i686
device-mapper-1.02.66-6.el6.i686
device-mapper-event-1.02.66-6.el6.i686
device-mapper-event-libs-1.02.66-6.el6.i686
device-mapper-libs-1.02.66-6.el6.i686

■Dbus関連
dbus-1.2.24-5.el6_1.i686
dbus-glib-0.86-5.el6.i686
eggdbus-0.6-3.el6.i686

■キーボード関連
kbd-1.15-11.el6.i686
kbd-misc-1.15-11.el6.noarch
ConsoleKit-0.4.1-3.el6.i686
ConsoleKit-libs-0.4.1-3.el6.i686

■Udev関連
libudev-147-2.40.el6.i686
dracut-004-256.el6_2.1.noarch
dracut-kernel-004-256.el6_2.1.noarch

■iptables関連
iptables-ipv6-1.4.7-5.1.el6_2.i686
system-config-firewall-base-1.2.27-5.el6.noarch

■Cron関連
cronie-1.4.4-7.el6.i686
cronie-anacron-1.4.4-7.el6.i686
crontabs-1.10-33.el6.noarch

■その他
sigar-1.6.5-0.4.git58097d9.el6.i686
acl-2.2.49-6.el6.i686
attr-2.4.44-7.el6.i686
ustr-1.0.4-9.1.el6.i686
postfix-2.6.6-2.2.el6_1.i686
dash-0.5.5.1-3.1.el6.i686
polkit-0.96-2.el6_0.1.i686
pciutils-libs-3.1.4-11.el6.i686
mysql-libs-5.1.61-1.el6_2.1.i686
libicu-4.2.1-9.1.el6_2.i686
libdrm-2.4.25-2.el6.i686
curl-7.19.7-26.el6_1.2.i686

OpenVZ Web Panel:undefined method `pluralize'

  • CentOS 6
  • OpenVZ Web Panel 2.0
■事象

物理サーバ>localhsotを表示すると「We're sorry, but something went wrong.」が表示される

##### ログの確認
# less /opt/ovz-web-panel/log/production.log 
[...]
Internal error: undefined method `pluralize' for #<Object:0xb6e05b08>
Rendering /opt/ovz-web-panel/public/500.html (500 Internal Server Error)
■対処

パッチが出てる。
http://code.google.com/p/ovz-web-panel/issues/detail?id=248

##### patch適用
# wget "http://ovz-web-panel.googlecode.com/issues/attachment?aid=2480008000&name=patch_fix_iss248&token=9kWOQ2TzInjoEqLMxi-owMw-QW0%3A1331738719768" -O patch_fix_iss248 
# cd /opt/ovz-web-panel/vendor/rails/actionpack/lib/action_view/helpers
# patch number_helper.rb patch_fix_iss248

###### サービス再起動
# /etc/init.d/owp restart

なおった。

PAM unable to dlopen(/lib/security/pam_fprintd.so): /lib/security/pam_fprintd.so:

■環境

CentOS6

■事象

suコマンドを実行するログが溜まっていく。

・/var/log/secure

centos6 su: pam_unix(su-l:session): session closed for user root
centos6 su: PAM unable to dlopen(/lib/security/pam_fprintd.so): /lib/security/pam_fprintd.so: 
共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません
centos6 su: PAM adding faulty module: /lib/security/pam_fprintd.so
centos6 su: pam_unix(su-l:session): session opened for user root by USER(uid=500)

■原因

Red Hat Bugzilla – Bug 505266
https://bugzilla.redhat.com/show_bug.cgi?id=505266
ステータスは、CLOSED NOTABUGとなっているが、個人的にはOS導入時のauthconfig初期設定の障害と考える。

CentOS6(RHELも?)では、認証設定として指紋認証が有効となっているが、OSを最小構成でインストールすると指紋認証用のパッケージ(fprintd-pam)がインストールされていないためこの事象が起こる。
「Server-GUI」でOSをインストールした場合は、「fprintd-pam」パッケージが導入されているため、この事象は発生しない。もちろん指紋認証も有効になっているけど。

ということで、原因は以下と考える。

  • OS最小構成インストール時に「fprintd-pam」パッケージが漏れている
  • authconfig初期設定に誤りがある

■解決策

VMで動作しており、指紋認証機器もないので「fprintd-pam」の導入はしない。
authconfigを修正し、指紋読み取りを使用しないように設定。
authconfig-tuiで、「指紋読み取りを使用する」のチェックを外す。
または、「authconfig --disablefingerprint --update」を実行する。


「fprintd-pam」の入れ忘れを原因として「fprintd-pam」をインストールすると、依存関係によりdbus、gtk2、libX11など最小構成でインストールしたのに必要のないパッケージを約30MB導入することになる。大した容量ではないがメンテに影響がでそうなので入れない。
OSを最小構成でインストールしてかつ指紋認証が必要な環境の場合はインストールが必要かと。