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密钥认证+改端口 | 关闭屏幕共享 |
| 更新策略 | 自动更新 | 自动安全更新 | 自动更新 |
总结一句话:操作系统安全不是装完系统就完事了。你得把它当成一个活的东西,定期检查、持续加固。我每季度都会花半天时间,把三台主力机的安全配置过一遍。这个习惯,建议你也养成。
下一章,我们会聊到开发工具链的安全配置。嗯,那才是真正跟代码短兵相接的地方。