3、操作系统安全基线(Linux):用户与组管理、文件权限(SUID/SGID)、SSH安全配置、日志审计
大家好,我是老周。今天咱们聊聊Linux安全基线。
说实话,很多运维兄弟觉得Linux天生安全。嗯,这话对了一半。默认配置下,Linux就像一扇没上锁的门——看着结实,其实一推就开。我在安全应急响应中处理过太多案例,都是因为基线没做好,被人从最基础的漏洞打穿了。
核心观点:安全基线不是锦上添花,是保命底线。你想想看,黑客拿到一个普通用户权限,如果SUID没管好、SSH配置裸奔、日志没人看,那离提权到root也就一步之遥。
下面这张图,是我梳理的Linux安全基线核心脉络。建议你存下来,每次做基线检查时对照着看。
3.1 用户与组管理:管好你的人
用户管理,说白了就是「谁可以进系统,进去能干什么」。我见过太多公司,一个服务器上几十个僵尸账户,有些还是几年前离职员工的。这不出事才怪。
我的个人习惯:每季度做一次用户审计。用下面这条命令,把所有能登录的用户列出来:
# 列出所有拥有登录shell的用户
awk -F: '($7 ~ /bash|sh|zsh/) {print $1}' /etc/passwd
然后对照人员名单,一个一个过。多出来的,直接锁定或删除。
避坑指南:我曾经遇到一个客户,服务器被入侵后查了三天,最后发现是一个测试账号「test」没删,密码还是「123456」。黑客从这进去,提权到root,把数据库全删了。所以,测试账号用完即焚,别手软。
密码策略怎么设?我建议至少做到这几点:
- 密码长度不低于12位
- 90天强制更换一次
- 连续输错5次锁定账户15分钟
配置方法很简单,改两个文件就行:
# /etc/login.defs 中设置
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 12
# /etc/pam.d/system-auth 中添加
auth required pam_tally2.so deny=5 unlock_time=900
3.2 文件权限与SUID/SGID:别给程序「超能力」
SUID和SGID,是Linux里最容易被忽视的安全漏洞。你想想看,一个普通用户运行一个带SUID位的程序,就能以文件所有者的身份执行——这相当于给普通用户发了一张「临时root卡」。
怎么查?一条命令搞定:
# 查找所有SUID文件
find / -perm -4000 -type f 2>/dev/null
# 查找所有SGID文件
find / -perm -2000 -type f 2>/dev/null
拿到结果后,对照标准清单检查。不该有的,直接去掉SUID位:
chmod u-s /path/to/file
注意:别乱删系统关键文件的SUID位!比如 /usr/bin/passwd、/usr/bin/su 这些,去掉后普通用户连改密码都做不了。我建议你先把结果保存下来,逐条确认后再动手。
我记得有一次应急响应:黑客上传了一个带SUID位的后门文件 /tmp/.bash,普通用户运行后直接获得root权限。所以,我建议你把 /tmp、/dev/shm 这些目录挂载为 nosuid:
# 在 /etc/fstab 中修改
tmpfs /dev/shm tmpfs defaults,nosuid,noexec 0 0
3.3 SSH安全配置:守好你的大门
SSH是Linux的「大门」。门没锁好,什么安全策略都是白搭。我个人习惯,拿到新服务器第一件事就是改SSH配置。
核心配置清单:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| Port | 2222(或其他非标准端口) | 避开自动化扫描的默认端口 |
| PermitRootLogin | no | 禁止root直接登录,用普通用户+sudo |
| PasswordAuthentication | no | 禁用密码登录,只允许密钥认证 |
| AllowUsers | 指定用户列表 | 白名单机制,只允许特定用户登录 |
| MaxAuthTries | 3 | 最大认证尝试次数 |
| ClientAliveInterval | 300 | 空闲超时断开(秒) |
配置完记得重启服务:
# 修改 /etc/ssh/sshd_config 后
systemctl restart sshd
# 千万别退出当前会话!先开一个新终端测试
# 确认能连上再关旧会话,否则你懂的...
我的经验:曾经有一次,我远程改SSH配置时手滑把 PermitRootLogin 写成了 no,但当时只有root一个用户……嗯,还好机房有人,不然就得跑一趟了。所以,改SSH配置时一定留一个「逃生窗口」——要么开两个会话,要么先加一个普通用户并配置好sudo。
3.4 日志审计:让每一次操作都有迹可循
日志是安全事件的「黑匣子」。没有日志,出了事你连怎么发生的都不知道。我个人习惯,日志要集中存储、定期轮转、实时告警。
必看的几个日志文件:
/var/log/secure—— SSH登录、sudo操作记录/var/log/messages—— 系统通用日志/var/log/audit/audit.log—— auditd审计日志
用auditd监控关键文件:
# 监控 /etc/passwd 的修改
auditctl -w /etc/passwd -p wa -k passwd_changes
# 监控 /etc/ssh/sshd_config 的修改
auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_changes
# 查看审计日志
ausearch -k passwd_changes
注意:日志如果不做轮转,几天就能把磁盘撑爆。配置 /etc/logrotate.conf,建议保留30天,每天轮转一次。另外,日志最好实时同步到远程日志服务器,防止被黑客清理痕迹。
好了,Linux安全基线就聊到这儿。记住一句话:安全不是一次性的配置,而是持续的习惯。每次上线新服务、每次添加新用户,都按这个基线走一遍,慢慢就形成肌肉记忆了。
总结一下今天的内容:
- 用户管理:最小权限、定期清理、强密码策略
- 文件权限:查SUID/SGID、去除非必要权限、挂载nosuid
- SSH配置:改端口、禁root、用密钥、设白名单
- 日志审计:集中存储、实时监控、定期轮转
公众号:蓝海资料掘金营,微信deep3321