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