由于非 root 所有权,Logrotate 不再读取符号链接的配置文件

pha*_*ale 15 permissions ubuntu logrotate

我们目前正在 ruby​​ on rails 应用程序服务器上从 Ubuntu 12.04 LTS 升级到 14.04 LTS,并且注意到日志文件不再循环。

在两台机器上,我们都有一个/var/app-name/config/logrotate由 unix 用户拥有的文件,deployer其中包含一个有效的 logrotate 文件,如下所示:

/var/app-name/log/*.log {
  daily
  rotate 365
  delaycompress
  compress
  dateext
  dateformat -%Y%m%d
  missingok
  copytruncate
}
Run Code Online (Sandbox Code Playgroud)

然后将其符号链接到/etc/logrotate.d/目录中app-name

在我们的 Ubuntu 12.04 服务器上,我们有运行良好的 logrotate 3.7.8。它进入var/app-name/log/目录并轮换所有日志文件

但是在 Ubuntu 14.04 服务器上,我们有 logrotate 3.8.7,它不会为我们的应用程序旋转日志文件。

当我通过调试它时,sudo logrotate -d -f /etc/logrotate/.conf我得到以下输出:

Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Run Code Online (Sandbox Code Playgroud)

在代码中追踪这一点,似乎为 3.8.x 发布流添加了此更改:https : //github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526

如果我更改文件的所有权符号链接到/var/app-name/config/logrotateroot那么它再次开始工作。但是鉴于此文件是我的应用程序的一部分,并且由我们在此状态下使用的 capistrano 部署框架创建,我宁愿不必更改它的所有权,因为它曾经可以正常工作。

那么 logrotate 是否推荐/支持符号链接的配置文件?

如果是这样,是否应该拒绝使用deployer符号链接到/etc/logrotate.d目录中的我的文件(由 拥有),被视为错误?

或者是否有另一种推荐的应用程序特定日志轮换方法?

(也在unix StackExchange上询问)

pel*_*lle 6

问题是 logrotate 配置文件可以以 root 身份运行任何命令(使用 prerotate/postrotate 节)。因此,您可以通过授予deployer用户对/etc/logrotate.d/. 所以不,这不是一个错误。

如果您信任您的部署者用户,那么我想您可以通过授予它 sudo 权限来将文件复制到/etc/logrotate.d/. 当然,假设部署者用户与运行 Web 应用程序的用户不同。

  • @phantomwhale 您的原始方法隐含地为您的部署者用户提供了完全的 root 权限。这在 logrotate 3.8 中并不新鲜。如果你想限制部署者的权限,同时仍然允许它更新配置,那么我认为你需要使用 logrotate 以外的东西。 (2认同)