99%运维人员都忽略的服务器安全问题

简介: 服务器安全是 IT 行业一个老生常谈的问题了,每年的护网行动,企业内部的安全培训都在提醒每个程序员处理好服务器安全问题已变得刻不容缓

服务器安全是 IT 行业一个老生常谈的问题了,每年的护网行动,企业内部的安全培训都在提醒每个程序员处理好服务器安全问题已变得刻不容缓

如果在安全方面有疏忽,极易造成数据泄露、隐私泄露等重大安全事故

  • 2022年美医疗中心数据泄露,超130万人受影响;
  • 去年一月,勒索软件攻击引发墨西哥州监狱越狱危机;
  • 同样是2022年,红十字国际委员会遭网络攻击,超51万人信息被黑。

作为一名运维人员,必须要了解一些安全运维守则,通过一些手段来保护自己的服务器不受入侵和攻击,再进一步保护自己所负责的业务不受影响

下面我将给大家介绍一些提高服务器安全性的方法论

用户(组)安全

删除特殊的用户和用户组

Linux 系统提供了各种不同角色的系统账号,在系统安装完成之后,默认会安装很多不必要的用户和用户组

如果你用不上这些用户和用户组,应该删除他们,因为账户越多,系统就越不安全,这些你不会注意到的用户很有可能会被黑客给利用,从而威胁服务器的安全

像:adm、sync、shutdown、lp、halt、news、uucp、games 等系统默认用户

以及 adm、news、uucp、dip、popusers 等系统默认用户组

如果你用不上它们,删除掉

删除的方法很简单

#删除用户,-r参数是顺带将该用户的邮件池和家目录一并删除
userdel -r games

#删除用户组
groupdel games

禁止某些用户登录系统的功能

有些情况下,某些用户仅仅用作进程调用或者用户组调用,并不需要登录功能

比如说 mail 用户,很多情况下,我们的邮件服务器只需要进行收取邮件的功能,不需要登录到系统上

所以给它的 shell 设置成 nologin 就行了

#方法一
usermod -s /sbin/nologin mail

#方法二
vim /etc/passwd
然后修改 mail 的 shell

总结一下

关于用户和用户组的删除,其实不是千篇一律的,可以根据服务器的主要用途来决定:如果服务器是 web 应用,那么 apache 用户或 nginx 用户就无需删除;而跟数据库相关的默认用户,例如 mysql 用户就可以删除

合理使用 su、sudo 命令

su 命令是一个切换用户的工具,用于将普通用户切换到超级用户下,也可以将超级用户切换到普通用户

为了保证服务器安全,很多情况都是直接禁止超级用户直接登录系统,而是先通过普通用户登录,再通过 su 命令切换到超级用户

但是 su 命令会导致一些安全问题:普通用户想要使用 su 命令切换到超级用户,就首先要知道超级用户的密码,如果有多个普通用户,那么这多个普通用户都知道超级用户的密码,这在一定程度上会对系统的安全造成威胁

超级用户的密码应该掌握在少数人手里

这时候 sudo 命令登场了

sudo 命令允许管理员分配给普通用户一些合理的“权利”,并且不需要普通用户知道超级用户的密码,就能让普通用户执行一些只有超级用户或其他特权用户才能完成的任务,比如服务重启,修改配置文件等

sudo 命令也叫受限制的 su

sudo 命令的执行流程是:将当前用户切换到超级用户下(或切换到指定用户),然后以超级用户(指定用户)身份执行命令,执行完成后,直接退回到当前用户

举个例子:普通用户是无法访问 /etc/shadow 文件的

