Tcp_wraper介绍
Tcp_wraper跟iptables一样也是Linux中的一种访问控制。但是跟iptables是一个框架,工作在内核空间;而Tcp_wraper实际上是一个库文件libwrap.so,工作于用户空间,简易的访问控制。当有某个程序在编译时加上了tcp_wraper的库从而就可以使用tcp_wraper进行访问控制。比如受Tcp_wraper控制的程序如FTP,SSH,Xinetd(包括代理的全部服务)等。
Tcp_wraper控制文件
1 2 3 4 |
/etc/hosts.deny #黑名单 /etc/hosts.allow #白名单 |
Tcp_wraper控制顺序,是先检查/etc/hosts.allow,匹配则允许通过;没有匹配到的规则则进入下一条,再检查/etc/hosts.deny黑名单,匹配则拒绝;没有匹配到规则则进入默认规则
,默认规则是允许。
Tcp_wraper控制文件的语法实例
1.查看Tcp_wraper语法帮助
1 |
[root@localhost ~]# man 5 hosts_access |
2.SSHD仅允许172.16.0.0/16访问
1 2 3 4 |
[root@localhost ~]# vim /etc/hosts.allow sshd: 172.16. [root@localhost ~]# vim /etc/hosts.deny sshd: ALL |
3.telnet不允许172.16.0.0/16但是允许172.16.16.1访问
1 2 3 4 |
[root@localhost ~]# vim /etc/hosts.allow in.telnet: 172.16.16.1 [root@localhost ~]# vim /etc/hosts.deny in.telnet: 172.16. |
4.SSHD仅允许172.16.16.1访问并且把成功访问的和拒绝访问的主机记录到日志
1 2 3 4 |
[root@localhost ~]# vim /etc/hosts.allow sshd:172.16.16.1 :spawn echo “`date` Login attempt from %c to %s”>> /var/log/wrapper_allow.log [root@localhost ~]# vim /etc/hosts.deny sshd: all :spawn echo “`date` Login attempt from %h” >> /var/log/weaper_deny.log |
Tcp_wraper宏
1 2 3 4 5 6 7 |
%c:client information(user@host) %s:service info(server@host) %h:client hostname %p:server PID |
Nsswitch框架
nsswitch名称解析服务框架用来在认证跟存储认证方式之间做转换的,如/bin/login程序不光可以以配置文件的方式提供认证还可以根据MySQL,LDAP,NIS这些查询速度更快的程序来存储。但是如果直接把这些程序中的某一个当做默认程序编译进/bin/login程序,那么用户再想选择不同的程序存储用户账号时就需要重新编译/bin/login程序;所以Redhat系统就在/bin/login和file、MySQL、LDAP、NIS这些认证程序之间加了一个服务框架nsswitch(network service switch,网络服务转换又叫名称解析开关)。借助nsswitch可以定义,如找用户UID到/etc/passwd,用户密码到/etc/shadow,用户GID到/etc/group,域名解析到/etc/hosts,端口解析到/etc/services等等。
Nsswitch有配置文件和各种库文件,当需要更换账号密码的存储方式时只需要更改nsswitch的配置文件,它会根据配置来找对应的库。
配置文件:/etc/nsswitch.conf
库文件如:libnss_file.so,libnss_nis.so,libnss_ldap.so
Linux登录认证过程
loginàrootànsswitch.conf(passwd:file)à/etc/passwd
#默认情况下,输入用户名后根据名称解析服务nsswitch框架定义的账号存在文件中后就去查找文件匹配用户名。
loginàpasswdànsswitch.conf(shadow:file)à/etc/shadow
#默认情况下,输入密码后根据名称解析服务nsswitch框架定义的密码存在文件中后就去查找文件提取加密后的密码字符串。
#认证本身也可以不用借助名称解析服务去查找用户原来存放的密码,如PAM。
passwd àmd5(salt)àcompare
#默认情况下,要对输入的密码先使用PAM框架的md5加salt加密并和在文件中提取到密码字符串比较是否一致。