我已经测试并确认,重新启动后,权限将重置/var/log
回下面列出的每个发行版/版本的默认值。问题是,为什么?
- 操作系统7
- 乌班图 >= 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 的安装选项存在问题。
答案1
我仍在深入研究细节,但看起来这些文件/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 Lesser General Public License 的条款 # 自由软件基金会;许可证版本 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 包含文件,该文件尝试覆盖conf 文件中设置的值tmpfiles.d/var.conf
。
结果是,当我卸载 rsyslog 时,tmpfiles.d/var.conf
conf 文件设置适用,在本例中为0755
.
我需要进一步研究是否tmpfiles.d
仅适用于软件包维护者,或者系统管理员是否也需要管理该区域内的文件。
编辑:
事实证明,共有三个目录,第一个目录具有最高优先级(供管理员使用以覆盖其他两个目录的设置):
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf
更多信息: