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服务

  wKiom1nW6RbRO18aAABM0CU2Zhs214.png-wh_50

  wKiom1nW6TSwfPczAABMFWVkv3o120.png-wh_50

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

  wKiom1nW6wzz26mQAABOBeJp77s211.png-wh_50

  wKiom1nW6yrTGuhCAABhaarITDs910.png-wh_50

  172.16.72.1想要访问172.16.72.6的ssh服务

  wKiom1nW62jTga48AAAN_pTkN48669.png-wh_50

  172.16.72.1想要访问172.16.72.6的vsftpd服务

  wKioL1nW66HDJ_nrAAAdVIq8Vtg256.png-wh_50

  172.16.72.2想要访问172.16.72.6的ssh服务

  wKioL1nW686j7RHIAAAa9Rtihbw974.png-wh_50

  172.16.72.2想要访问172.16.72.6的vsftpd服务

  wKiom1nW7FjyKA_lAAA-EyKNJx0066.png-wh_50

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

  wKioL1nW7dvSsaTRAABSU6-3ihA341.png-wh_50

  wKiom1nW7kKQMGOyAAAbavwMugk380.png-wh_50

  172.16.72.1访问:

  wKiom1nW7l3TirHWAAAPFXmxb2c463.png-wh_50


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

   wKiom1nXAIaySJMnAAA5CJSVMmQ176.png-wh_50

  

  where:

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

   ip/hostname:单个主机;

   Network Address:网络地址;

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

  

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

  

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

   command:单个命令授权;

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

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

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


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

  wKiom1nW-5SCa2N3AAAadAmpgKM817.png-wh_50

  wKioL1nW-3qCW61XAABUj_T8gu4055.png-wh_50

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

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

  如:

  wKioL1nW_FCyKl4kAAAdw_17QMM423.png-wh_50

  wKiom1nW_SWT89pGAAAnwKfQ0X0518.png-wh_50

  wKioL1nW_O_BYDoXAAAiKtGNKTM900.png-wh_50

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

  如:su命令限制

  wKiom1nW_0iTLU4QAAAk6kCTf_c448.png-wh_50

  wKioL1nW_yjzh3gJAAAZcW5qf_E901.png-wh_50

  wKiom1nW_4nw4bL8AAAaFfkScy0049.png-wh_50


  nsswitch与pam:

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

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

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

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

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

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

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

   格式为:

   db: store_format1 store_format2...

   如

   wKioL1nXCN7BPqddAAAmg4LUKlY572.png-wh_50

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

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

   wKioL1nXCcvTClj6AAAm_gFZXWo701.png-wh_50

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

   wKioL1nXCgniWDCcAAA4-j7qo9U002.png-wh_50

  

   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

     如:

      wKioL1nXEPbijkGoAAA8HGiv8vQ824.png-wh_50

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

       如:

       wKiom1nXFGHDaa7xAAAn1peDaRM807.png-wh_50 

      

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


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

  

  


本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/1970527


相关文章
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
1253 6
|
域名解析 负载均衡 安全
DNS技术标准趋势和安全研究
本文探讨了互联网域名基础设施的结构性安全风险,由清华大学段教授团队多年研究总结。文章指出,DNS系统的安全性不仅受代码实现影响,更源于其设计、实现、运营及治理中的固有缺陷。主要风险包括协议设计缺陷(如明文传输)、生态演进隐患(如单点故障增加)和薄弱的信任关系(如威胁情报被操纵)。团队通过多项研究揭示了这些深层次问题,并呼吁构建更加可信的DNS基础设施,以保障全球互联网的安全稳定运行。
|
机器学习/深度学习 人工智能 安全
TPAMI:安全强化学习方法、理论与应用综述,慕工大、同济、伯克利等深度解析
【10月更文挑战第27天】强化学习(RL)在实际应用中展现出巨大潜力,但其安全性问题日益凸显。为此,安全强化学习(SRL)应运而生。近日,来自慕尼黑工业大学、同济大学和加州大学伯克利分校的研究人员在《IEEE模式分析与机器智能汇刊》上发表了一篇综述论文,系统介绍了SRL的方法、理论和应用。SRL主要面临安全性定义模糊、探索与利用平衡以及鲁棒性与可靠性等挑战。研究人员提出了基于约束、基于风险和基于监督学习等多种方法来应对这些挑战。
546 2
|
算法 量子技术
|
安全 Java 编译器
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
361 1
|
存储 安全 程序员
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
2712 0
|
区块链 C# 存储
链动未来:WPF与区块链的创新融合——从智能合约到去中心化应用,全方位解析开发安全可靠DApp的最佳路径
【8月更文挑战第31天】本文以问答形式详细介绍了区块链技术的特点及其在Windows Presentation Foundation(WPF)中的集成方法。通过示例代码展示了如何选择合适的区块链平台、创建智能合约,并在WPF应用中与其交互,实现安全可靠的消息存储和检索功能。希望这能为WPF开发者提供区块链技术应用的参考与灵感。
297 0
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
233 0
|
网络协议 安全 网络安全
揭秘互联网的隐形斗篷:你的DNS数据真的安全吗?
【8月更文挑战第27天】在互联网中,每个网站通过IP地址定位,但记忆这些数字困难且存在安全风险。因此,域名系统(DNS)诞生,实现域名与IP之间的转换。然而,未加密的DNS请求易受中间人攻击,导致隐私泄露或恶意软件植入。为解决此问题,DNS-over-HTTPS(DoH)和DNS-over-TLS(DoT)协议应运而生,它们通过对DNS查询进行加密确保数据传输安全。本文将介绍这两种协议,并通过示例展示如何配置支持DoT的DNS服务器,包括安装dnscrypt-proxy、编辑配置文件及重启服务等步骤。
1197 0

推荐镜像

更多
  • DNS