Mysql

CentOS 5.3 上的 rsyslog-mysql 沒有訪問 mysql.sock 的權限

  • August 31, 2010

在使用 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 文件有這樣的說法:

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 設置為 permissive 模式確實可以解決問題。這將是生產伺服器,並且不允許 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 服務後,錯誤繼續存在,並且審核日誌中沒有新的“拒絕”消息。有人有什麼想法嗎?

嗚!!

所以我非常接近 semodule 解決方案……它實際上有點工作,但我不是 100% 確定為什麼。我重新啟動了伺服器並出於沮喪重新載入了 semodule。selinux 已啟用,我看到系統消息顯示在數據庫中。

希望這將有助於其他人,如果他們偶然發現它。祝你好運!

小心不要審計,策略可以定義不審計的東西,即不要審計通常會說“我預計會失敗,我不想看到它/讓它填滿我的日誌”。如果是這種情況,那麼您將看不到它。

來自 semodule 手冊頁

打開所有 AVC 消息

SELinux 目前正在“不審計”。

semodule -DB

重新打開“dontaudit”規則。

semodule -B

這是一些描述它的背景故事

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

您絕對應該熟悉參考策略 (refpolicy) 概念。查看 syslog 和 mysql 模組(策略源),如果需要重新編譯這些模組並試用它們。

也不要忘記,在許可模式下,拒絕只記錄一次,直到重新啟動或策略載入等事情發生。在強制您每次嘗試訪問時都會遭到拒絕。

引用自:https://serverfault.com/questions/23534