我有(应该)是一项相当简单的任务:在晚上将一组自定义日志文件迁移到数据库。
我将 logrotate (cron.daily) 与一个简单的 prerotate 任务一起使用
/var/log/myapplog/*.log
{
daily
copytruncate
rotate 366
dateext
dateformat .%Y-%m-%d
compress
missingok
compresscmd /usr/bin/xz
compressoptions -ze9
compressext .xz
prerotate
/usr/local/myapp/bin/DBWriter $1
endscript
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,SELinux 并不这么认为。如果我setenforce 0那么脚本运行完美。轮换日志,将它们发送到数据库等
setenforce 1,但是,返回:
logrotate_script: line 1: /usr/local/myapp/bin/DBWriter: Permission denied
我曾尝试更改 DBWriter 上的上下文,最近我将其设置为unconfined_u:unconfined_r:unconfined_t也不起作用......
理想情况下,我需要保持启用 SELinux。如果重要的话,DBWriter 也可以作为 java .jar 文件使用。但跑步java -jar DBWriter.jar也有同样的结果。
提前致谢!
编辑:Win.T 下面的回答为我解决了这个问题。
semanage permissive -a logrotate_t
Run Code Online (Sandbox Code Playgroud)
部分问题是我试图完全按照SELinux 旨在防止的方式进行:导致进程 A 执行未知文件 B 并对系统 C 造成严重破坏
项目设计考虑和限制使我们走上了这条道路。
客户并不总是想听到诸如安全性和面向未来之类的花哨的流行语。
查看/var/log/messages和/var/log/audit/audit.log(如果您正在auditd跑步)。您还可以用来audit2allow查看 SELinux 错误消息和可能的解决方案。
此外,尝试semanage permissive -a logrotate_t允许 logrotate 运行并且不被 SELinux 拒绝。
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |