tcp_wrapper,sudo,nsswitch与pam安全解析

人生处万类,知识最为贤。这篇文章主要讲述tcp_wrapper,sudo,nsswitch与pam安全解析相关的知识,希望能为你提供帮助。
  tcp_wrapper作为tcp协议的一种封装机制,主要适用于允许或拒绝某个或某段IP地址对本机访问,之前讲过的关于用户控件的防火墙应用工具iptables也可以实现这一功能,iptables可以针对所有的应用程序服务进行限制,而txp_wrapper这类的封装器只能针对于sshd以及vsftpd服务;
  判断一个应用程序是否受tcp_wrapper管制,只需要查看他是否具有libwrap.so这个库即可;
  tcp_wrapper的相关配置文件有/etc/hosts.allow,/etc/hosts.deny
  /etc/hosts.allow:针对于允许访问的IP地址,但也可以写入拒绝访问的IP地址;优先级高;
  /etc/hosts.deny:针对于拒绝访问的IP地址,但也可以写入允许访问的IP地址;优先级低;
  配置文件格式:
    daemon_list:client_list [option]
  daemon_list:应用程序文件列表,如ssh服务,其文件名称为sshd;
  client_list:允许或拒绝的IP或IP段;不能使用前缀格式的IP地址,如172.16.72.1/16,如果有掩码则必须写成172.16.72.1/255.255.255.0的形式;也可以写成IP段的形式,如172.16.,表示172.16这个网段的所有IP地址;
  option:allow,允许访问;
        deny,拒绝访问;
        spawn:生成,发起,执行;
  在/etc/hosts.allow中允许172.16.72.2主机访问172.16.72.6主机的ssh服务
   

tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  在/etc/hosts.allow中允许172.16.72.2的主机访问,在/etc/hosts.deny中拒绝所有主机访问sshd,vsftpd服务;
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  172.16.72.1想要访问172.16.72.6的ssh服务
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  172.16.72.1想要访问172.16.72.6的vsftpd服务
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  172.16.72.2想要访问172.16.72.6的ssh服务
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

    172.16.72.2想要访问172.16.72.6的vsftpd服务
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  使用EXCEPT关键字,在/etc/hosts.allow中排除172.16.72.2以外的IP地址的访问;
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  172.16.72.1访问:
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片



  sudo:
  在生产环境中,使用root用户作为常用用户是非成危险的操作,容易被别人利用root用户进行某种破环性的操作,所以在工作当中,使用普通用户进行管理,在需要使用root用户时,使用su或者sudo命令临时切换root权限就是一个较为安全的操作;
  su切换用户,完全切换以及非完全切换;
  完全切换:su - username
  非完全切换:su username
  暂时获取root权限,当执行完命令后返回bash界面:su -c ‘COMMAND‘
  虽然su命令可以帮助我们切换到root用户下执行,但是这样也不利于系统的安全性操作,假如一名运维人员被分配到的工作是管理网络方面的配置,但是如果他使用的是su -c这样的操作模式,他就不仅仅能对网络配置文件进行操作了,权限几乎可以进行任何操作,所以在真正的生产环境中,使用的几乎都是配置指定命令的sudo;
  sudo命令,可以根据/etc/sudoers配置文件中的配置信息,指定哪个用户可以借用sudo命令使用在root权限下能够使用的那些命令;
  在/etc/sudoers配置文件中,一行只能有一个授权
  其格式为:
    who where=(whom) what
    user client=(runas) COMMANDS
  sudo命令:
    sudo [option]... command
