CentOS 5.3 上的 rsyslog-mysql 没有权限访问 mysql.sock

CentOS 5.3 上的 rsyslog-mysql 没有权限访问 mysql.sock

安装并配置带有 mysql 扩展的 MySQL 和 rsyslog 后,我在 /var/log/messages 中收到以下错误:

rsyslogd:db 错误(2002):无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器(13)

我可以通过指定‘--socket=/var/lib/mysql/mysql.sock’使用 mysql 客户端通过套接字进行连接。

我已将问题缩小到 selinux 权限。/var/log/audit/audit.log 文件有以下内容:

类型 = AVC 消息 = 审核 (1244654592.150:320): avc: 拒绝 { 搜索 } pid=6382 comm="rsyslogd" name="mysql" dev=xvda3 ino=1369538 scontext=user_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:mysqld_db_t:s0 tclass=dir

将 selinux 设置为宽容模式确实可以解决问题。这将是生产服务器,将 selinux 保留为宽容模式不是一个选择。

在 /var/lib/mysql/mysql.sock 上运行 restorecon 也无法解决问题。有人能帮我吗?

编辑:

所以我的探索还在继续,下面是更新。我最终创建了一个 semodule 来明确允许这种行为。为此,我做了以下操作(以 root 身份):

# cd /var/log/audit/
# grep mysql audit.log | audit2allow

它输出的是:

#============= syslogd_t ==============
allow syslogd_t mysqld_db_t:dir search;
allow syslogd_t mysqld_var_run_t:sock_file write;
allow syslogd_t mysqld_t:unix_stream_socket connectto;

这些确实是我想要授予 rsyslog 的权限...所以我按照RedHat 的说明并使用 semodule 命令进行安装。

尝试重新启动 rsyslog 服务后,错误仍然存​​在,并且审计日志中没有新的“拒绝”消息。有人有什么想法吗?

答案1

哇喔!!

所以我非常接近 semodule 解决方案...它实际上有点奏效,但我不确定为什么。我重新启动了服务器并出于沮丧重新加载了 semodule。selinux 已启用,我看到系统消息显示在数据库中。

希望这能帮助到那些偶然发现它的人。祝你好运!

答案2

小心不要审计,策略可以定义不审计的事情,即不要审计通常会说“我预计会出现这种失败,我不想看到它/让它填满我的日志”。如果是这种情况,那么您将看不到它。

来自 semodule 手册页

打开所有 AVC 消息,

SELinux 当前处于“不审计”状态。

数据库模块

重新启用“dontaudit”规则。

序列模块-B

以下是一些描述它的背景故事

http://danwalsh.livejournal.com/11673.html

您一定要熟悉参考策略(refpolicy)概念。查看 syslog 和 mysql 模块(策略源),如果需要,重新编译这些模块并尝试它们。

还请不要忘记,在宽容模式下,拒绝只会记录一次,直到发生重新启动或策略加载等事件。在强制模式下,每次尝试访问时都会被拒绝。

相关内容