CentOS 6.0をアップデートしたらLDAPで認証が通らなくなった

CentOS 6.0をアップデートしたらLDAPで認証されるユーザが存在しないことになってた。

ただ今回のアップデートはyum updateで一括してアップデートしてしまったのでOpenLDAPのアップデートでそうなったのかOS本体のアップデートでそうなったのかちょっと区別が付かなかった。

CentOSの場合、以下のファイルがLDAP認証に関わってくる

  • /etc/nscl.conf
  • /etc/nsswitch.conf
  • /etc/pam_ldap.conf
  • /etc/openldap/ldap.conf
  • /etc/sysconfig/authconfig
  • /etc/pam.d/*

これらのファイルの内、アップデートによりデフォルトのものに書き換えられたものがある様子。

shell> id hogetan
id: hogetan: No such user

shell> grep LDAP /etc/sysconfig/authconfig
USELDAPAUTH=no  # この行をyesに変更しなければならない。アップデートでnoになってしまった様子。
USELDAP=yes

shell> tail /var/log/messages

Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] failed to bind to LDAP server <a href="ldaps://192.168.1.1/">ldaps://192.168.1.1/</a>: Can't contact LDAP server: Operation now in progress
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] failed to bind to LDAP server <a href="ldaps://192.168.1.1/">ldaps://192.168.1.1/</a>: Can't contact LDAP server: Operation now in progress
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] no available LDAP server found
Dec 19 11:39:37 clinton nslcd[1861]: [7b23c6] no available LDAP server found

この段階、authconfigでUSELDAPAUTHをyesにするだけでは通らず。調べるとどうやらred hat系はauthconfig-tuiというツールを利用する、とどこぞで言われてみた。autuconfig-tuiは対話式のコンフィグツールらしい。起動してそのままのオプションで次へ、OKと押していく。でもダメだ。

調べると /etc/nslcd.conf も書き換わっていた。いらない行をコメントアウト。最後にnslcdを再起動してうまく行けた!

shell> more /etc/nslcd.conf
ldap_version 3
TLS_REQCERT never
uri ldaps://192.168.84.67/ ldaps://192.168.84.68/
base dc=l3tp,dc=org
#ssl no   # この行が勝手に追加されてたのでコメントアウト
#tls_cacertdir /etc/openldap/cacerts # この行が勝手に追加されてたのでコメントアウト

shell> service nslcd restart

shell> id hogetan

uid=1001(hogetan) gid=1001(hogetan)

完璧。

PearのLanguageDetectが入ってなかったのでインストール at FreeBSD

FreeBSDで過去に作成したファイルにおいて、LanguageDetectがインストールされていないホストで実行したためエラーで怒られた。

shell> php hoge.php
PHP Warning:  require_once(Text/LanguageDetect.php): failed to open stream: No such file or directory in /home/hoge/tmp/hoge.php on line 8

Warning: require_once(Text/LanguageDetect.php): failed to open stream: No such file or directory in /home/hoge/tmp/hoge.php on line 8

いつもだとさっくりportsでインストールするんだけれど、このLanguageDetectはalpha版のためかportsには登録されてない。手動でpearからインストールする。

shell> sudo pear search Language
Retrieving data...0%
MATCHED PACKAGES, CHANNEL PEAR.PHP.NET:
=======================================
PACKAGE             STABLE/(LATEST) LOCAL
Text_LanguageDetect 0.2.3 (alpha)         Language detection class

shell> sudo pear install Text_LanguageDetect
Failed to download pear/Text_LanguageDetect within preferred state "stable", latest release is version 0.2.3, stability "alpha", use "channel://pear.php.net/Text_LanguageDetect-0.2.3" to install
install failed
shell> sudo pear install channel://pear.php.net/Text_LanguageDetect-0.2.3
downloading Text_LanguageDetect-0.2.3.tgz ...
Starting to download Text_LanguageDetect-0.2.3.tgz (120,947 bytes)
..........................done: 120,947 bytes
install ok: channel://pear.php.net/Text_LanguageDetect-0.2.3

と言うわけで、最終的にはインストールするために “pear install channel://pear.php.net/Text_LanguageDetect-0.2.3” を指定すればおkだった。

LDAPで利用するパスワードの期限が切れた

1. LDAPのクライアントになるホストにsshしたら怒られた

LDAPのクライアントになってユーザ認証を行っているホストにsshでコマンドを流したら怒られた。

shell> ssh host command
WARNING: Your password has expired.
Password change required but no TTY available.

エラーの内容からすると、”あなたのパスワードは期限が切れています。そしてパスワードの変更をしたいけれど、プロンプトがないからできません”となっている。

確かにsshでコマンドを直接流しているのでTTYがない。なのでパスワード変更ができない。他の方法でTTYが存在するログインをしてみた。

shell> login
login: hogetan
Old Password:
New Password:
Retype New Password:

こっちでは正常にパスワードの変更を求められた。さてココで、古いパスワードを入力し新しいパスワードを入力し、パスワードの変更を正常に行った、かに見えたんだけれど、再度ログインすると同様にパスワードの変更を求められる。

コレはおかしいぞ、ということでちょっと調べてみた。

続きを読む LDAPで利用するパスワードの期限が切れた

FreeBSDでNFSマウントされたホーム+zshでcompinitするとログインが激遅

FreeBSD 8.2でも 9.0-RC3でも同じだけど、NFSでマウントされたホームディレクトリで、zshをログインシェルにしていて、zshの設定でcompinitをしていると、ログインがめちゃくちゃ遅い。ログアウトも遅い。
あまりスマートじゃないかもしれないけど、NFSがいかんのならローカルにzshのファイル置けばいいじゃない。と
.zshrcに以下の6行を書き加えてみた。

autoload -U compinit
if [ "$OSTYPE" = "linux*" ]; then
  compinit -d ~/.zcompdump_${HOST}
else
  compinit -d /usr/home/$USER/.zcompdump  
fi

保存先のディレクトリは作っておかないといけないけど、別になくてもログインできなくなったりはしないっぽい。

Courierが利用するaliases.datの中身を確認する

1. Courierのaliasシステム

現在、メールのMTAとしてcourierを利用している。courierさんはメールを配送する際、aliasというメールアドレスに別名を付ける仕組みを持っている。

この仕組みがあると仮想的にメールアドレスを増やせたりして結構便利だったり。もともとsendmailにあったものをそのまま引き継いでいるような。

で、このaliasを利用するにはちょっと一癖ある。

続きを読む Courierが利用するaliases.datの中身を確認する

FreeBSDからメールの配送がうまくいってなかった

1. メールがこない!

現在、いくつかのホストでは監視用にメールを飛ばすようにしてる。これってsmtpでメールサーバを立てて・・・、って訳ではなく、各ホストのsendmailがmailコマンドでメールを投げてくる、という簡単なものだ。

先日メールサーバを移行したのだけれど、このタイミングであるホストからのメールが来なくなった。送りたいメールはローカルのドメイン宛てで、送りたいプログラムはcactiのアラートメール。phpのmailコマンドを呼んでいると思われるのでシステムのmailコマンドを利用しているような気がしてる。

まずはDNSでの名前解決を当たった。というのも、移行された旧メールサーバこそがこのメールが送れなくなったホストであり、ついでにDNSの機能まで積んでいたものだから、そこのMXレコードあたりの参照が出来なくなったんだろう、っていう予測を。

でもMXレコードでローカルのドメインを引いてもちゃんと引けてる。こまったなぁ。

続きを読む FreeBSDからメールの配送がうまくいってなかった

CentOSでSSHのログインがとても遅かった件

1. SSHのログインが遅い・・・・!

CentOSを導入してみた。で、LDAPの設定をして、SSHで接続しようと思ったんだけど遅い、遅すぐる・・・!

どこが遅いのかというと、SSHで接続に行ってパスワードの入力を促されるまでに10秒ほど待たされる。コレは参った。

で、SSHの応答が遅い –> サーバでDNSの逆引きを疑え! という格言がある通り(わしが言った!)、まずココを疑う。

対象のホストでDNSで逆引きしてみる。ちゃんとうまくいく・・・。

ついでに色々とログインしてみたら、公開鍵での認証は早いみたい。どうやらパスワードの認証だけがやたらめったら遅いらしい。

続きを読む CentOSでSSHのログインがとても遅かった件

LDAPで出会ったエラー

下記のようなエラーが出たとき

nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server
nss_ldap: failed to bind to LDAP server ldaps:///192.168.1.1/: Can't contact LDAP server
  1. ldapsとかのldapURL構文でスラッシュが三つあったりしないか
  2. ldap系のconf(libnss-ldap.conf, ldap.confとか)でTLS_REQCERT neverを書く。 (SSLを利用している場合)