2、操作系统安全基础:选择安全的操作系统、Windows安全配置、Linux安全配置、macOS安全配置

操作系统是整个安全开发环境的基石。你想想看,如果地基都是歪的,上面盖的房子再漂亮也没用。我个人习惯把操作系统安全比作「守门员」——它挡在最前面,决定了你的代码和数据会不会被轻易攻破。

这一章,我会带你过一遍三大主流操作系统的安全配置要点。嗯,都是我在实际项目中踩过坑、填过土之后总结出来的经验。

2.1 如何选择安全的操作系统

先说结论:没有绝对安全的操作系统,只有相对安全的配置。但选对起点,能省掉你后面80%的麻烦。

我的建议是:

  • Windows:适合.NET、C#、游戏开发,或者你团队全员都用Windows。但一定要用专业版或企业版,家庭版很多安全策略没法调。
  • Linux:适合后端、云原生、嵌入式开发。我个人首选Ubuntu LTS或Debian稳定版。CentOS已经停更了,别踩这个坑。
  • macOS:适合iOS/macOS原生开发、前端设计。它的Unix底层相对安全,但别以为买了Mac就万事大吉。

核心原则:选长期支持版(LTS),别追新。新系统往往有未公开的漏洞,等社区踩完雷再升级不迟。

我在项目中遇到过一家公司,全员用Windows 10家庭版,结果组策略没法用,连个密码策略都配不了。最后IT部门只能一台台手动改注册表,累得够呛。

2.2 Windows安全配置

Windows其实挺强的,就是默认设置太「友好」了。说白了,微软为了用户体验,把很多安全开关默认关掉了。你得自己打开。

2.2.1 账户与密码策略

这是第一道门。我曾经见过某公司的服务器密码是「123456」,嗯,你没看错。

  • 禁用Guest账户
  • 设置密码策略:长度至少12位,包含大小写+数字+特殊字符
  • 启用账户锁定策略:5次错误输入后锁定30分钟
# 通过命令行设置密码策略(以管理员身份运行)
net accounts /minpwlen:12
net accounts /lockoutthreshold:5
net accounts /lockoutduration:30

小技巧:我习惯把管理员账户改名,别用默认的「Administrator」。攻击者连用户名都要猜,多一层障碍。

2.2.2 防火墙与网络保护

Windows Defender防火墙默认是开的,但很多人嫌烦直接关了。千万别!

  • 确保防火墙处于启用状态
  • 关闭不必要的入站规则(比如远程桌面,不用就关掉)
  • 开启网络发现保护,公共网络下关闭文件和打印机共享

2.2.3 更新与补丁管理

这个我多说两句。Windows更新确实烦,但它是保命的。我曾经有个客户,系统提示更新他点了「推迟7天」,结果拖了半年,中了勒索病毒。

  • 开启自动更新
  • 设置活动时间,避免工作时重启
  • 每月至少检查一次可选更新

2.2.4 用户账户控制(UAC)

UAC弹窗很多人觉得烦,想关掉。我的建议是:别关。把它调到第二档(默认),既不会频繁打扰你,又能拦住恶意软件。

警告:绝对不要以管理员账户作为日常使用账户。创建一个标准用户,需要时再提权。这是Windows安全最基本的一条,但80%的人做不到。

2.3 Linux安全配置

Linux比Windows透明得多,但配置不当照样漏洞百出。我记得刚入行时,有台服务器SSH端口是22,密码是root/root,结果被扫到后直接成了矿机。

2.3.1 用户与权限管理

  • 禁用root直接登录,使用sudo提权
  • 创建普通用户,加入sudo组
  • 设置合理的umask值(推荐022)
# 创建新用户并设置sudo权限
sudo useradd -m devuser
sudo passwd devuser
sudo usermod -aG sudo devuser

# 禁用root SSH登录
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

2.3.2 SSH安全加固

SSH是Linux的命门。我建议你按下面这几步来:

  • 更改默认端口(22改成比如2222,虽然不能防专业攻击,但能过滤掉大量扫描)
  • 使用密钥认证,禁用密码登录
  • 限制允许登录的用户
# 在 /etc/ssh/sshd_config 中修改
Port 2222
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers devuser

避坑指南:我曾经改完SSH配置后忘了重启服务,结果自己也被踢出去了。嗯,只能去机房接显示器。所以改完配置记得 sudo systemctl restart sshd,而且别关当前会话,先开一个新终端测试。

2.3.3 防火墙与SELinux

  • 使用ufw或firewalld管理防火墙,默认拒绝入站
  • 开启SELinux(别图省事设成permissive)
# 使用ufw配置防火墙
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp  # SSH新端口
sudo ufw enable

2.3.4 系统更新与审计

  • 配置自动安全更新
  • 安装auditd,记录关键操作
  • 定期检查日志:/var/log/auth.log 或 /var/log/secure

2.4 macOS安全配置

macOS基于Unix,底子不错,但很多人觉得「Mac不会中毒」,这是错觉。我见过Mac被植入后门的案例,就是因为用户太放心了。

2.4.1 系统偏好设置

  • 开启FileVault全盘加密(防止设备丢失后数据泄露)
  • 开启防火墙(在安全性与隐私中)
  • 关闭「自动登录」

2.4.2 Gatekeeper与隐私

macOS的Gatekeeper会阻止未签名的应用运行。别为了装一个破解软件就把它关了。我建议:

  • 保持Gatekeeper开启(仅允许App Store和被认可的开发者)
  • 在「隐私」中检查哪些应用有摄像头、麦克风、文件访问权限
  • 关闭「共享」中的屏幕共享、文件共享(不用的话)

2.4.3 钥匙串与密码管理

macOS自带的钥匙串挺好用,但很多人不会用。我习惯把SSH密钥、WiFi密码、应用密码都交给钥匙串管理。

  • 设置钥匙串主密码(别和登录密码一样)
  • 定期清理不再使用的证书和密钥

注意:macOS的sudo默认有5分钟缓存。也就是说,你输过一次密码后,5分钟内再sudo不用输密码。这其实是个安全隐患。可以用 sudo visudo 添加 Defaults timestamp_timeout=0 来关闭缓存。

2.5 三大系统安全配置对比

配置项 Windows Linux macOS
账户管理 禁用Guest,改名Admin 禁用root,使用sudo 关闭自动登录,使用普通账户
防火墙 Windows Defender防火墙 ufw / firewalld macOS内置防火墙
磁盘加密 BitLocker(专业版) LUKS FileVault
远程访问 禁用RDP(不用时) SSH密钥认证+改端口 关闭屏幕共享
更新策略 自动更新 自动安全更新 自动更新

总结一句话:操作系统安全不是装完系统就完事了。你得把它当成一个活的东西,定期检查、持续加固。我每季度都会花半天时间,把三台主力机的安全配置过一遍。这个习惯,建议你也养成。

下一章,我们会聊到开发工具链的安全配置。嗯,那才是真正跟代码短兵相接的地方。