Selinux

MariaDB 從伺服器應連接到 127.0.0.1:3307 以到達主伺服器。SELinux 說不。做什麼?

  • March 22, 2018

我在 CentOS 7 上有一個 MariaDB 伺服器。該伺服器應播放從屬伺服器並複制遠端主伺服器。可以通過 SSH 隧道訪問遠端主伺服器。SSH 隧道“入口”位於 127.0.0.1:3307。

使用 MariaDB 客戶端程序連接到此端點是可行的。

但是,MariaDB 伺服器無法連接。在 MySQL 錯誤日誌中,發現:Slave I/O: error connecting to master 'replisql01@127.0.0.1:3307' - retry-time: 60 maximum-retries: 86400 message: Can't connect to MySQL server on '127.0.0.1' (13 "Permission denied"), Internal MariaDB error code: 2003.

顯然,人們立即想到 SELinux 將 kibosh 放在從 MariaDB 伺服器傳出的非標準連接上。

在將 SELinux 置於許可模式(編輯/etc/selinux/config並重新啟動)後,良好的 phociform 程序設法連接。

讓我們檢查/var/log/audit/audit.log使用哪些日誌 SELinux 拒絕事件(以及其他)ausearch(有關 auditd 的更多資訊,請參見“auditd 簡介”)

ausearch --comm mysqld

這給出瞭如下條目:

time->Wed Mar 21 18:52:53 2018
type=PROCTITLE msg=audit(1521654773.504:120): proctitle="/usr/sbin/mysqld"
type=SYSCALL msg=audit(1521654773.504:120): arch=c000003e syscall=42 success=no exit=-115 a0=41 a1=7fd1f4028ad0 a2=10 a3=72 items=0 ppid=1 pid=1342 auid=4294967295 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=(none) ses=4294967295 comm="mysqld" exe="/usr/sbin/mysqld" subj=system_u:system_r:mysqld_t:s0 key=(null)
type=AVC msg=audit(1521654773.504:120): avc:  denied  { name_connect } for  pid=1342 comm="mysqld" dest=3307 scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket

系統呼叫 42sys_connect

很酷。

現在,我仍然需要通讀手冊(也許它甚至沒有幫助),所以問題是:

我要執行什麼命令讓 MariaDB 連接到 127.0.0.1:3307?因為我想重新啟用 SELinux

SELinux 策略控制程序可以對給定對象(如文件、設備或套接字)執行的每個操作。如果已將守護程序配置為使用非標準埠進行偵聽或通信,則目標策略會拒絕該操作,因為它應該這樣做。標籤用於控制埠。要查找 MariaDB 的標籤,請使用semanage,並grep使用其眾所周知的埠號過濾結果。

semanage port -l | grep 3306

這會產生以下輸出。

mysqld_port_t tcp 1186, 3306, 63132-63164

要更改此標籤的規則,請semanage再次對埠 3307 使用如下。

semanage port -a -t mysqld_port_t -p tcp 3307

執行上述命令後,再次檢查規則,可以看到現在允許 3307。

semanage port -l | grep 3307

這應該在埠列表中顯示 3307。

mysqld_port_t tcp 3307, 1186, 3306, 63132-63164

引用自:https://unix.stackexchange.com/questions/432650