2013年10月19日土曜日

hosts.allow に気をつけよう

/etc/hosts.allow

ALL : localhost 127.0.0.1 : allow

を書いておかないと nis クライアントが正しく動作しなかったりするので気をつけましょう、という話。

自分が設定した後に管理を他人に任せていたLinux機 ( debian ) がありました。管理者がいなくなって放置されていたため、回収してOSを更新していたのですが、何故かNISサーバに接続出来ないのです。

# /etc/init.d/nis restart
[....] Stopping NIS services: ypbindstart-stop-daemon: warning: failed to kill 4164: No such process
[ ok rv ypppasswdd ypxfrd.
[....] Starting NIS services: ypbind[....] binding to YP server.................[FAIL.....................failed (backgrounded).
. ok
ypbind で何かが起こっているらしく、起動しない、じゃなくて、NISサーバに接続出来ない。ypbind をデバッグモードで起動してみます。

# ypbind -debug
4447: parsing config file
4447: Trying entry: ypserver 192.168.1.111
4447: parsed ypserver 192.168.1.111
4447: add_server() domain: lo_nis_domain, host: 192.168.1.111, slot: 0
4447: [Welcome to ypbind-mt, version 1.20.1]

4447: ping interval is 20 seconds

4449: NetworkManager is running.

4449: Are offline
4449: interface: org.freedesktop.DBus, object path: /org/freedesktop/DBus, method: NameAcquired
サービスを登録できません: RPC: 認証エラーです; why = クライアントの信任が弱すぎます
4447: Unable to register (YPBINDPROG, YPBINDVERS, udp).

何故だー? と思ってエラーメッセージを元に検索してみたら…
tcpwrapperを設定しているのが原因。
きりんメモ@GIFU( http://giraffeforestg.blog.fc2.com/blog-entry-44.html )

あれ?と思って /etc/hosts.allow を見ると

ALL: 192.168.1. :allow
ALL: deny

確かにlocalhostの記述がない…セグメント丸ごとALLにして満足していたのか、昔の自分。
ALL: localhost 127.0.0.1 : allow
ALL: 192.168.1. :allow
ALL: deny

と修正して nis を再起動してみると、

# service nis restart
[....] Stopping NIS services: ypbindstart-stop-daemon: warning: failed to kill 4447: No such process
[ ok rv ypppasswdd ypxfrd.
[ ok ] Starting NIS services: ypbind.

あっさり解決。(IPv6の人は[::1]も書いた方がいいのかも?)

/etc/hosts.allow は portmap, rpcbindが参照しているので nis や nfs といったrpc絡みのサービスに影響するのに、油断していたなあ、という話でした。