操作系统安全加固:Linux/Windows系统基线检查、账户安全、权限管理、文件系统安全
各位同学,咱们今天聊点实在的。操作系统安全加固,说白了就是给你的服务器「锁好门窗、设好门禁、藏好钥匙」。我干了这么多年安全运维,见过太多因为系统基线没做好,被黑客当后花园逛的案例。嗯,这节课咱们就掰开揉碎了讲讲,Linux和Windows到底该怎么加固。
一、系统基线检查:你的服务器「体检」了吗?
基线检查是什么?就是一套标准。你想想看,新装一台服务器,如果啥配置都不改,默认设置往往是最不安全的。我个人习惯,拿到新机器第一件事,就是跑一遍基线检查脚本。
核心原则:最小化原则。只开必要的服务,只给必要的权限,只留必要的账户。
1. Linux 基线检查要点
我常用的检查项,列个表给大家参考:
| 检查项 | 安全要求 | 检查命令 |
|---|---|---|
| 系统版本与补丁 | 使用稳定版,及时更新 | cat /etc/os-releaseyum check-update |
| 开放端口 | 仅保留业务端口 | ss -tlnp |
| SSH 配置 | 禁止 root 登录,修改默认端口 | grep PermitRootLogin /etc/ssh/sshd_config |
| 密码策略 | 复杂度、有效期 | cat /etc/login.defs |
| 日志审计 | 开启 rsyslog,日志保留 180 天以上 | systemctl status rsyslog |
我的小技巧:别手动一条条查。用自动化工具,比如 Lynis 或者 OpenSCAP,跑一遍报告就出来了。我在项目中用 Lynis 给上百台服务器做过基线扫描,效率很高。
2. Windows 基线检查要点
Windows 的基线检查,我建议重点关注这几个地方:
- 安全策略:通过
secpol.msc检查密码策略、账户锁定策略。 - 服务管理:禁用不必要的服务,比如 Print Spooler(如果不用打印)。
- 注册表加固:比如禁用 LM Hash、限制远程访问。
- 审核策略:开启登录审核、对象访问审核。
我曾经遇到过一台 Windows 服务器,默认开启了 SMBv1 协议,结果被勒索病毒盯上了。嗯,从那以后,我每次装完 Windows 第一件事就是关掉 SMBv1。
注意:基线检查不是一次性工作。每次系统变更、版本升级后,都要重新检查一遍。我建议至少每季度做一次全面基线审计。
二、账户安全:管好你的「钥匙」
账户安全,说白了就是谁有钥匙、钥匙够不够结实。我见过最离谱的案例,某公司服务器 root 密码是「123456」,而且所有员工都知道。你想想看,这跟把家门钥匙挂在大门上有什么区别?
1. Linux 账户安全加固
我个人习惯,Linux 账户管理遵循这几条铁律:
- 禁用 root 直接登录:用普通用户 + sudo 提权。修改
/etc/ssh/sshd_config,设置PermitRootLogin no。 - 密码复杂度:长度至少 12 位,包含大小写、数字、特殊字符。通过
pam_pwquality.so模块强制实施。 - 账户锁定策略:连续 5 次登录失败,锁定账户 15 分钟。用
pam_tally2.so实现。 - 定期清理僵尸账户:检查
/etc/passwd,删除长期不用的账户。
# 密码策略配置示例(/etc/pam.d/system-auth)
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
# 账户锁定策略
auth required pam_tally2.so deny=5 unlock_time=900 even_deny_root root_unlock_time=1200
避坑指南:我曾经在配置 pam_tally2 时,忘了加 even_deny_root 参数,结果 root 账户被暴力破解了 100 多次都没锁定。嗯,这个坑我替你们踩过了。
2. Windows 账户安全加固
Windows 的账户管理,我重点说几个容易被忽略的点:
- 禁用 Guest 账户:默认就是禁用的,但还是要确认一下。
- 重命名 Administrator:别用默认的管理员账户名,改成个复杂的名字。
- 启用 UAC:用户账户控制,别为了省事关掉它。
- 密码策略:通过组策略设置密码最短使用期限、最长使用期限。
你想想看,如果黑客连你的管理员账户名都不知道,他暴力破解的难度就大多了。这就是「安全通过模糊化」的一种实践。
三、权限管理:谁该有什么权限?
权限管理,核心就一句话:最小权限原则。每个用户、每个进程,只给完成工作所需的最小权限。多了就是风险。
1. Linux 权限管理
Linux 的权限模型,说白了就是 rwx(读、写、执行)。但光靠这个还不够,我建议用 ACL(访问控制列表)做更精细的控制。
# 设置 ACL 示例
setfacl -m u:zhangsan:rwx /data/project
setfacl -m g:developers:rx /data/project
# 查看 ACL
getfacl /data/project
我在项目中遇到过一个问题:开发人员需要读取日志文件,但日志文件属于 root 账户。直接给 sudo 权限太危险,用 ACL 给开发组只读权限,完美解决。
重要提醒:SUID/SGID 权限要慎用。我见过有人给 vim 设置了 SUID 位,结果普通用户用 vim 打开文件时,居然能以 root 权限编辑系统文件。这太危险了!
2. Windows 权限管理
Windows 的权限管理,核心是 NTFS 权限和组策略。我建议:
- 使用本地组策略:通过
gpedit.msc配置用户权限分配。 - NTFS 权限:给每个文件夹设置明确的访问权限,别用「Everyone」组。
- 服务账户:为每个服务创建独立的服务账户,别用 LocalSystem。
嗯,这里要注意:Windows 的权限继承机制容易让人迷惑。你给父文件夹设置了权限,子文件夹默认会继承。有时候你以为某个文件是安全的,其实它的父文件夹权限已经泄露了。
四、文件系统安全:藏好你的「家底」
文件系统安全,就是保护你的数据不被偷、不被改、不被删。我见过最惨的案例,某公司数据库文件权限设置成了 777,结果被勒索病毒加密了。嗯,血的教训。
1. Linux 文件系统安全
Linux 文件系统安全,我重点关注这几个方面:
- 重要文件权限:
/etc/shadow应该是 600,/etc/passwd应该是 644。 - 文件属性:用
chattr命令给关键文件加不可修改属性。比如chattr +i /etc/passwd。 - 磁盘加密:敏感数据分区使用 LUKS 加密。
- 文件完整性检查:用
AIDE或Tripwire监控文件变更。
# 使用 chattr 保护关键文件
chattr +i /etc/shadow
chattr +i /etc/ssh/sshd_config
# 查看文件属性
lsattr /etc/shadow
警告:用 chattr +i 后,连 root 都不能修改文件。要修改时,记得先 chattr -i 解除锁定。我曾经在升级 SSH 时忘了这茬,折腾了半天才发现文件被锁了。
2. Windows 文件系统安全
Windows 文件系统安全,我建议:
- 启用 BitLocker:对系统盘和数据盘进行全盘加密。
- NTFS 权限审计:开启文件访问审计,记录谁在什么时候访问了什么文件。
- EFS 加密:对敏感文件使用加密文件系统。
- 禁用自动播放:防止 U 盘病毒自动执行。
你想想看,如果服务器被物理接触了,没有磁盘加密,那数据就等于裸奔。BitLocker 虽然会带来一点点性能损耗,但跟数据安全比起来,这点代价完全值得。
五、实战总结:我的加固清单
好了,讲了这么多,我给大家总结一份我自己的加固清单。每次部署新服务器,我都会对照这个清单过一遍:
- 基线检查:跑一遍 Lynis 或 OpenSCAP,修复所有高危项。
- 账户清理:删除无用账户,禁用 root 远程登录,设置密码策略。
- 权限收紧:检查所有文件和目录权限,用 ACL 做精细控制。
- 文件保护:关键文件加不可修改属性,敏感分区加密。
- 日志审计:开启详细日志,配置日志轮转和远程存储。
- 服务最小化:关闭所有不必要的服务,只保留业务所需。
最后说一句:安全加固不是一劳永逸的事。系统在变,攻击手法也在变。我建议每个月至少做一次安全巡检,看看有没有新的漏洞、有没有异常的权限变更。嗯,安全运维,说白了就是个持续改进的过程。
好了,这节课的内容就到这里。下一节咱们聊聊入侵检测系统的部署和规则编写,到时候我会分享一些我在实际攻防演练中总结的检测技巧。大家回去把今天讲的基线检查先在自己测试机上跑一遍,下节课我们直接上手实战。