tcp_wrapper,sudo,nsswitch与pam安全解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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服务

  技术分享

  技术分享

  在/etc/hosts.allow中允许172.16.72.2的主机访问,在/etc/hosts.deny中拒绝所有主机访问sshd,vsftpd服务;

  技术分享

  技术分享

  172.16.72.1想要访问172.16.72.6的ssh服务

  技术分享

  172.16.72.1想要访问172.16.72.6的vsftpd服务

  技术分享

  172.16.72.2想要访问172.16.72.6的ssh服务

  技术分享

  172.16.72.2想要访问172.16.72.6的vsftpd服务

  技术分享

  使用EXCEPT关键字,在/etc/hosts.allow中排除172.16.72.2以外的IP地址的访问;

  技术分享

  技术分享

  172.16.72.1访问:

  技术分享


  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

     -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必须都为大写;

   技术分享

  

  where:

   ALL:表示所有主机皆可用;

   ip/hostname:单个主机;

   Network Address:网络地址;

   host_alias事先定义过的主机的别名;

  

  whom:授权用户后续命令的运行着的真实身份,通常是root;

  

  what:此次授权能够执行的命令;

   command:单个命令授权;

   directory:指定目录下所有的命令;

   sudoedit:特殊命令,授权其他用户可以执行sudo命令,并且可以编辑/etc/sudoers文件;

   cmnd_alias:事先定义过的命令别名;


  示例:设置wjq用户管理整个系统中的用户密码

  技术分享

  技术分享

  上图中,wjq用户可以修改root密码,这种操作在现实环境中是不被允许的;

  在配置文件中应设置为passwd后不允许跟随参数root,passwd命令后必须跟随参数;

  如:

  技术分享

  技术分享

  技术分享

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

  如:su命令限制

  技术分享

  技术分享

  技术分享


  nsswitch与pam:

   nsswitch:名称服务开关,进行名称解析,将数字符号转化为计算机能够识别的语言;

   名称解析,根据特定的信息查找某个已经设置好的存储库,查看存储库中是否有符合该关键字的信   息;如passwd存储库,查看用户相关信息,host存储库,查看指定域名或指定IP地址的关联信息等;

   存储库的类型有很多种,如文件,关联型数据库,非关联型数据库,LDAP;

   nsswitch的通用框架为上层应用程序提供统一的接口,将数据转换,从而才能访问下层不同文件系   统的存储库,若是没有中间层的作用,上层应用程序想要访问下层不同的文件系统则需要编写对应文   件系统的程序,而这样的工作量太大,并不适应于当前环境;

   Linux中实现名称解析的通用框架是通过库来实现的:

   /lib64/libnss*<-->/usr/lib64/libnss*

   解析库的配置是由/etc/nsswitch.conf配置文件进行配置的

   格式为:

   db: store_format1 store_format2...

   如

   技术分享

   对passwd,shadow,group,host等进行设置;

   查找对应库中的关键字的信息,使用命令getent

   技术分享

   passwd库中的关键字只用用户名以及uid

   技术分享

  

   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

     如:

      技术分享

     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(一票成功)

       如:

       技术分享 

      

     module-path:相对路径,绝对路径,/lib64/security/*


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

  

  

    


以上是关于tcp_wrapper,sudo,nsswitch与pam安全解析的主要内容,如果未能解决你的问题,请参考以下文章

TCP_Wrapper&sudo

su ,sudo,TCP_Wrappers的相关命令用法及PAM认证机构

AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制

nsswitch&PAM认证框架

nsswitch:名称解析服务

nsswitch&PAM认证框架