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可逆なのでデコードしてみると、書式が間違っていることが判明。
さらに、Perlで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= # エンコードした文字列をデコードする [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 文字の表示がおかしい
■事象
以下の画像のようにフォントがおかしい。フォントの上下にラインが入る。
非常に見にくい。フォントによっては拡大縮小すると見える文字にはなる。
サイトによっては問題ない。(おそらくフォントが固定されている)
設定画面のボタンラベルなどは最大化しないと全く見えない。(マウスオーバーすると見える)
IEやFirefoxだと再現しない。また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
■対策
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で、水が赤色。
■追記
どうやらgdipp+Chromeダウングレードより、MacType+Chrome現行がよいみたい。
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を最小構成でインストールしてかつ指紋認証が必要な環境の場合はインストールが必要かと。