hosts.allowを見るデーモン

自宅の玄箱に外からsshでログインしようと思ったんだけど全然できなかった。
なんでかなーと思って調べたら、hosts.allowで許可してなかった。

hosts.{allow,deny}というのは、inetd経由で起動されるサーバだけが読むものと思っていたので、盲点だった。

http://fg-180.katamayu.net/archives/2005/11/05/104105

これを読むと libwrap をリンクしてるプログラムは hosts.{allow,deny} を読むということらしい。

ldd の結果を見ると debiansshd は標準でリンクされているようだ。

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}を読む、と。