【tcp_wrapper,sudo,nsswitch与pam安全解析】      -u user:以指定的用户身份运行命令;
      -l [command]:列表显示当前用户能以sudo的方式运行
      的所有命令;
      -k:清空缓存,再一次使用sudo就需要输入密码;
    sudo -k
    (第一次执行sudo输入密码后,会有缓存保存300秒,这样300秒内执行sudo就不需要输入密码)
  /etc/sudoers编写格式:
  who:
    user:用户名;
    #uid:指定用户的uid;
    %group:指定组;
    %#gid:指定组的gid;
    user_alias:事先定义好的用户别名;
  在配置文件中定义别名:
  Alias_Type:
    User_Alias:设置用户别名;
    Host_Alias:设置sudo范围别名;
    Cmnd_Alias:设置命令别名;
    Runas_Alias:一般为root;
  设置别名:
    Alias_Type NAME=item1,item2....
    NAME必须都为大写;
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
  where:
    ALL:表示所有主机皆可用;
    ip/hostname:单个主机;
    Network Address:网络地址;
    host_alias事先定义过的主机的别名;
   
  whom:授权用户后续命令的运行着的真实身份,通常是root;
   
  what:此次授权能够执行的命令;
    command:单个命令授权;
    directory:指定目录下所有的命令;
    sudoedit:特殊命令,授权其他用户可以执行sudo命令,并且可以编辑/etc/sudoers文件;
    cmnd_alias:事先定义过的命令别名;


  示例:设置wjq用户管理整个系统中的用户密码
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  上图中,wjq用户可以修改root密码,这种操作在现实环境中是不被允许的;
  在配置文件中应设置为passwd后不允许跟随参数root,passwd命令后必须跟随参数;
  如:
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

  类似于passwd这类的可以对root用户进行修改的特殊命令还有su,sudo等,这两个命令一旦授权就必须考虑好怎样排除root登录的情况,避免普通用户使用其进行root登录操作;需要注意的是sudoedit,可以使普通用户修改/etc/sudoers配置文件;
  如:su命令限制
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片



  nsswitch与pam:
    nsswitch:名称服务开关,进行名称解析,将数字符号转化为计算机能够识别的语言;
    名称解析,根据特定的信息查找某个已经设置好的存储库,查看存储库中是否有符合该关键字的信   息;如passwd存储库,查看用户相关信息,host存储库,查看指定域名或指定IP地址的关联信息等;
    存储库的类型有很多种,如文件,关联型数据库,非关联型数据库,LDAP;
    nsswitch的通用框架为上层应用程序提供统一的接口,将数据转换,从而才能访问下层不同文件系   统的存储库,若是没有中间层的作用,上层应用程序想要访问下层不同的文件系统则需要编写对应文   件系统的程序,而这样的工作量太大,并不适应于当前环境;
    Linux中实现名称解析的通用框架是通过库来实现的:
    /lib64/libnss*< --> /usr/lib64/libnss*
    解析库的配置是由/etc/nsswitch.conf配置文件进行配置的
    格式为:
    db: store_format1 store_format2...
    如
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

    对passwd,shadow,group,host等进行设置;
    查找对应库中的关键字的信息,使用命令getent
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

    passwd库中的关键字只用用户名以及uid
   
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

   

    pam:
    pluggable authentication modules 插入式认证模块
    通用的认证框架;
    pam认证的功能模块亦是通过库来实现,pam的库都存储在/lib64/security(CentOS7)
    配置文件:
      全局认证配置文件:/etc/pam.conf
      格式:
      application type control module-path module-options
      为每一种应用所提供的专用的配置文件:/etc/pam.d/*
      格式:
      type control module-path module-options
      如:
       
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片

      type:
        auth:账户的认证授权配置有关;
        account:表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登             录系统等;
        session:服务开始前,服务结束后需要进行的附加操作;
        password:修改密码后,根据密码复杂度进行的相应操作;
      control:
        require:隐性的一票否决,若有条目未被满足,不立刻中断认证而是继续查看条目,直到             条目结束才中断认证;
        requisite:显性的一票否决,若有条目未被满足则立刻中断认证;
        sufficient:当本条目满足时,若该条目之前的所有条目都被满足了,则整个栈立即终止并             立即返回认证成功的信号;如果本条目的验证失败,还需要继续参考其他的条目规             则;一票通过;没有一票否决;会当做optional对待
        optional:无足轻重,不管成功还是失败都不影响全局;
        include:将其他的配置文件中的流程栈包含在当前位置,就好像把其他的配置文件的配置             内容复制到当前文件
        substack:运行其他配置文件的流程,但与include不同的是其在子栈中运行,其运行结果             不影响主栈;
      status:
        user_unknown:用户未知,无法查找到;
        success:成功后返回什么结果,通常为ok;
        default:默认情况下返回什么结果;
      action:返回的动作;ok,N,bad,ignore,die(一票否决),done(一票成功)
        如:
       
tcp_wrapper,sudo,nsswitch与pam安全解析

文章图片
 
       
      module-path:相对路径,绝对路径,/lib64/security/*


      module-arguments:默认的模块参数;
   
   
     



    推荐阅读