Linux下的常见错误配置
经过对大量客户的配置审计与渗透测试,我们总结出了一些Linux系统下的常见配置错误。我们相信总结、回顾这些常见错误可以在以后为我们节省更多时间与资源,更重要的是可以帮助系统管理员,使其服务器更加安全可靠。
五个常见配置错误如下:
1、用户/home目录的权限
2、系统中的getgid与setuid程序
3、全局可读/可写的文件/目录
4、使用包含漏洞的服务
5、默认的NFS挂载选项或不安全的导出选项
1、用户的/home目录权限
在大部分Linux发行版中,/home目录的默认权限是755,即任何登录系统的用户都可以访问其他用户的/home目录。而某些用户如管理员或开发者,可能会在他们自己的用户目录下存放某些敏感信息,如密码、访问当前或其它网络服务器的key等。
2、系统中的setgid与setuid程序
文件的set uid位非常危险,因为它可能允许文件以一种特权用户的身份运行,如root用户:如果某个文件的所有者是root,并且设置了setuid位,那么在其运行时就是以root权限运行的。这意味着如果攻击者找到了该文件的漏洞,或者以一种非预期的方式运行了该程序,那他很有可能能够以root权限执行自己构造的命令,那么整个系统的权限就沦陷了。
3、全局可读/可写的文件/目录
全局可读与可写的文件和目录产生的问题与之前介绍的因用户主目录权限配置不当引起的问题类似,但其影响范围可能涉及到整个系统。产生全局可读的文件的主要原因是,创建文件的默认umask掩码是0022或0002,正是由于这种不当的配置,那些可能包含敏感信息的文件可能被登录系统的任何人读取到。如果文件是全局可写的,那么也可能被任何人修改,也因此可能导致攻击者有机会修改某些文件或脚本来隐藏自己,并通过修改管理员经常使用的脚本来执行某些敏感命令。
4、配置不当的服务或设置
应该运行那些最小化配置的服务。经常会看到有些服务配置不当或使用默认的证书与配置,使用不安全的通信渠道的现象也非常常见,加重了服务器被攻击的风险。在使用某项服务时,需要对其选项和配置进行复审,以确保部署的安全或配置恰当。但同时也经常看到有些服务被绑定到多个端口,而不是只进行本地监听或只监听某个特定端口。
5、默认的挂载选项或不安全的导出选项
所有挂载的默认选项都是“rw, suid, dev, exec, auto, nouser, async”。但是使用这些默认选项是不恰当的,因为它们允许如NFS协议等外部挂载的文件系统中的文件被设置suid位和guid位。当导出NFS共享时,建议不要设置no_root_squash选项。通常默认为root_squash选项,但我们经常看到其在实际使用中会被修改。如果设置了no_root_squash选项,当用户以root用户登录时,对这个共享目录来说就拥有了root权限,可以作任何事。这些不当设置如果保持默认,就会允许root用户登录服务器,但本来不应该允许这种权限的用户登录的。
这些设置在配置Linux服务器时经常会被忽视,而恰恰是这些不当配置,使攻击者或恶意用户可以非法获得大量信息,或者提升自己在服务器中的权限。掩耳盗铃和一叶障目总比老老实实地加固系统来得简单,但是如果不想在自己睡得正香的时候服务器被人XXOO,就去踏踏实实地加固你的系统吧。
作者 Taskiller [via infosecinstitute]
- 探寻ASP.NET MVC鲜为人知的奥秘(3):寻找多语言的最佳实践方式
- 探寻ASP.NET MVC鲜为人知的奥秘(2):与Entity Framework配合,让异步贯穿始终
- Canvas 剪切图片
- 探寻ASP.NET MVC鲜为人知的奥秘(1):对LESS的支持
- Canvas 图片平铺设置
- Canvas 给图形绘制阴影
- State模式的经典应用场景:订单处理(c#实现)场景描述遇到问题解决问题走起
- ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用Grunt和Gulp使用Grunt准备项目配置NPM配置Grunt集成起来监测文件变化与V
- 有趣的算法(三)——Hash算法
- JavaScript中的数据类型
- Logistic回归算法及Python实现
- <script>元素在XHTML中的用法
- 有趣的算法(四)——一致性Hash算法模拟redis集群
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kafka核心API——Connect API
- PyQt5 技术篇-设置alignment对齐方式。Qt Designer设置文本对齐方式。居中、左对齐、右对齐、上对齐、下对齐。
- Nginx部署Vue项目以及解决刷新页面404
- Kafka核心API——Stream API
- Kafka核心API——Consumer消费者
- Kafka核心API——Producer生产者
- Linux Lab v0.5 正式发布,功能强大,用法简单
- Kafka核心API——AdminClient API
- PyQt5 技术篇-调用颜色对话框(QColorDialog)获取颜色,调色板的调用。
- Kafka的安装与配置
- PyQt5 技术篇-如何彻底删除控件?布局移除控件方法。
- PyQt5 技术篇-设置滚动条拉动位置,scrollArea滚动条位置设置方法。
- CentOS8更换yum源后出现同步仓库缓存失败的问题
- log4j配置方式
- 基于MHA搭建MySQL Replication集群高可用架构