在使用mysql扩展安装和configurationMySQL和rsyslog之后,在/ var / log / messages中出现以下错误:
rsyslogd:db error(2002):无法通过socket'/var/lib/mysql/mysql.sock'(13)连接到本地MySQL服务器
我可以通过指定'–socket = / var / lib / mysql / mysql.sock'通过套接字使用mysql客户端连接。
我已经把问题缩小到了selinux的权限。 /var/log/audit/audit.log文件有这样的说法:
type = AVC msg = audit(1244654592.150:320):avc:denied {search} for 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也不能解决问题。 有谁能帮我一把吗?
编辑:
所以我的追求继续,inheritance人更新。 我结束了创build一个semodule明确允许这种行为。 要做到这一点,我做了以下(作为根):
# 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服务后,错误继续,审计日志中没有新的“拒绝”消息。 任何人有任何想法?
呜!
所以我非常接近semodule解决scheme…它实际上有用,但我不是100%确定为什么。 我重新启动服务器,并重新加载的模块出于挫折。 selinux启用,我看到系统消息显示在数据库中。
希望这会帮助别人,如果他们偶然发现。 祝你好运!
要小心dontaudits,政策可以定义的东西不审计,即dontaudits通常说:“我希望这个失败,我不想看到它/填满我的日志”。 如果是这样的话,你就不会看到它。
从semodule手册页
打开所有的AVC消息
SELinux目前是“dontaudit”ing。
semodule -DB
打开“dontaudit”的规则。
模块-B
这是一些描述它的背后故事
http://danwalsh.livejournal.com/11673.html
你一定要熟悉参考政策(refpolicy)的概念。 查看syslog和mysql模块(策略源),如果需要的话重新编译这些模块并试用。
另外不要忘记,在宽容模式下,拒绝只logging一次,直到重启或策略负载等事件发生。 在每次尝试访问时强制执行拒绝。