Selinuxはmysqldへのアクセスを拒否します。

Selinuxはmysqldへのアクセスを拒否します。

mysqlデータベースをダンプするスクリプトがあります。その後、ファイルを圧縮し、cronを使用して自分のホームフォルダに保存します。問題は、エラーメッセージが表示されるようです。

mysqldump: "'auth_group' のフィールド表示" を実行できません: '/tmp/#sql_151e_0.MYI' ファイルを作成/書き込みできません (エラーコード: 13) (1) c2duo_db-22072011.sql

今私のcentosサーバーのグラフィックの観点から、selinxはmysqldへのアクセスを拒否したと表示されます。もちろん、selinuxを無効にすると正常に動作します。ただし、selinuxを有効にする必要があります。この問題を解決する方法はありますか?

予約されたこと

10 11 * * 5 /home/sh/mysqlbackup.sh

MySQLバックアップ.sh

  #!/bin/sh

    mysqldump -uroot -ppassword --opt c2duo_db > /home/sh/c2duo_db-`date +%d%m%Y`.sql

    cd /home/sh
    tar -zcvf c2duo_db.tgz *.sql

編集する:これが私がコマンドから得たものですgrep mysqld /var/log/audit/audit.log | tail | audit2why

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

また、このコンピュータにはmysqlサーバーがすでにインストールされています。だから私はこれが公式リポジトリだと思います。

答え1

ディレクトリのファイルコンテキストが正しくない可能性があります/tmp。私たちに一度見てくださいls -ldZ /tmp

内部の一時ファイルはどのようにfcontextを/tmp持つことができますかhttpd_sys_content_t

type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
                Missing or disabled TE allow rule.
                Allow rules may exist but be disabled by boolean settings; check boolean settings.
                You can see the necessary allow rules by running audit2allow with this audit message as input.

RHELでは次のようになります。

ls -ldZ /tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp

もちろん、バックアップファイルのパスとは何の関係もありません。特権の問題の場合は、次のメッセージが表示されます。

# su -s /bin/bash nobody -c 'mysqldump -uroot -p123456 --opt test > /root/test-`date +%d%m%Y`.sql'
bash: /root/test-13112013.sql: Permission denied

strace -f -ff -o /tmp/strace mysqldump -uroot -ppassword --opt c2duo_dbこれを使用して、どのファイルを開こうとしているかを確認して使用できます。

答え2

何か間違って表記されたようです。走ってみたことがありますかrestorecon -R /var/lib/mysql

答え3

次の提案コマンドを実行しましたaudit2why

% echo "type=AVC msg=audit(1311581788.889:12363): avc:  denied  { write } for  pid=22102 comm="mysqld" path="/tmp/#sql_151e_0.MYI" dev=dm-0 ino=103481390 scontext=root:system_r:mysqld_t:s0 tcontext=root:object_r:httpd_sys_content_t:s0 tclass=file" | audit2allow 

このコマンドは以下を返します。

#============= mysqld_t ==============
allow mysqld_t httpd_sys_content_t:file write;

これは必要なSeLinuxポリシー許可ルールです。

しかし、このルールを許可するのが安全かどうかはわかりません。

答え4

問題の原因:

問題の原因は、シェルスクリプトファイルを「/home/sh/」に入れたためです。

/home/ フォルダーの下にある /sh/ フォルダーは、システム生成フォルダー (システムユーザー作成時に作成されたフォルダー) ではなく、直接作成したフォルダーのようです。したがって、cron が実行中の場合、システムはシェルスクリプトファイル内のスクリプトへのアクセスを制限します。

メモ:Linux では、アクセスは /home/ ディレクトリのファイルに制限されます。しかし、ファイルは次の場所にあります。/home/[システムが各システムユーザー用に作成したディレクトリ]/無制限にアクセス可能

解決策:

Move the /sh/ folder along with the sh file inside a system generated folder under /home/ directory (or) create a system user named sh

関連情報