为什么 selinux 策略适用于从 cronjobs 运行的命令(例如:logrotate),而不适用于直接从命令行运行的命令?

Pat*_*Pat 7 logrotate selinux

为什么 selinux 策略适用于从 cronjobs 运行的命令(例如:logrotate),而不适用于直接从命令行运行的命令?

当我从命令行手动运行 logrotate 时,它​​运行良好。但是当它从 cronjob 运行时,我在 audit.log 中收到一个错误,提醒我 selinux 阻止了对 www 的访问等。

这是为什么?以及如何模拟它从 cronjob 运行以进行测试?

Jef*_*ler 8

cron运行时logrotate,它的SELinux对地限制一个logrotate_t“类型”。该“类型”被限制修改其他文件类型(又名“逃避限制”)。

运行 logrotate 时,您(很可能)从“无限制”类型开始,这意味着它所说的 -logrotate允许该进程修改文件。您可能还想logrotate重新启动或发送进程信号(例如通过 postrotate);该活动也可能受到 SELinux 的限制。

我的建议是告诉 SELinux 允许(“允许”) logrotate_t 类型来逃避限制,使用:

semanage permissive -a logrotate_t
Run Code Online (Sandbox Code Playgroud)

这样做是一种适度的解决方案,介于关闭 SELinux和微调允许您需要的限制逃逸(也许使用自定义标签)的策略之间。要恢复此更改,请使用semanage permissive -d logrotate_t.

模拟 cron 启动过程的最佳方法是将作业放入 cron。或者,我知道runcon,尽管我无法成功使用它。

  • 从命令行运行或从 cron 运行之间差异的原因的描述很棒。但我不同意将这种类型置于许可模式的建议。虽然它不像完全关闭 SELinux 那样糟糕,但它仍然是一个非常粗略的措施。IMO,OP 应该尝试解决为什么他们在处理这些特定文件时遇到问题。 (3认同)
  • 我欢迎更好的描述/解决方案,或任何成功的 `runco​​n` 模拟。我自己只有中等程度的 SELinux 能力。我尽力避免将其关闭,但我缺乏制定合理政策所需的博士学位。 (2认同)