/var/log 权限在启动时重置

deo*_*ren 7 logs permissions systemd

我已经测试并确认在重新启动后,权限将重置/var/log为下面列出的每个发行版/版本的默认值。问题是,为什么?

  • CentOS 7
  • Ubuntu >= 15.04
  • Debian 8/9

据我所知,CentOS 7 和 Debian 8/9 的默认权限是755, root:root. Ubuntu 15.04+ 的默认权限是775, root:syslog。如果我从 PPA 安装上游 rsyslog,则默认权限变为755(在 Ubuntu 16.04 上确认,大概也适用于 15.04 和 16.04 之间的 Ubuntu 版本)。

任何更改/var/log默认权限的尝试都会导致重置,大概是在下次启动时。我在相关帖子上阅读了某人的建议,它可能是工作中的 rsyslog 设置,但我切换了这些设置以符合我的期望,甚至使用了一些不起作用的设置(例如 700),结果仍然相同:重置回默认值。

然后我卸载了 rsyslog(一个安装了 rsyslog 的虚拟机,另一个安装了上游 rsyslog)并且权限仍然被重置,所以显然重置工作不是由 rsyslog 完成的。

这是systemd特有的吗?这是一个我可以实际覆盖并在重新启动之间“坚持”的设置吗?

预先感谢您提供的任何帮助。

聚苯乙烯

我的测试是在使用 LVM 的发行版的简单安装上执行的,但使用一个卷试图排除 lv 的挂载选项是问题所在。

deo*_*ren 10

我仍在深入研究细节,但看起来这些文件/var/log在启动时的权限管理中起作用:

  • /usr/lib/tmpfiles.d/var.conf
  • /usr/lib/tmpfiles.d/00rsyslog.conf

具有讽刺意味的是,当我grep -ri '/var/log' /var/log在 Ubuntu 16.04 机器上运行并看到以下消息时,我发现了它们:

./syslog.1:Jul 9 21:18:15 ubuntu-virtual-machine systemd-tmpfiles[616]: [/usr/lib/tmpfiles.d/var.conf:14] 路径“/var/log”的重复行”,无视。

我查看了那个文件,发现了这个:

# 这个文件是 systemd 的一部分。
#
# systemd 是免费软件;您可以重新分发和/或修改它
# 根据 GNU 宽松通用公共许可证的条款,由
# 自由软件基金会;许可证的 2.1 版,或
#(由您选择)任何更高版本。

# 详见 tmpfiles.d(5)

q /var 0755 - - -

L /var/run - - - - ../run

d /var/log 0755 - - -
f /var/log/wtmp 0664 根 utmp -
f /var/log/btmp 0600 根 utmp -

d /var/cache 0755 - - -

d /var/lib 0755 - - -

d /var/spool 0755 - - -

我开始调整该d /var/log 0755 - - -行的值,但我的努力没有明显变化,我在该目录中进一步查看并找到了该/usr/lib/tmpfiles.d/00rsyslog.conf文件。

在那个文件中:

# 覆盖 systemd 的默认 tmpfiles.d/var.conf 以使 /var/log 可写
# syslog 组,以便 rsyslog 可以作为用户运行。
# 详见 tmpfiles.d(5)。

# 输入路径模式 UID GID 年龄参数
d /var/log 0775 根系统日志 -

root@ubuntu-virtual-machine:/usr/lib/tmpfiles.d# dpkg -S /usr/lib/tmpfiles.d/00rsyslog.conf

rsyslog:/usr/lib/tmpfiles.d/00rsyslog.conf

因此 rsyslog 包提供了一个 conf 包含文件,该文件试图覆盖tmpfiles.d/var.confconf 文件中设置的值。

结果是,当我卸载 rsyslog 时,会应用tmpfiles.d/var.confconf 文件设置,在本例中为0755.

我需要进一步研究是否tmpfiles.d仅适用于包维护人员,或者系统管理员是否还需要管理该区域内的文件。

编辑:

原来有三个目录,第一个具有最大的优先级(供管理员使用以覆盖其他两个目录的设置):

  1. /etc/tmpfiles.d/*.conf
  2. /run/tmpfiles.d/*.conf
  3. /usr/lib/tmpfiles.d/*.conf

更多信息: