linux中如何查看服务是否可以使用tcpwraps来进行访问控制?

今天有人问我,如果有四个程序: xinetd, httpd,sshd,syslogd 如何可以查到这4个程序中,支持tcpwrap的程序呢?
据我所知,如果支持tcpwrap就一定有libwrap的库文件参与。那么程序在运行的时候肯定会加载相应的库模块。
而查询加载的模块命令我们用ldd。可是查询的时候如何快速查询是否有libwrap的模块呢?就需要我们写一个简单的shell脚本了。。。呵呵
分解一下: 首先第一步。测试一下 xinetd程序在那里。可以用which命令来定位。
[root@RHEL5 ~]# which xinetd
/usr/sbin/xinetd
得到结果是/usr/sbin/xinetd这个程序,然后利用ldd 查看该程序加载了哪些模块。
[root@RHEL5 ~]# ldd /usr/sbin/xinetd
linux-gate.so.1 => (0x00e7b000)
libselinux.so.1 => /lib/libselinux.so.1 (0x0036f000)
libwrap.so.0 => /usr/lib/libwrap.so.0 (0×00582000) libnsl.so.1 => /lib/libnsl.so.1 (0×00294000)
libm.so.6 => /lib/i686/nosegneg/libm.so.6 (0×00256000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0×00110000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0×00386000)
libdl.so.2 => /lib/libdl.so.2 (0x00a7c000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00d72000)
/lib/ld-linux.so.2 (0x006db000)
我们需要的只是知道黑体显示的那一栏信息。这样我们知道了,xinetd程序是支持tcpwrap的程序。
接着,我们可以做得更好。利用shell脚本的特性。
[root@RHEL5 ~]# ldd $(which xinetd) | grep libwrap
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00c81000)
当然我还需要个循环来逐个显示不同服务对tcpwrap的支持。因此写出个简单的脚本。
#/bin/bash
# 测试程序对tcpwrap的支持。
# yoyojacky2009@gmail.com
for i in sshd syslogd httpd xinetd
do echo $i ; ldd $(which $i) | grep libwrap ;
done
写完后,记得给这个文件赋权:
[root@RHEL5 ~]# chmod +x ceshi.sh
然后执行以下,测试结果如下:
[root@RHEL5 ~]# ./ceshi.sh
sshd
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00c6a000)
syslogd
httpd
xinetd
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00c7c000)
结果显示,只有xinetd和sshd这两个程序支持tcpwrap功能。大家可以举一反三,通过这种方法查询更多的模块。找到程序中共同的模块,更好地理解linux的工作原理。

About 李 伟斌

Just K.I.S.S To Be Or Not To Be, It's Your Qustion. --Keep It Simple & Stupid.
This entry was posted in Linux and tagged , , , , , , . Bookmark the permalink.

2 Responses to linux中如何查看服务是否可以使用tcpwraps来进行访问控制?

  1. shanych says:

    很棒!Shell脚本也写得很简洁!

发表评论