[user1@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够

如果要让 user1 能够访问这个文件,可以在 /etc/sudoers.d/ 添加下面内容:

[root@localhost ~]$vim  /etc/sudoers.d/user1
user1 ALL=/bin/cat /etc/shadow

添加之后我们用 user1 执行一下

[user1@localhost ~]$ sudo cat /etc/shadow
[sudo] user1 的密码

输入 user1 的密码之后就可以查看文件了

如果普通用户没有在 /etc/sudoers.d/ 或/etc/sudoers 中配置,同样无法查看

[user2@localhost ~]$ sudo cat /etc/shadow
[sudo] user2 的密码:
user2 不在 sudoers 文件中。此事将被报告。

sudo 使用时间戳文件来完成类似“检票”的功能:当用户输入密码之后就获得了一张默认存活期为5分钟的入场券,超时以后,用户必须重新输入密码才能获得相应的权限

这样会导致一个问题:如果超时就要重新输入密码,像一些自动调用超级权限的程序就会出现问题

我们可以通过下面的设置让普通用户无需输入密码也可执行具有超级权限的程序,例如需要 user1 用户 可以自动重启 network 的权限

[root@localhost ~]$vim  /etc/sudoers.d/user1
user1 ALL = NOPASSWD: /etc/init.d/network restart

这样 user1 用户就可以执行重启 network 的脚本而无需输入密码了

如果要让 user1 具有超级用户的所有权限,又不想输入超级用户的密码,只需要添加如下内容即可

[root@localhost ~]$vim  /etc/sudoers.d/user1
user1 ALL = (ALL) NOPASSWD: ALL

密码安全

使用强密码而非弱密码

这个准则想必大家都听过了,一个强大健壮的密码,能让你的系统安全性翻倍提高

什么是强密码:

  • 至少 12 个字符长,但 14 个或 14 个字符以上更好
  • 大写字母、小写字母、数字和符号的组合
  • 不是可以在词典或人员、角色、产品或组织名称中找到的单词

使用密钥认证作为远程登录系统的认证方式

Linux 中,远程登录系统有两种认证方式:

  1. 密码认证
  2. 密钥认证

关于密码认证,虽然设置一个密码对系统安全能够起到一定作用,但是当遇到像密码暴力破解、密码泄露、密码丢失等问题时,我们往往就会束手无策,而且强密码也会对我们的工作造成一定负担

而密钥认证是一种新型的认证方式,公用密钥存储在远程服务器上,专用密钥保存在本地,当需要登录系统时,通过本地专用密钥和远程服务器的公用密钥进行配对认证,如果认证成功就能登陆

这种认证方式避免了被暴力破解的风险,同时只要保存在本地的专用密码不被黑客盗用,是一般无法通过密钥认证的方式进入系统的

系统安全

关闭系统不需要的服务

Linux 绑定了很多没用的服务,这些服务默认都是自动启动的

对于服务器来说,运行的服务越多,系统就越不安全,因此关闭一些不需要的服务,对系统安全有很大的帮助

但具体要关闭那些服务,需要根据服务器的用途而定,一般情况下,只要系统本身用不到的服务都认为是不必要的服务

例如某台 Linux 服务提供 web 服务,那么除了 httpd 服务或者 nginx 服务和系统运行时必需的服务外,其他服务都可以关闭

下面列出一下不常用的服务,大家可以自行选择关闭

anacron、auditd、autofs、avahi-daemon、avahi-dnsconfd、bluetooth、cpuspeed、firstboot、gpm、haldaemon、hidd、ipsec、isdn、lpd、mcstrans、nscd

关闭服务自启动的方法可以通过 chkconfig 命令实现

#关闭 bluetooth 服务
chkconfig --level 345 bluetooth off

对所有需要关闭的服务都执行上面的操作之后,重启服务器即可

而为了系统能够安全稳定的运行,就不得不运行一些服务,如下所示

  • acpid:用于电源管理
  • apmd:高级电源能源管理服务,用于监控电池性能
  • kudzu:检测硬件是否变化的服务
  • crond:为 Linux 下自动安排的进程提供运行服务
  • atd:类似于 crond,提供计划任务功能
  • keytables:用于装载镜像键盘
  • iptables:Linux 内置防火墙软件
  • xinetd:支持多种网络服务的核心守护进程
  • network:Linux 网络服务
  • sshd:提供远程登录 Linux 的服务
  • syslog:记录系统日志的服务

文件权限检查和修改

不正确的文件权限设置会直接威胁系统的安全,因此运维人员应该能及时发些这些不正确的权限设置,并立即修改

查找系统中任何用户都具有写权限的文件或目录

#查找文件
find / -type f -perm 2 -o -perm -20 | xargs ls -al

#查找目录
find / -type d -perm 2 -o -perm -20 | xargs ls -ld

查找系统中具有 s 权限的程序

find / -type f -perm 4000 -o -perm -2000 -print | xargs ls -al

含有 s 权限的程序对系统安全威胁很大,上面的命令可以把某些不必要的 s 权限的程序去掉,防止用户滥用权限或者提升权限

检查系统中所有 suid 和 sgid 文件

find / -user root -perm 2000  -print | xargs md5sum

find / -user root -perm 4000  -print | xargs md5sum

检查系统中没有属主的文件

find / -nouser -o -nogroup

没有属主的孤儿文件往往容易成为黑客利用的工具,因此再找到这些文件之后,要么删除要么修改文件的属主

相关文章
|
2月前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
2天前
|
存储 弹性计算 运维
端到端的ECS可观测性方案,助力云上业务安全稳定
本文介绍了云原生时代保障业务系统可靠性的方法和挑战,重点探讨了阿里云ECS在提升业务稳定性、性能监控及自动化恢复方面的能力。文章分为以下几个部分:首先,阐述了业务可靠性的三个阶段(事前预防、事中处理、事后跟进);其次,分析了云上业务系统面临的困难与挑战,并提出了通过更实时的监测和自动化工具有效规避风险;接着,详细描述了ECS实例稳定性和性能问题的解决方案;然后,介绍了即将发布的ECS Lens产品,它将全面提升云上业务的洞察能力和异常感知能力;最后,通过具体案例展示了如何利用OS自动重启和公网带宽自适应调节等功能确保业务连续性。总结部分强调了ECS致力于增强性能和稳定性的目标。
|
29天前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:使用Ansible进行服务器管理
在现代IT基础设施中,自动化运维已成为提高效率和可靠性的关键。本文将引导您通过使用Ansible这一强大的自动化工具来简化日常的服务器管理任务。我们将一起探索如何配置Ansible、编写Playbook以及执行自动化任务,旨在为读者提供一条清晰的路径,从而步入自动化运维的世界。
|
27天前
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
28天前
|
运维 Ubuntu 网络协议
自动化运维:使用Ansible进行服务器配置管理
在现代IT架构中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和标准化服务器的配置管理过程。通过具体的代码示例和操作步骤,我们将展示如何快速部署应用、管理配置以及自动化日常任务,从而确保环境的一致性和可靠性。
|
9天前
|
人工智能 运维 自然语言处理
今晚围观—>安全运维工程师现场直播用通义灵码发现和修复代码漏洞
12 月 18 日晚 19:30 分,阿里云中小企业直播间「AI 编码助手一年养成记:从“打酱油”到企业开发“真正助手”」见。
|
2月前
|
运维 安全 Ubuntu
自动化运维:使用Ansible进行服务器配置管理
在现代IT基础设施中,自动化运维是确保高效、稳定和安全服务的关键。本文将深入介绍如何使用Ansible这一开源工具来简化服务器配置管理工作,从基础安装到高级应用,我们将一步步展示如何通过Ansible Playbooks实现自动化部署和维护,旨在帮助读者构建更加灵活和可扩展的运维体系。
47 7
|
2月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
33 2
|
2月前
|
运维 应用服务中间件 调度
自动化运维:使用Ansible实现服务器批量管理
【10月更文挑战第26天】在当今快速发展的IT领域,自动化运维已成为提升效率、降低人为错误的关键技术手段。本文通过介绍如何使用Ansible这一强大的自动化工具,来简化和加速服务器的批量管理工作,旨在帮助读者理解自动化运维的核心概念和实践方法。文章将围绕Ansible的基础使用、配置管理、任务调度等方面展开,通过实际案例引导读者深入理解自动化运维的实现过程,最终达到提高运维效率和质量的目的。

热门文章

最新文章