尝试写入已安装的驱动器时,Rsyslog 产生错误

尝试写入已安装的驱动器时,Rsyslog 产生错误

有人可以看一下这个,看看我是否做错了什么?

我正在运行 RockyLinux 并尝试设置系统日志服务器。它与附加了额外 2TB 数据驱动器的 Azure VM 一起运行。

我已将驱动器安装在 Rocky 中并进行了修改fstab,确认其在重新启动后存在,并且我可以对其进行写入。

Rsyslog 已全部设置和配置,如果我保留默认设置并允许将日志发送到 /var/log,则工作正常,但一旦我将其指向我的数据驱动器,我就会收到权限错误。

May 24 11:30:20 MyServer rsyslogd[4315]: error during config processing: Could not open dynamic file '/datadrive/syslogs/MyServer/rsyslogd.log' [state -3000] - discarding message [v8>
May 24 11:30:20 MyServer rsyslogd[4315]: error during config processing: omfile: creating parent directories for file  '/datadrive/syslogs/MyServer/rsyslogd.log' failed: Permission denied

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           1.6G  148M  1.4G  10% /run
/dev/sda3       7.9G  1.8G  6.1G  23% /
/dev/sda2       994M  430M  564M  44% /boot
/dev/sda1       100M  7.0M   93M   7% /boot/efi
/dev/sdb1        16G   28K   15G   1% /mnt
tmpfs           769M     0  769M   0% /run/user/1000
/dev/sdc1       2.0T   15G  2.0T   1% /datadrive

并且两个目录具有相同的权限和所有者

[myroot@MyServer log]$ pwd
/var/log
.......
drwx------.  2 root   root     31 May 24 11:09 remote-device


[myroot@MyServer /]$ pwd
/
.....    
drwx------.   3 root root   21 May 24 10:03 datadrive

我唯一注意到的是,当我尝试进入数据驱动器cd /datadrivesudo cd /datadrive不起作用时,我必须sudo su在将目录更改为 /datadrive 之前发出问题

这可能是导致问题的原因吗?任何想法将不胜感激。

答案1

我相信你的问题是 ACL,可能是由 AppArmor 控制的。

不过,首先,为了将来阅读此答案的其他人的利益,您的日志权限是非标准的。运行日志记录是不正常的root- 通常这会在syslog属于adm组的用户下发生。因此,要准备自定义日志位置,您通常需要确保所需目录可由syslog组写入。如果您想继续使用,您可以亲自跳过下面的chgrp和命令,但其他人将需要它们。chmodroot

1. 配置

更新/etc/apparmor.d/usr.sbin.rsyslogd并在第一行下方添加第二行:

  /var/log/**                   rw,
  /datadrive/**                 rw,

第一行是默认位置,它已经存在于您的配置文件中。第二行是您的数据驱动器安装点。其他读者应该修改此位置以适应。

2. 命令

跑步:

sudo chgrp syslog /datadrive/
sudo chmod g+w /datadrive/

sudo systemctl restart apparmor.service
sudo systemctl restart rsyslog.service

第一个命令将数据驱动日志位置的组所有权更改为syslog,这是标准的,第二个命令将允许该组写入该目录(包括创建文件和子目录)。如果您继续使用,您可以亲自跳过这两个命令root,但如上所述,具有标准设置的其他用户将需要它们。

然后我们重新启动 AppArmor,以获取配置更改,然后重新启动 rsyslogd。

您现在应该能够通过运行来验证是否成功sudo systemctl status rsyslog,并且实际上可以通过检查数据是否添加到该/datadrive位置来验证。

额外的

作为参考,这会将所有权和权限完全重置为正常默认值,即总体更改而不是上面列出的特定手术更改:

sudo chown root:syslog /datadrive/
sudo chmod 775 /datadrive/

并且,它是可能的(但不太可能)您可能需要按照这些方式运行一些东西来专门控制 ACL - 但由于 Rocky Linux 似乎使用 AppArmor,这是最有可能的罪魁祸首:

sudo setfacl -m user:syslog:rwx /datadrive/

请注意,我不是 Rocky Linux 用户,但这些是我在 Ubuntu/Debian 上必须遵循的步骤,因此我预计原因和解决方案是相同的,因为两者都使用 AppArmor。

作为更广泛的观察,如果您修改文件位置,则始终值得检查任何标准系统服务的 AppArmor 限制,因为安装了 AppArmor 的系统通常会为此类进程定义严格的安全控制。

相关内容