公众号:咸鱼爱搞机
服务器安全是 IT 行业一个老生常谈的问题了,每年的护网行动,企业内部的安全培训都在提醒每个程序员处理好服务器安全问题已变得刻不容缓
如果在安全方面有疏忽,极易造成数据泄露、隐私泄露等重大安全事故
2022年美医疗中心数据泄露,超130万人受影响;
去年一月,勒索软件攻击引发墨西哥州监狱越狱危机;
同样是2022年,红十字国际委员会遭网络攻击,超51万人信息被黑。
作为一名运维人员,必须要了解一些安全运维守则,通过一些手段来保护自己的服务器不受入侵和攻击,再进一步保护自己所负责的业务不受影响
下面我将给大家介绍一些提高服务器安全性的方法论
Linux 系统提供了各种不同角色的系统账号,在系统安装完成之后,默认会安装很多不必要的用户和用户组
如果你用不上这些用户和用户组,应该删除他们,因为账户越多,系统就越不安全,这些你不会注意到的用户很有可能会被黑客给利用,从而威胁服务器的安全
像:adm、sync、shutdown、lp、halt、news、uucp、games 等系统默认用户
以及 adm、news、uucp、dip、popusers 等系统默认用户组
如果你用不上它们,删除掉
删除的方法很简单
有些情况下,某些用户仅仅用作进程调用或者用户组调用,并不需要登录功能
比如说 mail 用户,很多情况下,我们的邮件服务器只需要进行收取邮件的功能,不需要登录到系统上
所以给它的 shell 设置成 nologin 就行了
总结一下
关于用户和用户组的删除,其实不是千篇一律的,可以根据服务器的主要用途来决定:如果服务器是 web 应用,那么 apache 用户或 nginx 用户就无需删除;而跟数据库相关的默认用户,例如 mysql 用户就可以删除
su 命令是一个切换用户的工具,用于将普通用户切换到超级用户下,也可以将超级用户切换到普通用户
为了保证服务器安全,很多情况都是直接禁止超级用户直接登录系统,而是先通过普通用户登录,再通过 su 命令切换到超级用户
但是 su 命令会导致一些安全问题:普通用户想要使用 su 命令切换到超级用户,就首先要知道超级用户的密码,如果有多个普通用户,那么这多个普通用户都知道超级用户的密码,这在一定程度上会对系统的安全造成威胁
超级用户的密码应该掌握在少数人手里
这时候 sudo 命令登场了
sudo 命令允许管理员分配给普通用户一些合理的“权利”,并且不需要普通用户知道超级用户的密码,就能让普通用户执行一些只有超级用户或其他特权用户才能完成的任务,比如服务重启,修改配置文件等
sudo 命令也叫受限制的 su
sudo 命令的执行流程是:将当前用户切换到超级用户下(或切换到指定用户),然后以超级用户(指定用户)身份执行命令,执行完成后,直接退回到当前用户
举个例子:普通用户是无法访问 /etc/shadow 文件的
如果要让 user1 能够访问这个文件,可以在 /etc/sudoers.d/ 添加下面内容:
添加之后我们用 user1 执行一下
输入 user1 的密码之后就可以查看文件了
如果普通用户没有在 /etc/sudoers.d/ 或/etc/sudoers 中配置,同样无法查看
sudo 使用时间戳文件来完成类似“检票”的功能:当用户输入密码之后就获得了一张默认存活期为5分钟的入场券,超时以后,用户必须重新输入密码才能获得相应的权限
这样会导致一个问题:如果超时就要重新输入密码,像一些自动调用超级权限的程序就会出现问题
我们可以通过下面的设置让普通用户无需输入密码也可执行具有超级权限的程序,例如需要 user1 用户 可以自动重启 network 的权限
这样 user1 用户就可以执行重启 network 的脚本而无需输入密码了
如果要让 user1 具有超级用户的所有权限,又不想输入超级用户的密码,只需要添加如下内容即可
这个准则想必大家都听过了,一个强大健壮的密码,能让你的系统安全性翻倍提高
什么是强密码:
至少 12 个字符长,但 14 个或 14 个字符以上更好
大写字母、小写字母、数字和符号的组合
不是可以在词典或人员、角色、产品或组织名称中找到的单词
Linux 中,远程登录系统有两种认证方式:
密码认证
密钥认证
关于密码认证,虽然设置一个密码对系统安全能够起到一定作用,但是当遇到像密码暴力破解、密码泄露、密码丢失等问题时,我们往往就会束手无策,而且强密码也会对我们的工作造成一定负担
而密钥认证是一种新型的认证方式,公用密钥存储在远程服务器上,专用密钥保存在本地,当需要登录系统时,通过本地专用密钥和远程服务器的公用密钥进行配对认证,如果认证成功就能登陆
这种认证方式避免了被暴力破解的风险,同时只要保存在本地的专用密码不被黑客盗用,是一般无法通过密钥认证的方式进入系统的
Linux 绑定了很多没用的服务,这些服务默认都是自动启动的
对于服务器来说,运行的服务越多,系统就越不安全,因此关闭一些不需要的服务,对系统安全有很大的帮助
但具体要关闭那些服务,需要根据服务器的用途而定,一般情况下,只要系统本身用不到的服务都认为是不必要的服务
例如某台 Linux 服务提供 web 服务,那么除了 httpd 服务或者 nginx 服务和系统运行时必需的服务外,其他服务都可以关闭
下面列出一下不常用的服务,大家可以自行选择关闭
关闭服务自启动的方法可以通过 chkconfig 命令实现
对所有需要关闭的服务都执行上面的操作之后,重启服务器即可
而为了系统能够安全稳定的运行,就不得不运行一些服务,如下所示
acpid:用于电源管理
apmd:高级电源能源管理服务,用于监控电池性能
kudzu:检测硬件是否变化的服务
crond:为 Linux 下自动安排的进程提供运行服务
atd:类似于 crond,提供计划任务功能
keytables:用于装载镜像键盘
iptables:Linux 内置防火墙软件
xinetd:支持多种网络服务的核心守护进程
network:Linux 网络服务
sshd:提供远程登录 Linux 的服务
syslog:记录系统日志的服务
不正确的文件权限设置会直接威胁系统的安全,因此运维人员应该能及时发些这些不正确的权限设置,并立即修改
查找系统中任何用户都具有写权限的文件或目录
查找系统中具有 s 权限的程序
含有 s 权限的程序对系统安全威胁很大,上面的命令可以把某些不必要的 s 权限的程序去掉,防止用户滥用权限或者提升权限
检查系统中所有 suid 和 sgid 文件
检查系统中没有属主的文件
没有属主的孤儿文件往往容易成为黑客利用的工具,因此再找到这些文件之后,要么删除要么修改文件的属主
感谢阅读,喜欢作者就动动小手[一键三连],这是我写作最大的动力