美文网首页
Linux之TCP Wrapper及Sudo使用

Linux之TCP Wrapper及Sudo使用

作者: 魏镇坪 | 来源:发表于2016-03-07 13:39 被阅读408次

    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命令的时候,需要输入用户自己的密码
    • 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用户的密码命令
      

    相关文章

      网友评论

          本文标题:Linux之TCP Wrapper及Sudo使用

          本文链接:https://www.haomeiwen.com/subject/fhnakttx.html