安全加固:对象、配置与机制
资产、暴露面与安全基线
安全配置应从资产和业务需要出发。先列明服务必须读取、写入和连接的对象,再限制账户、文件系统和网络;每一项加固都要能解释保护什么、如何验证以及如何精确撤回。
资产、威胁与基线
安全基线应写明资产、暴露面、业务需求与适用范围。开发笔记本和公网生产主机的必要能力不同,不宜复制同一参数集。先列出需要保护的数据、入口和管理路径,再选择控制措施;合规清单通过不等于消除所有攻击路径。
按任务分配权限
最小权限按任务需要分配账户、文件、网络与管理能力。专用账户只拥有自己的数据目录,不共享交互管理员身份;临时提权要有期限与审计。减少权限前核对维护、备份和应急流程,避免加固后只能依靠不受控root旁路恢复。
建立变更与恢复前置
变更前置包括已知可用配置备份、版本、资产归属、旁路管理通道和恢复责任人。远程限制登录、网络或sudo前,必须先设计不会一并被切断的恢复路径。本课程只核对文件清单与计划,不修改主机设置。
练习与参考解答
练习:同一份“仅业务端口”规则同时用于开发笔记本和公网主机,可否因为都通过清单就认为安全?先补哪两类资产/恢复信息?
参考解答
不能,两者暴露面、管理路径和数据需求不同。先列需要保护的数据/入口及实际维护身份,再列管理旁路、已批准配置备份和恢复责任人;按必要任务分配最小能力。清单只表明核对过这些条件,不能证明所有攻击路径已消除。
权限、沙箱与网络边界
先明确执行用户、只读程序目录与必要写入路径,再对照配套示例理解加载后的 unit、实际进程权限与拒绝日志。
文件权限与继承
文件权限不仅是文件本身:父目录遍历权限、组成员、ACL继承和挂载选项都会影响实际访问。Linux模式位与Windows ACL分别推演,不把777或给Everyone完全控制当修复。服务需要读配置不代表需要写配置,数据目录可写也不代表可执行新程序。
禁止获得新增权限
systemd的NoNewPrivileges限制进程及后代通过执行文件获得新增权限,例如依靠setuid等机制提权。限制在进程与后代间继承;它不撤销已拥有的权限,也不替代专用用户和能力集合。服务确需特权的操作应拆成受控边界,而不是关闭所有隔离选项。版本依据为systemd256固定文档。
只读系统与可写目录
ProtectSystem用于限制服务所见的文件系统写入范围,ReadWritePaths列出必要例外;它们不是把宿主机永久改成只读。用户、命名空间、挂载与内核能力会影响生效条件。先列出状态、缓存和日志路径,再收紧写入;禁止为了通过启动而把整个根目录加入例外。
限制入口和出站
网络边界要同时描述入站与出站,限制监听地址、来源和目标。防火墙不能代替服务身份与授权;容器发布端口、IPv6和云安全组可能构成额外路径。只允许业务必要连接,并保留可解释的拒绝证据,不能把能ping通当成端口策略已正确。
补丁和软件供应
补丁窗口应核对软件来源、签名、兼容性与回滚路径。固定版本用于可重现,不意味着永久停止安全更新;升级前后保留依赖和配置差异。禁止直接执行未知远程脚本,离线清单检查只能说明登记情况,不能证明软件没有漏洞。
练习与参考解答
练习:服务以root启动后启用NoNewPrivileges,是否自动变成普通用户?再设置ProtectSystem=strict和ReadWritePaths=/var/lib/lab,是否可绕过该目录的文件权限?
参考解答
两者都不能。NoNewPrivileges限制后续通过exec获得新增权限,并向后代继承,不撤销现有root身份或能力;需单独设置User与能力限制。ReadWritePaths只是只读挂载规则的例外,不赋予DAC/ACL权限,也不绕过其他安全策略,服务账户仍须拥有必要访问权。
继续阅读
- 应用实践
- 知识专题