Security

MySQL LOAD DATA INFILE 使用者權限設置

  • January 16, 2013

我知道使用者必須具有FILE權限*.*才能使用LOAD DATA INFILE命令而不使用LOCAL- 它通過客戶端發送文件數據 - 但是當授予 MySQL 使用者權限時,如何限制使用者可以從中載入數據的目錄GRANTFILE類似於secure_file_priv,但特定於使用者)?

這方面的最佳做法是什麼?簡單地強制使用者使用LOCAL關鍵字並犧牲一點性能來保證安全,或者授予FILE數據庫使用者特權?

我首先要說的是,這FILE是迄今為止您可以授予應用程序的最危險的特權。 FILEGRANT 因為在 mysql 的 sql 注入中您不能堆疊查詢要危險得多,因此您不能將 aSELECT 轉換為GRANT語句,並且該權限對於 sql 注入完全沒有用。相比之下,漏洞通常使用FILE特權來上傳後門。

例如這裡是一個使用 sql 注入的例子into outfile select name from user where id=1 union select "<?php eval($_GET[e])?>" into outfile "/var/www/backdoor.php"

如果您在 Ubuntu 系統上嘗試此查詢,它將失敗。這是因為 AppArmor 拒絕 MySQL 對 /var/www/ 的寫訪問。您可以修改 AppArmor 的規則以拒絕對您選擇的任何文件夾的讀/寫訪問。AppArmor 的配置非常簡單,您可以在此處對其進行修改:/etc/apparmor.d/usr.sbin.mysqld.

如果您使用的發行版不支持 AppArmor,您仍然可以使用內置的 Linux 文件權限,請記住,這些文件 io 函式將由執行 MySQL 的使用者帳戶執行。chown user -R /some/dir && chmod 700 -R /some/dir.

引用自:https://serverfault.com/questions/153769