【安全与加密】TCP-Wrapper与PAM模块

本文深入探讨了TCP-Wrapper和PAM模块在Linux系统中的安全控制。TCP-Wrapper通过hosts.allow和hosts.deny文件实现对TCP服务的访问控制,而PAM(Pluggable Authentication Modules)提供了灵活的验证机制,支持多种验证模块,可在不同应用程序间共享。通过配置PAM,可以实现更复杂的访问策略和验证流程。

TCP-Wrapper

TCP wrappers 通常被称为 wrappers,它是由 Wieste Venema 编写,已经出现几年了。其背后的思想很简单,其要旨是可以在 (UNIX/Linux) 主机上快速轻松地锁定流行的通过 TCP 访问的客户端。

Wrappers 允许系统管理员控制 wrappers 支持的基于 TCP 的服务或守护进程的访问。Tcpd 控制从 /etc/inetd.conf 中运行的 TCP 守护进程。不过,很多基于 TCP 的应用程序已加入 wrappers 支持(一般使用 libwrap 库),并且能感知 wrapper;不通过 /etc/inetd.conf 进行控制也没有关系。可以在 wrappers 下进行访问控制的通常有 telnet、ssh、sendmail、ftp 包、pop3 和 stunnel。

Wrappers 提供对基于 UDP 的连接的有限控制,不过我建议使用内置或第三方防火墙进行基于 UDP 的访问。

如果要看应用程序是否支持 wrapper,使用 strings 命令和 grep 获取 hosts_access 或 host:

# strings /usr/sbin/sshd|grep hosts_access``@(#)65 1.1 src/tcpwrapper/usr/sbin/tcpwrapper/hosts_access.c, tcpwrap, 53twrp2``10, 0617A_53twrp210 2/27/06 04:52:25

或者可以使用 ldd 命令:

ldd </``path``/application> | grep libwrap

wrappers 守护进程称为 tcpd。得到调用的是它,而非 /etc/inetd.conf 文件中的实际守护进程。Tcpd 读取两个文件,hosts.allow 和 hosts.deny,读取时基于这两个文件中的规则。当找到第一条规则匹配后,会拒绝或允许调用客户端的访问。所有操作都会被记录到消息文件或指定的日志文件中,这可以通过 syslog 来确定。通常情况下,hosts.allow 包含允许访问的规则,而 hosts.deny 包含拒绝访问的规则。

下面看一下典型的 telnet 客户端场景,它是这样工作的。客户端试图通过 telnet 会话连接到配置有 wrappers 的主机上。未知的客户端连接到 wrappers 守护进程,而不是实际的 telnentd 守护进程。根据 hosts.allow 或 hosts.deny 文件中的规则,会允许或拒绝该客户端的访问。如果拒绝访问,就会终止 telnet 连接。如果该客户端符合允许访问规则,那么 tcpd 就会交出对所调用的实际守护进程的控制权(本例中是 telnetd)。无论哪种情况,许可或拒绝访问都会通过 syslog 被记录下来。

构建 wrappers

配置 wrappers

下一个任务是在 /etc/inetd.conf 中调用 tcpd 而不是实际的守护进程或服务。首先,创建 /etc/inetd.conf 的备份。在本例中,我仅仅替换想要控制访问的守护进程。我会用 tcpd 替代 ftpd 和 telnetd 作为 /etc/inetd.conf 中的调用守护进程。随意保护此文件中的其他守护进程。/etc/inetd.conf 中我们感兴趣的行有:

ftp   stream tcp6   nowait root  /usr/sbin/ftpd       ftpd ``telnet stream tcp6  nowait root  /usr/sbin/telnetd    telnetd -a

我们只是替换想要保护的守护进程,本例中是用 tcpd 替换 ftpd 和 telnetd。编辑完成后,更改以下配置:

ftp   stream tcp6  nowait root  /usr/sbin//tcpd     ftpd``telnet stream tcp6  nowait root  /usr/sbin/tcpd    telnetd -a

下一步,刷新 inted 让更改生效。

# refresh -s inetd

根据以上所述,对于其他的 wrapper 支持的第三方应用程序,应查询 hosts.allow 和 hosts.deny 文件。履行文件中的规则从而拒绝或允许对自己的客户端的访问是应用程序的责任。我们现在开始配置主机文件。

wrappers 会默认记录到 /var/adm/messages,使用的是设备级的权限:

auth.info  /var/adm/messages

如果您在 makefile 中指定了 LOCAL 设备,那么您必须告诉 syslog 使用 syslog.conf 中哪个文件。以下示例中,所有在 wrappers 中使用 LOCAL 的消息都记录到 /var/adm/wrappers.log 文件中。

local0.info       /var/adm/wrappers.log

确保在重启 syslog 之前创建 wrappers.log 文件:

# refresh -s syslogd

规则

要关闭 wrappers,只需将 hosts.allow 和 hosts.deny 文件改成其他文件名即可。如果不存在允许或拒绝访问文件,wrappers 将不会使用访问控制,从而有效关闭 wrappers 。或者将主机文件清空或清零,这会有同样的效果。

Wrappers 首先在 hosts.allow 文件中查找规则匹配。如果找到匹配,那么 tcpd 会根据规则停下来,批准或拒绝访问。如果在 hosts.allow 文件中未找到匹配,那么 tcpd 会读取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒绝访问,否则批准访问。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值