linux仓库目录权限加固需设/var/lib/apt/lists/为700、/var/cache/apt/archives/为755、sources.list类文件为644且root属主;强制gpg签名校验,禁用未认证源;限制unattended-upgrades仅信任安全源;高危环境推荐容器化或函数式包管理。

Linux系统默认仓库目录(如/var/lib/apt/lists/、/var/cache/apt/archives/等)权限过宽可能被恶意利用,导致软件包劫持、缓存污染或提权风险。加固核心原则是:最小权限、隔离写入、验证来源。
关键仓库目录权限收紧
以下路径需严格限制属主与权限,避免普通用户或低权限进程篡改:
-
/var/lib/apt/lists/:仅
root:root可读写,权限设为700(drwx------)。该目录存储远程仓库元数据,若被篡改可能导致apt安装错误或恶意包索引注入。 -
/var/cache/apt/archives/:建议设为
root:root+755(drwxr-xr-x),禁止非root写入;若使用apt-cacher-ng等代理,应单独创建专用用户并严格限制其访问范围。 -
/etc/apt/sources.list和
/etc/apt/sources.list.d/:设为644且属主root:root,禁止组和其他用户写入。新增源必须经人工审核,避免含http://明文源或未签名第三方仓库。
启用软件包签名强制校验
Apt默认已启用GPG校验,但部分场景可能被绕过。确保以下配置生效:
- 检查
/etc/apt/apt.conf.d/中无APT::Get::AllowUnauthenticated "true";等禁用校验的配置。 - 运行
apt update时,输出中应出现Hit、Get后带[trusted]或明确签名信息;若提示NO_PUBKEY或INVALID_SIG,不可跳过,须手动导入可信公钥(如apt-key del旧密钥后curl -fsSL ... | gpg --dearmor -o /usr/share/keyrings/xxx.gpg)。 - 推荐使用
signed-by语法在sources.list中显式指定密钥路径,例如:deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-archive-keyring.gpg] https://security.debian.org/debian-security stable-security main
限制自动更新与无人值守升级风险
无人值守升级(unattended-upgrades)虽提升补丁及时性,但也扩大攻击面:
- 确认
/etc/apt/apt.conf.d/50unattended-upgrades中Unattended-Upgrade::Allowed-Origins仅包含官方可信源(如"${distro_id}:${distro_codename}-security";),禁用-updates或第三方源自动更新。 - 禁用非必要自动清理:
Unattended-Upgrade::Remove-Unused-Kernel-Packages "false";避免误删内核引发启动失败。 - 日志审计不可少:定期检查
/var/log/unattended-upgrades/及journalctl -u unattended-upgrades,确认升级行为符合预期。
替代方案:使用容器化或沙箱化包管理
对高安全要求环境(如CI/CD构建节点、多租户服务器),建议规避系统级apt直接操作:
- 用
docker build配合FROM debian:stable-slim等官方镜像,在构建阶段完成依赖安装,运行时剥离apt工具链。 - 使用
apt install --no-install-recommends精简安装,结合apt-mark hold冻结关键包版本,防止意外升级引入不兼容变更。 - 考虑
nix或guix等函数式包管理器,实现可重现、隔离、签名验证的软件分发,从根本上规避仓库目录权限问题。










