在默认情况下会安装 TCP Wrappers 软件包(tcp_wrappers),该软件包提供基于主机的、到网络服务的访问控制。这个软件包中最重要的组成部分是 /usr/lib/libwrap.a 库。通常来说,使用 libwrap.a 库进行编译的服务就是一个 TCP Wrappers。
当一个客户试图与一个 TCP-wrapped 服务进行连接时,这个服务首先会检查主机的访问文件(/etc/hosts.allow和 /etc/hosts.deny)来决定这个客户是否被允许连接到这个服务。在大多数情况下,这个服务还会使用 syslog 守护进程(syslogd)把这个发出请求的客户用户名以及所要求访问的服务写入 /var/log/secure 或 /var/log/messages 文件中。
如果一个客户被允许进行连接,TCP Wrappers 会释放它对所请求服务的连接控制权,然后将不再在这个客户与服务器间的通信过程中起任何作用。
除了可以控制访问和记录日志信息外,TCP Wrappers 还可以在允许或拒绝到网络服务的连接请求之前来执行相关的命令与客户进行交流。
因为 TCP Wrappers 是系统管理员所使用的安全工具库的一个很有价值的补充,红帽企业 Linux 中的多数网络服务都与 libwrap.a 库相连。这样的应用程序包括 /usr/sbin/sshd、/usr/sbin/sendmail 和 /usr/sbin/xinetd。
要决定一个网络服务的二进制码是否与 libwrap.a 相连,以根用户的身份键入以下命令:
ldd <binary-name> | grep libwrap
使用网络服务的二进制码的名称来替换 <binary-name>。
如果这个命令的输出结果是空的,这项网络服务则 没有 与 libwrap.a 链接。
以下的例子表示 /usr/sbin/sshd 与 libwrap.a 相链接:
[root@myserver ~]# ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 =
> /usr/lib/libwrap.so.0 (0x00655000)
[root@myserver ~]#