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/ 和 /etc/apt/sources.list* 这三类路径。
关键目录权限必须收紧
这些路径默认权限常过于宽松,普通用户或低权限进程可能意外或恶意修改:
- /var/lib/apt/lists/:存储远程仓库的 Packages、Release 等元数据,一旦被篡改,apt install 可能拉取伪造包。应设为 700(drwx------),属主属组均为 root:root;禁止其他用户任何访问。
- /var/cache/apt/archives/:缓存已下载的 .deb 包。普通用户不应有写权限,否则可替换合法包。建议设为 755(drwxr-xr-x),属主属组 root:root;若使用 apt-cacher-ng 等代理,需为其创建独立系统用户,并通过 ACL 或专用组严格限制其仅对该目录有写权限。
- /etc/apt/sources.list 及 /etc/apt/sources.list.d/ 下所有文件:定义软件源地址。必须设为 644,属主属组 root:root;禁用组和其他用户的写权限,防止运行时被注入 http:// 源或未签名第三方源。
GPG 签名校验不可绕过
APT 默认启用 GPG 校验,但配置错误或人为干预可能使其失效:
- 检查 /etc/apt/apt.conf.d/ 下所有文件,删除或注释掉类似
APT::Get::AllowUnauthenticated "true";的行。 - 执行
apt update时,每条Get:行末尾应出现[trusted]或明确签名标识;若提示NO_PUBKEY或INVALID_SIG,必须处理,不可加--allow-unauthenticated跳过。 - 推荐在 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、-backports及任何第三方源条目。 - 关闭自动清理旧内核:
Unattended-Upgrade::Remove-Unused-Kernel-Packages "false";,避免误删导致无法启动。 - 定期检查日志:
tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log和journalctl -u unattended-upgrades -n 50,确认每次升级都来自预期源且无校验失败记录。
高风险环境建议进一步隔离
对金融、政务等强合规场景,或长期暴露在公网的服务器:
- 禁用系统级 apt,改用容器化方式管理依赖(如构建时用
apt install --no-install-recommends+ 多阶段构建),运行时镜像不带包管理器。 - 考虑函数式包管理工具(如 Nix 或 Guix),实现声明式、可复现、原子更新的软件交付,彻底规避传统仓库目录权限问题。
- 若必须保留 apt,可在 SELinux 或 AppArmor 下为 apt 进程设置严格策略,限制其仅能访问白名单路径和网络端口。











