前言:小白一枚,記錄踩過的坑,有錯誤的地方麻煩路過的大牛糾正一下,謝謝
問題描述
嘗試將資料庫里的資料通過命令select into outfile和命令load data infile
匯出和匯入到目錄/home/mysql/下報錯error1
軟體版本:centos 7 和mysql 5.7
解決的思路(百度)
目標目錄/home/mysql/的權限不夠;
selinux的影響;
將引數secure_file_priv設定為’’(空)
設定引數secure_file_priv設定為’’(空)
vim進入mysql的組態檔修改引數secure_file_priv
按O插入 esc推出編輯 :wq!保存并退出
[root@localhost ***]# vim /etc/my.cnf
修改如:secure-file-priv=‘ ‘
查看修改后結果
mysql> show global variables like ‘%secure%’;
| secure_file_priv | |
嘗試一
關閉selinux
修改目錄/home/mysql/權限為mysql:mysql
1.關閉selinux
通過vim命令進入selinux的組態檔
按O插入 esc推出編輯 :wq!保存并退出
[root@localhost ***]# vim /etc/selinux/config
找到SELINUX=enforcing:將enforcing 改為 disabled
重啟系統才能生效,重啟時間會比較久
重啟后查看selinux狀態
[root@localhost ***]# sestatus;
SELinux status: disabled(現在是關閉狀態)
2.查看并修改目錄/home/mysql/的所有者
[root@localhost ***]# chown -R mysql:mysql /home/mysql/
[root@localhost ***]# chmod -R 711 /home/mysql/
(備注:711是參考目錄/var/lib/mysql/的權限
[root@localhost ***]# ls -dl /var/lib/mysql/)
查看修改結果
[root@localhost ***]# ls -dl /home/mysql/
drwx–x--x. 2 mysql mysql (操作時間)home/mysql/
3.再次匯入,ok
mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
Query OK, 6 rows affected (0.14 sec)
嘗試二:
1.開啟selinux
通過vim命令進入selinux的組態檔
按O插入 esc推出編輯 :wq!保存并退出
[root@localhost ***]# vim /etc/selinux/config
找到SELINUX= disabled:將 disabled改為enforcing
重啟系統才能生效,重啟時間會比較久
重啟后查看selinux狀態
[root@localhost ***]# sestatus;
SELinux status: enforcing (現在是開啟狀態)
2.修改目錄/home/mysql/的安全背景關系
要讓mysql能夠匯入/home/mysql/目錄下的檔案,
首先就要讓mysql和/home/mysql/各自對應的安全背景關系一致,
需要先確認他們各自的安全背景關系
使用的命令
ls -Z 檔案 查看檔案的安全背景關系
ls -Zd 目錄 查看目錄的安全背景關系
ps auxZ | grep 行程 查看行程的安全背景關系
/home/mysql/的安全背景關系
[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:user_home_dir_t:s0 /home/mysql/
這一行對應為:(身份欄位:角色:型別:靈敏度)
擁有者系統,型別檔案,安全背景關系user_home_dir_t,靈敏度s0
mysql的安全背景關系
[root@localhost ***]# ps auxZ |grep mysqld
system_u:system_r:mysqld_t:s0 mysql
兩者的安全背景關系不一致
mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
ERROR 1 (HY000): Can’t create/write to file ‘/home/mysql/c.txt’ (Errcode: 13 - Permission denied)
參考mysql的資料目錄修改安全背景關系
[root@localhost ***]# ls -Zd /var/lib/mysql
system_u:object_r:mysqld_db_t:s0 /var/lib/mysql
使用chcon 命令:
[root@localhost ***]# chcon -Rt mysqld_db_t /home/mysql/
[root@localhost ***]# ls -Zd /home/mysql/
system_u:object_r:mysqld_db_t:s0 /home/mysql/
3.查看并修改目錄/home/mysql/的權限(同嘗試一)
4 再次嘗試匯出資料,ok
mysql> select * into outfile ‘/home/mysql/c.txt’ from p;
Query OK, 6 rows affected (0.24 sec)
匯出成功
所以要操作對應的檔案,要滿足selinux和對用的權限
先記錄下吧
非常感謝作者學到了很多,少踩很多坑)
SELinux安全背景關系查看方法(超詳細)
[http://c.biancheng.net/view/1149.html]
整理下命令
1 查看檔案的安全背景關系 ls -Z 檔案
2 查看目錄的安全背景關系 ls -Zd 目錄
3 查看行程的安全背景關系 ps auxZ | grep 行程
4 編輯selinux的組態檔 vim /etc/selinux/config
5 查詢SELinux的運行模式 getenforce
6 查看selinux的狀態sestatus
stenforce 只能進行兩種模式的切換:
[root@localhost ~]# setenforce 選項
選項:
0: 切換成 permissive(寬容模式);
1: 切換成 enforcing(強制模式);
7 安全目錄解讀
system_u:object_r:httpd_sys_content_t:s0:[類別]
#身份欄位:角色:型別:靈敏度:[類別]
8 seinfo 查詢selinux資訊,命令格式如下:
[root@localhost ~]# seinfo [選項]
選項:
-u: 列出SELinux中所有的身份(user);
-r: 列出SELinux中所有的角色(role);
-t: 列出SELinux中所有的型別(type);
-b: 列出所有的布林值(也就是策略中的具體規則名稱);
-x: 顯示更多的資訊;
9 設定檔案或目錄的權限 chcon 命令,格式如下:
[root@localhost ~]# chcon [選項] 檔案或目錄
選項:
-R: 遞回,當前目錄和目錄下的所有子檔案同時設定;
-t: 修改安全背景關系的型別欄位,最常用;
-u: 修改安全背景關系的身份欄位;
-r: 修改安全背景關系的角色欄位;
10 修改目錄及子檔案所有者
chown -R mysql:mysql /home/mysql/
11 查看目錄的權限 ls -dl /home/mysql/
12 把檔案的安全背景關系恢復成默認的安全背景關系,restorecon 命令格式如下:
[root@localhost ~] # restorecon [選項】 檔案或目錄
選項:
-R:遞回.當前目錄和目錄下所有的子檔案同時恢復;
-V:把恢復程序顯示到螢屏上;
13 記錄下
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t “/www(/.*)?”
#這條命令會給/www/目錄及目錄下的所有內容設定默認安全背景關系型別是httpd_sys_content_t
[root@localhost ~# semanage fcontext -l | grep “/www”
查看目錄/www的默認安全背景關系
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236026.html
標籤:其他
下一篇:您即將提交的資訊不安全
