TCP Wrapper
Tcp wrapper是一个通用框架,可以通过tcp wrapper控制服务的访问. 接受或者拒绝相关请求. 类iptables的filter功能. tcp wrapper的库文件名称为:libwrap.so.*. 在程序研发时,调用此程序,即可完成tcp wrapper功能的支持.
判断某服务是否能够由tcp_wrapper进行访问控制的方法
- 动态编译方式服务程序
- ldd (which COMMAND) | grep libwrap
- 静态编译方式服务程序
- string命令,查看应用程序文件,其结果中是否出现了hosts.allow或者hosts.denys
服务基于lib_wrapper完成访问控制的流程
- 首先检查/etc/hosts.allow文件中有没有显示授权访问
- 是 : 直接授权客户端访问
- 否 : 接着去检查/etc/hosts.deny文件中有没有显示拒绝当前请求者访问
- 是: 直接拒绝当前请求者的访问
- 否: 允许请求者访问
配置文件
-
/etc/hosts.allow
-
/etc/hosts.deny
- 语法
daemon_list: Client_list[:options]
-
OPTIONS
-
deny
: 拒绝,主要用于hosts.allow文件sshd: 172.16. :deny #拒绝172.16.0.0/16网段的主机访问
-
allow
: 允许, 主要用于hosts.deny文件 -
spawn
: 启动指定的应用程序vsftpd: ALL :spawn /bin/echo $(date) login attempt from %c to %s %d >> /var/log/vsftpd.deny.log %c : 客户端IP地址 %s : daemon @server_ip %d : daemon name 以上例子在hosts.deny文件中完成配置, 拒绝的访问保存至/var/log/vsftpd.deny.log文件中
-
EXCEPT
: 将except条件后的除外
-
-
client_list
- ip地址
- 主机名
- 网络地址:必须使用完整格式的掩码,不能使用前缀格式掩码
- 可以使用简短格式的网络地址,例如:172.16. 表示172.16.0.0/255.255.0.0
- ALL : 所有主机
- KNOWN: 所有可以反解的主机
- UNKNOWN : 不可以反解的主机
- PARANOID : 正向解析和反向解析不一致
示例:
1 vsftpd仅开放给172.16.0.0/255.255.0.0中的主机访问
vim /etc/hosts.allow
vsftpd: 172.16.
vim /etc/hosts.deny
vsftpd: ALL
2 sshd仅开放给172.16.0.0/255.255.0.0主机访问,但不能包含172.16.100.6
vim /etc/hosts.allow
vsftpd: 172.16. EXCEPT 172.16.100.6
vim /etc/hosts.deny
vsftpd: ALL
3 Centos 6主机上, 控制 telnet服务仅允许172.16.0.0/255.255.0.0网络中的主机访问,但不包含172.16.100.0/255.255.255.0, 对所有正常登录的主机都记录于/var/log/telnet.allow.log中, 对所有被拒绝访问的尝试都记录于/var/log/telnet.deny.log文件中
vim /etc/hosts.allow
in.telnetd: 172.16. EXCEPT 172.16.100.0/255.255.255.0 :spawn /bin/echo $(date) login attempt from %c to %s %d >> /var/log/telnet.allow.log
vim /etc/hosts.deny
in.telnetd: ALL :spawn /bin/echo $(date) login attempt from %c to %s %d >> /var/log/telnet.deny.log
Centos 6主机上的telnet服务托管于xinetd,后者接受libwrap控制 , 使用ldd $(which xinetd) 可以查看是否调用tcp_wrapper
Centos 7主机上的telnet服务未托管于xinetd, 而in.telnetd程序未链接至libwrap
4 sshd: 172.16. EXCEPT 172.16.100.6 :deny
表示允许来自172.16.的网络主机允许访问,但172.16.100.6不能访问, :deny相当于在拒绝所有除172.16.网络并且主机不为172.16.100.6的主机访问. :deny等同于在/etc/hosts.deny文件中添加 sshd: ALL效果一样,只是这种格式, 不需要在添加/etc/hosts.deny中的规则了.
sudo
su(switch user),切换用户 , 用户su的使用方法:
- su -l user
- su -l user -c 'COMMAND'
sudo,能够让获得授权的用户以另一个用户的身份运行指定的命令,其配置文件为:/etc/sudores, 编辑些文件的专用命令为visudo
,配置文件的格式如下:
-
USER HOST=(runas) COMMAND
: 表示USER的用户或组可以在host主机以runas的用户身份运行COMMAND命令-
USER
- USERNAME
- #UID
- %GROUPNAME
- %#GID
- USER_ALIAS : 支持将多个用户定义为一组用户, 称之为用户别名,即user_alias
-
hosts
- IP
- HOSTNAME
- NETADDR : 本主机所在的网络
- LOCALHOST
- host_alias
-
runas
- username
- #UID
- %GROUPNAME
- %#GID
- runas_alias
- 不指的情况下就使用root
-
COMMAND
- command
- directory : (指定目录下的所有命令)
- sudoedit : 特殊权限 ,能编辑sudoers文件,用于向其它用户授予sudo权限(非常危险)
- command_alias
%是引用组的特殊方式 #号是引用用户或组的ID号码
-
-
别名的类型
- User_Alias
- Host_Alias
- Runas_Alias
- Cmnd_Alias
示例: User_Alias NETADMIN=tom,jerry Cmnd_Alias NETCMND=ip,ifconfig,route NETADMIN localhost=(root) NETCMND
-
配置文件中常用标签
- NOPASSWD
-
USERADMIN ALL=(root) NOPASSWD: COMMAND
- 表示执行指定的COMMAND命令, 不需要输入用户的密码
-
- PASSWD
-
USERADMIN ALL=(root) NOPASSWD: COMMAND PASSWD: /usr/bin/passwd
- 表示运行COMMAND不需要输入密码,但运行passwd命令的时候,需要输入用户自己的密码
-
- NOPASSWD
-
sudo的授权注意事项
- 1 不能将sudoedit权限随便授权,相当于给予了root同等的权限
- 2 在授权passwd命令的情况下,用户可以使用passwd命令更改root密码,需要做出特别限制,如下
/usr/bin/passwd[a-z]*,!/usr/bin/passwd root 说明: /usr/bin/passwd[a-z]*,表示必须要在passwd命令后加用户,!/usr/bin/passwd root ,表示不能执行修改root用户的密码命令
网友评论