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


15

目前,我们正在Rails应用程序服务器上的ruby上从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
}

然后将其符号链接到/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).

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

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

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

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

还是有针对特定应用程序日志轮换的另一种推荐方法?

(也在Unix StackExchange上问到)


好问题!我看到稍后有一些关于检查用户名“ root”而不是uid == 0的讨论,但这也没有触发为什么需要root所有权的问题。
2014年

Answers:


6

问题是,logrotate配置文件可以以root身份运行任何命令(使用prerotate / postrotate节)。因此,通过向deployer用户授予对中文件的写访问权限,您将有效地赋予用户root特权/etc/logrotate.d/。所以不,这不是错误。

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


我们的方法一直是倾向于从应用程序外部的目录符号链接到应用程序文件,以使每个部署不仅推出新应用程序,而且还推送任何配置文件更改。即使授予部署者在应用程序目录之外部署代码的权限,也违反了这种方法-但是同样地,必须将应用程序文件抛弃为root拥有,在部署后感觉也很糟糕。因此,也许原来的方法无法再与logrotate 3.8.0+配合使用
phantomwhale 2014年

2
@phantomwhale您的原始方法隐式地为您的部署者用户提供了完全的root特权。在logrotate 3.8中,这并不是什么新鲜事物。如果您想在限制部署者权限的同时仍允许其更新配置,那么我认为您需要使用logrotate以外的方法。
pelle

2

我意识到我参加聚会有点晚了,但是我遇到了类似的问题,并认为我会分享我的解决方案。

logrotate我无法阅读我编写的配置时,我的问题就开始了。我不想将新配置部署到root拥有的文件夹中,因为我不想部署用户对任何东西都具有root访问权限。

最初,我尝试以logrotate部署用户身份运行,但它抱怨无法访问状态文件/var/lib/logrotate/state。然后,我阅读了手册页。您可以指定使用的状态文件logrotate!因此,对于我来说,设置每日cron以logrotate使用自定义状态文件作为部署用户执行似乎是一个更好的解决方案。这样,部署用户或应用程序就不需要根访问权限。

指定状态文件的方法如下:

logrotate --state /path/to/status /path/to/custom_logrotate.conf

现在,您可以以所需的任何用户和配置所有者身份运行logrotate!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.