/var/lib目录存放应用程序运行时的持久化状态数据,权限默认为drwxr-xr-x(root:root),子目录由各服务独立设置,遵循最小权限原则,禁止other写入。

/var/lib 目录存放的是应用程序运行时产生的持久化状态数据,比如数据库文件、包管理器的本地缓存、容器镜像层、服务的运行时标识(如 systemd 的 machine-id)、Docker 的存储目录等。它不是临时数据,也不是配置文件,而是程序“自己记住的东西”。
这个目录的权限设计有明确逻辑,直接关系到系统安全与服务隔离。
/var/lib 的典型权限结构
默认情况下,/var/lib 本身权限通常是:
drwxr-xr-x 1 root root
即:
- 所有者(root):读、写、执行(可进入、创建/删改子目录)
- 所属组(root):读、执行(可进入、查看,但不能写)
- 其他用户:读、执行(同组权限)
⚠️ 注意:/var/lib 目录本身不允许普通用户写入,这是硬性安全要求。
子目录权限由具体服务独立控制
每个应用在 /var/lib 下建自己的子目录(如 /var/lib/mysql、/var/lib/dpkg、/var/lib/docker),其权限不继承父目录,而是按服务实际需求单独设置。常见模式包括:
-
服务专属目录归服务用户所有
例如:-
/var/lib/mysql→ 所有者mysql:mysql,权限drwx------(仅 mysql 用户可读写) -
/var/lib/postgresql→ 所有者postgres:postgres,权限drwx------ -
/var/lib/chrony→ 所有者chrony:chrony,权限drwx--x---
-
-
包管理器数据归 root,但需特定组访问
-
/var/lib/dpkg→root:root,drwxr-xr-x(dpkg 自身不开放写,只由 apt 等工具以 root 身份操作)
-
-
容器或虚拟化平台常设宽松组权限
-
/var/lib/docker→root:docker,drwx-----x(保证 docker 组成员能进入,但不开放读取内容)
-
某些服务使用 sticky bit 防止跨用户篡改
如/var/lib/sss/pubconf(SSSD)可能设drwxr-xr-t,确保子文件归属不被非所有者更改。
权限设置的关键原则
- ✅ 最小权限原则:只给服务进程必需的访问权,避免
777或开放写给others - ✅ 分离用户与服务身份:绝不让普通用户(如
alice)直接拥有/var/lib/appname,应使用专用系统用户(如redis、nginx) - ✅ 禁止 world-writable:
/var/lib及其子目录中,other的写权限(o+w)是严重安全隐患,多数发行版扫描工具会告警 - ✅ SELinux/AppArmor 等 MAC 机制会叠加限制:即使文件权限宽松,策略仍可拦截非法访问
查看和验证权限的常用命令
# 查看 /var/lib 顶层权限 ls -ld /var/lib # 列出主要子目录及其所有者和权限 ls -ld /var/lib/*/ | head -20 # 检查某个服务目录(如 nginx)是否被错误开放 ls -ld /var/lib/nginx # 查找 world-writable 的 /var/lib 子目录(应无输出) find /var/lib -type d -perm -o+w 2>/dev/null
不复杂但容易忽略


















