web-dev-qa-db-ja.com

SELinuxはMariaDBへのnrpeアクセスをブロックします

NRPEを介してIcinga2によって監視されている同じLAN内にいくつかの仮想マシンがあります。

[マシンA]

  • CentOS 6

  • Icinga2。

[マシンB]

  • CentOS 6

  • MariaDBv10.1.12が正しく実行されている

My.cnfのDatadirとソケットの設定:

datadir=/database/mariadb
socket=/database/mariadb/mysql.sock

次のシンボリックリンクもあります。

/var/lib/mysql -> /database/mariadb

上記すべてのowner:groupはmysql:mysqlです。

  • SELinuxが有効

  • / usr/lib64/nagios/plugins/check_mysql v2.0.3

次のセキュリティコンテキストを使用します。

-rwxr-xr-x. root root system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql
  • nrpe.cfgには、次の行が含まれています。

command[check_mysql]=/usr/lib64/nagios/plugins/check_mysql -H localhost -u xxx -p xxx -P 3306

今問題:

Icinga(マシンAから)のレポート:

"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)"

マシンBで次のラインを手動で実行した場合:

Sudo -u nrpe /usr/lib64/nagios/plugins/check_mysql -H localhost -u xxx -p xxx -P 3306

結果は正常です(終了コード0):

Uptime: 2085  Threads: 1  Questions: 68204  Slow queries: 0  Opens: 37  Flush...

マシンBでSELinuxを無効にした場合のみ(echo 0 > /selinux/enforce)Icingaはmysqlに接続して、ステータスOKを表示できます。しかし、SELinuxを無効にしたくありません。 SELinuxを有効にし、Icingaをmysqlに正しく接続するための適切な設定を見つけようとしています。

[編集]

IcingaがマシンBのmysqlをチェックするたびに、マシンBのaudit.logに次の2つの新しい行が表示されます。

type=AVC msg=audit(1460038526.265:69): avc:  denied  { read } for  pid=4858 comm="check_mysql" name="mysql" dev=dm-0 ino=130900 scontext=system_u:system_r:nagios_services_plugin_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1460038526.265:69): Arch=c000003e syscall=42 success=no exit=-13 a0=3 a1=7fffe4d270f0 a2=6e a3=7fffe4d263e0 items=0 ppid=4857 pid=4858 auid=4294967295 uid=497 gid=498 euid=497 suid=497 fsuid=497 egid=498 sgid=498 fsgid=498 tty=(none) ses=4294967295 comm="check_mysql" exe="/usr/lib64/nagios/plugins/check_mysql" subj=system_u:system_r:nagios_services_plugin_t:s0 key=(null)
1
Ciprian Stoica

これを試して:

setsebool -P nagios_run_Sudo 1

NRPEを使用するホスト上。このオプションは、SELinuxポリシーではデフォルトで無効になっています。

4

やっと解決できました。他の人にも役立つかもしれないので、以下の解決策を共有します。

以下の行だけを含むaudit.logという名前の作業ファイルを作成しました。

type=AVC msg=audit(1460038526.265:69): avc:  denied  { read } for  pid=4858 comm="check_mysql" name="mysql" dev=dm-0 ino=130900 scontext=system_u:system_r:nagios_services_plugin_t:s0 tcontext=unconfined_u:object_r:var_lib_t:s0 tclass=lnk_file
type=SYSCALL msg=audit(1460038526.265:69): Arch=c000003e syscall=42 success=no exit=-13 a0=3 a1=7fffe4d270f0 a2=6e a3=7fffe4d263e0 items=0 ppid=4857 pid=4858 auid=4294967295 uid=497 gid=498 euid=497 suid=497 fsuid=497 egid=498 sgid=498 fsgid=498 tty=(none) ses=4294967295 comm="check_mysql" exe="/usr/lib64/nagios/plugins/check_mysql" subj=system_u:system_r:nagios_services_plugin_t:s0 key=(null)

私は走った:

sealert -a audit.log > sealert.log

結果のsealert.logには、問題の説明が含まれていました。

SELinuxは、/ usr/lib64/nagios/plugins/check_mysqlがlnk_filemysqlへの読み取りアクセスを阻止しています。

また、それを修正するための提案。そこで提案されているように、私は次のことを実行しました。

grep check_mysql audit.log | audit2allow -M mypol

これにより、mypol.ppとmypol.teの2つのファイルが出力されました。

最後に、次のコマンドを実行しました。これで問題は完全に解決しました。

semodule -i mypol.pp
1
Ciprian Stoica

問題は、ソケットが通常、データファイルとともに/var/lib/mysql内にあることです。

別のデータベースディレクトリを使用しているため、シンボリックリンクに関係なく、SELinuxはリクエストをブロックしています。

TCP接続(127.0.0.1およびnotlocalhostを使用)を介してMySQLへのアクセスを試みることができます)

ただし、これでも、MySQLデーモン自体を使用したSELinuxで問題が発生する可能性があります。

0
lazyfrosch