Linux服务器安全运维是每个后端和运维工程师绕不开的话题。一台刚装好的系统如果不做任何加固,直接挂到公网上,往往撑不过几个小时就会被扫描器盯上。安全不是一次性动作,而是一套贯穿服务器生命周期的日常工作,包括账号管理、服务加固、网络防护、日志审计和应急响应。本文按照学习顺序,把这些内容拆成几个模块讲清楚,并附上可操作的配置示例。

一、打牢基础:文件权限、用户体系和常用命令
学习Linux安全的第一步不是装防火墙,而是理解权限模型。Linux的一切安全机制都建立在用户和文件权限之上。root用户拥有至高权限,日常操作应尽量避免直接使用root登录,而是通过sudo临时提权,这样既留有审计记录,也能减少误操作风险。
文件权限部分要吃透rwx三组位的含义,理解chmod、chown、umask的用法,以及特殊权限位SUID、SGID和粘滞位的作用。比如/etc/shadow为什么权限是600,/tmp为什么要设置粘滞位,这些细节直接关系到系统安全。下面是常用的权限检查命令:
# 查找系统中所有SUID文件,这些文件常被用来提权
find / -perm -4000 -type f 2>/dev/null
# 查找任何人都可写的目录(风险点)
find / -type d -perm -o+w 2>/dev/null
# 检查空口令账号,这类账号等于没有锁的门
awk -F: '($2==""){print $1}' /etc/shadow除了权限,还要熟悉用户管理相关文件:/etc/passwd存放账号信息,/etc/shadow存放加密口令,/etc/group管理用户组。排查问题时,能快速判断某个账号是否可以登录、属于哪些组、家目录权限是否正常,是安全运维的基本功。
二、SSH服务加固:把大门先锁好
SSH是Linux服务器最主要的入口,也是攻击者最热衷的目标。默认配置下SSH监听22端口、允许root直接登录、支持密码认证,这三点组合起来就是暴力破解的温床。加固SSH的核心思路是:禁用root登录、禁用密码认证、只允许密钥登录、修改默认端口、限制来源IP。
密钥登录的原理是公钥加密:私钥留在本地,公钥写到服务器的~/.ssh/authorized_keys中,登录时服务器用公钥发起挑战,只有持有私钥的人才能正确应答,密码在网络中完全不传输,天然免疫暴力破解。配置时注意.ssh目录权限必须是700,authorized_keys必须是600,权限过宽会导致密钥登录直接失效。
# 编辑SSH配置文件 vim /etc/ssh/sshd_config # 关键加固项 Port 2222 # 修改默认端口,减少被扫描概率 PermitRootLogin no # 禁止root直接登录 PasswordAuthentication no # 禁用密码认证 MaxAuthTries 3 # 限制认证尝试次数 AllowUsers deploy ops # 只允许指定用户登录 # 修改后重启服务并验证(先别断开当前会话,另开终端测试) systemctl restart sshd
还有一个实用技巧是使用fail2ban这类工具自动封禁暴力破解的IP。它的工作原理是监控SSH日志,当某个IP在短时间内认证失败次数超过阈值,就自动调用防火墙规则将其封禁。配置简单,效果显著,是几乎每台公网服务器都该部署的基础组件。需要注意的是,改SSH配置时务必保留一个已连接的会话,另开终端验证能正常登录后再退出,否则一旦配置错误就会把自己锁在门外。
三、防火墙与端口管控:只开必要的门
权限和SSH解决的是“谁进来”的问题,防火墙解决的是“从哪进来、进来干什么”的问题。原则很简单:默认拒绝一切,只放行业务必需的端口。很多新手图省事直接执行systemctl stop firewalld,等于把服务器的所有服务裸奔在公网上,这是绝对要避免的做法。
CentOS系列常用firewalld,Ubuntu常用ufw,底层其实都依赖iptables或nftables。以ufw为例,基础操作如下:
# 启用防火墙前先放行SSH端口,避免把自己锁在外面 ufw allow 2222/tcp ufw allow 80/tcp ufw allow 443/tcp # 启用防火墙 ufw enable # 查看当前规则和状态 ufw status verbose # 限制某个端口的来源IP,比如数据库只允许内网访问 ufw allow from 192.168.1.0/24 to any port 3306
端口管控的另一个重点是定期检查监听服务。用ss -tlnp查看当前所有监听端口和对应进程,对于不认识的服务一定要搞清楚来源。特别要注意数据库端口如3306、6379,Redis未授权访问导致服务器被控的案例屡见不鲜,这类服务要么只监听127.0.0.1,要么严格限制来源IP,并设置强密码。
四、日志审计与入侵排查:出事了怎么查
事前防护做得再好,也要有事后排查的能力。Linux的日志体系主要看这几个文件:/var/log/secure记录SSH等认证行为,/var/log/messages记录系统通用日志,/var/log/lastlog和last命令可以查看登录历史,~/.bash_history则记录了用户执行过的命令。怀疑被入侵时,排查顺序一般是:先看异常登录,再查可疑进程,最后查定时任务和后门文件。
# 查看登录成功和失败的记录
last -a | head -20
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c
# 查看当前进程,重点关注占用CPU异常的陌生进程
ps aux --sort=-%cpu | head -10
# 检查所有用户的定时任务,挖矿木马最爱藏的地方
for user in $(cut -f1 -d: /etc/passwd); do
echo "=== $user ==="; crontab -l -u $user 2>/dev/null
done
# 查看最近被修改的文件,辅助定位后门
find / -mtime -3 -type f 2>/dev/null | grep -v proc排查时要养成对比思维:正常情况下的进程列表、监听端口、定时任务是什么样的,心里要有底,出现异常才能一眼识别。建议把巡检脚本化,定期把关键信息快照保存,一旦出事可以快速对比出变化点。同时对重要日志做远程备份或集中收集,因为熟练的攻击者在撤退前通常会清理日志,本地日志并不完全可信。
五、持续运营:把安全变成日常习惯
安全运维最怕的是“上线时加固一次,之后再也不管”。系统漏洞不断出现,软件包要及时更新,可以用yum update或apt upgrade定期打补丁;对外的服务组件如Nginx、OpenSSL更要关注版本安全公告,历史上多次大规模入侵事件都源于老版本组件的已知漏洞。
入门之后,建议按照这条路径进阶:先在虚拟机里练习账号、权限、SSH和防火墙配置,熟练后用一台便宜的云服务器做完整加固实战,再学习fail2ban、auditd等进阶工具,最后了解Ansible批量加固、日志集中管理和入侵检测系统。整个过程边学边动手,每学一个知识点就在自己的环境里验证一遍,比单纯看文档有效得多。安全没有终点,持续学习加上良好的操作习惯,才是服务器长期稳定运行的真正保障。