hosts.allowを見るデーモン
自宅の玄箱に外からsshでログインしようと思ったんだけど全然できなかった。
なんでかなーと思って調べたら、hosts.allowで許可してなかった。
hosts.{allow,deny}というのは、inetd経由で起動されるサーバだけが読むものと思っていたので、盲点だった。
http://fg-180.katamayu.net/archives/2005/11/05/104105
これを読むと libwrap をリンクしてるプログラムは hosts.{allow,deny} を読むということらしい。
ldd の結果を見ると debian の sshd は標準でリンクされているようだ。
masa@nowe> ldd /usr/sbin/sshd libwrap.so.0 => /lib/libwrap.so.0 (0x0ffd6000) libpam.so.0 => /lib/libpam.so.0 (0x0ffac000) libdl.so.2 => /lib/tls/libdl.so.2 (0x0ff88000) libselinux.so.1 => /lib/libselinux.so.1 (0x0ff4f000) libresolv.so.2 => /lib/tls/libresolv.so.2 (0x0ff1a000) libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x0fd92000) libutil.so.1 => /lib/tls/libutil.so.1 (0x0fd6f000) libz.so.1 => /usr/lib/libz.so.1 (0x0fd39000) libnsl.so.1 => /lib/tls/libnsl.so.1 (0x0fd01000) libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0x0fcb3000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x0fc79000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x0fbd9000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x0fb95000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x0fb72000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x0fb4e000) libc.so.6 => /lib/tls/libc.so.6 (0x0f9da000) /lib/ld.so.1 (0x30000000) libsepol.so.1 => /lib/libsepol.so.1 (0x0f96b000)
gentoo では、tcpd USEフラグが有効だとlibwrapを使うようになる。
せっかくなのでsedを使って/usr/sbin以下のコマンドでlibwrapをリンクしている意外なやつを調べてみた。このsedスクリプトはいかにも初心者臭がするけど。
自宅のdebianの場合
masa@nowe> ldd /usr/sbin/* 2>/dev/null | sed -n '/:$/{s/://;h};/libwrap/{g;p}' /usr/sbin/afpd /usr/sbin/inetd /usr/sbin/safe_finger /usr/sbin/sshd /usr/sbin/tcpd /usr/sbin/tcpdchk /usr/sbin/tcpdmatch /usr/sbin/try-from
afpdもハマりそうな候補。それ以外はtcpd関連ぽい。
実家のgentooの場合
masa@celeborn> ldd /usr/sbin/* 2>/dev/null | sed -n '/:$/{s/://;h};/libwrap/{g;p}' /usr/sbin/slapacl /usr/sbin/slapadd /usr/sbin/slapauth /usr/sbin/slapcat /usr/sbin/slapdn /usr/sbin/slapindex /usr/sbin/slappasswd /usr/sbin/slaptest /usr/sbin/sshd /usr/sbin/syslog-ng
syslog-ngとopenldapはhosts.{allow,deny}を読む、と。