<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/2245

            0x01 前言


            很多文章中會說,數據庫的權限按最小權限為原則,這句話本身沒有錯,但是卻是一句空話。因為最小權限,這個東西太抽象,很多時候你并弄不清楚具體他需要哪些權限。 現在很多mysql用著root賬戶在操作,并不是大家不知道用root權限太大不安全,而是很多人并不知道該給予什么樣的權限既安全又能保證正常運行。所以,本文更多的是考慮這種情況下,我們該如何簡單的配置一個安全的mysql。注:本文測試環境為mysql-5.6.4

            0x02 Mysql權限介紹


            mysql中存在4個控制權限的表,分別為user表,db表,tables_priv表,columns_priv表。

            mysql權限表的驗證過程為:

            1,先從user表中的Host,User,Password這3個字段中判斷連接的ip、用戶名、密碼是否存在,存在則通過驗證。
            2,通過身份認證后,進行權限分配,按照user,db,tables_priv,columns_priv的順序進行驗證。即先檢查全局權限表user,如果user中對應的權限為Y,則此用戶對所有數據庫的權限都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對應的具體數據庫,并得到db中為Y的權限;如果db中為N,則檢查tables_priv中此數據庫對應的具體表,取得表中的權限Y,以此類推。
            

            0x03 mysql有哪些權限


            權限

            權限級別

            權限說明

            CREATE

            數據庫、表或索引

            創建數據庫、表或索引權限

            DROP

            數據庫或表

            刪除數據庫或表權限

            GRANT OPTION

            數據庫、表或保存的程序

            賦予權限選項

            REFERENCES

            數據庫或表

             

            ALTER

            更改表,比如添加字段、索引等

            DELETE

            刪除數據權限

            INDEX

            索引權限

            INSERT

            插入權限

            SELECT

            查詢權限

            UPDATE

            更新權限

            CREATE VIEW

            視圖

            創建視圖權限

            SHOW VIEW

            視圖

            查看視圖權限

            ALTER ROUTINE

            存儲過程

            更改存儲過程權限

            CREATE ROUTINE

            存儲過程

            創建存儲過程權限

            EXECUTE

            存儲過程

            執行存儲過程權限

            FILE

            服務器主機上的文件訪問

            文件訪問權限

            CREATE TEMPORARY TABLES

            服務器管理

            創建臨時表權限

            LOCK TABLES

            服務器管理

            鎖表權限

            CREATE USER

            服務器管理

            創建用戶權限

            PROCESS

            服務器管理

            查看進程權限

            RELOAD

            服務器管理

            執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限

            REPLICATION CLIENT

            服務器管理

            復制權限

            REPLICATION SLAVE

            服務器管理

            復制權限

            SHOW DATABASES

            服務器管理

            查看數據庫權限

            SHUTDOWN

            服務器管理

            關閉數據庫權限

            SUPER

            服務器管理

            執行kill線程權限

            0x04 數據庫層面(db表)的權限分析


            權限

            說明

            網站使用賬戶是否給予

            Select???

            可對其下所有表進行查詢

            建議給予

            Insert????????????

            可對其下所有表進行插入

            建議給予

            Update???????????????

            可對其下所有表進行更新

            建議給予

            Delete???????????????????

            可對其下所有表進行刪除

            建議給予

            Create??????????????????

            可在此數據庫下創建表或者索引

            建議給予

            Drop?????????????????

            可刪除此數據庫,及此數據庫下的表

            不建議給予

            Grant???????????????

            賦予權限選項

            不建議給予

            References?????????????

            未來MySQL特性的占位符

            不建議給予

            Index????????????????

            可對其下的所有表進行索引

            建議給予

            Alter??????????????????

            可對其下的所有表進行更改

            建議給予

            Create_tmp_table??????????

            創建臨時表

            不建議給予

            Lock_tables?????????????

            可對其下所有表進行鎖定

            不建議給予

            Create_view??????????????

            可在此數據下創建視圖

            建議給予

            Show_view?????????????

            可在此數據下查看視圖

            建議給予

            Create_routine?????????

            可在此數據下創建存儲過程

            不建議給予

            Alter_routine????????

            可在此數據下更改存儲過程

            不建議給予

            Execute?????????

            可在此數據下執行存儲過程

            不建議給予

            Event???????????????

            可在此數據下創建事件調度器

            不建議給予

            Trigger

            可在此數據下創建觸發器

            不建議給予

            0x05 mysql安全配置方案


            1 限制訪問mysql端口的ip

            windows可以通過windows防火墻或者ipsec來限制,linux下可以通過iptables來限制。

            2 修改mysql的端口

            windows下可以修改配置文件my.ini來實現,linux可以修改配置文件my.cnf來實現。

            3 對所有用戶設置強密碼并嚴格指定對應賬號的訪問ip

            mysql中可在user表中指定用戶的訪問可訪問ip

            4?root特權賬號的處理

            建議給root賬號設置強密碼,并指定只容許本地登錄

            5?日志的處理

            如需要可開啟查詢日志,查詢日志會記錄登錄和查詢語句。

            6?mysql進程運行賬號

            在windows下禁止使用local system來運行mysql賬戶,可以考慮使用network service或者自己新建一個賬號,但是必須給與mysql程序所在目錄的讀取權限和data目錄的讀取和寫入權限; 在linux下,新建一個mysql賬號,并在安裝的時候就指定mysql以mysql賬戶來運行,給與程序所在目錄的讀取權限,data所在目錄的讀取和寫入權限。

            7 mysql運行賬號的磁盤權限

            1)mysql運行賬號需要給予程序所在目錄的讀取權限,以及data目錄的讀取和寫入權限 
            2)不容許給予其他目錄的寫入和執行權限,特別是有網站的。 
            3)取消mysql運行賬戶對于cmd,sh等一些程序的執行權限。
            

            8 網站使用的mysql賬戶的處理

            新建一個賬戶,給予賬戶在所使用數據庫的所有權限即可。這樣既能保證網站對所對應的數據庫的全部操作,也能保證賬戶不會因為權限過高而影響安全。給予單個數據庫的所有權限的賬戶不會擁有super, process, file等管理權限的。 當然,如果能很明確是的知道,我的網站需要哪些權限,還是不要多給權限,因為很多時候發布者并不知道網站需要哪些權限,我才建議上面的配置。而且我指的通用的,具體到只有幾臺機器,不多的情況下,我個人建議還是給予只需要的權限,具體可參考上面的表格的建議。

            9 刪除無用數據庫

            test數據庫對新建的賬戶默認有權限

            0x06 mysql入侵提權分析及防止措施


            一般來說,mysql的提權有這么幾種方式:

            1 udf提權 此方式的關鍵導入一個dll文件,個人認為只要合理控制了進程賬戶對目錄的寫入權限即可防止被導入dll文件;然后如果萬一被攻破,此時只要進程賬戶的權限夠低,也沒辦執行高危操作,如添加賬戶等。

            2 寫入啟動文件

            這種方式同上,還是要合理控制進程賬戶對目錄的寫入權限。

            3 當root賬戶被泄露

            如果沒有合理管理root賬戶導致root賬戶被入侵,此時數據庫信息肯定是沒辦法保證了。但是如果對進程賬戶的權限控制住,以及其對磁盤的權限控制,服務器還是能夠保證不被淪陷的。

            4 普通賬戶泄露(上述所說的,只對某個庫有所有權限的賬戶)

            此處說的普通賬戶指網站使用的賬戶,我給的一個比較方便的建議是直接給予特定庫的所有權限。賬戶泄露包括存在注入及web服務器被入侵后直接拿到數據庫賬戶密碼。

            此時,對應的那個數據庫數據不保,但是不會威脅到其他數據庫。而且這里的普通賬戶無file權限,所有不能導出文件到磁盤,當然此時還是會對進程的賬戶的權限嚴格控制。

            普通賬戶給予什么樣的權限可以見上表,實在不會就直接給予一個庫的所有權限。

            0x07 安全配置需要的常用命令


            1.新建一個用戶并給予相應數據庫的權限

            grant select,insert,update,delete,create,drop privileges on database.* to [email protected] identified by 'passwd';
            
            grant all privileges on database.* to [email protected] identified by 'passwd';
            

            2.刷新權限

            flush privileges;
            

            3.?顯示授權

            show grants;
            

            4.?移除授權

            revoke delete on *.* from 'jack'@'localhost';
            

            5.?刪除用戶

            drop user 'jack'@'localhost';
            

            6.?給用戶改名

            rename user 'jack'@'%' to 'jim'@'%';
            

            7.?給用戶改密碼

            SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
            

            8.?刪除數據庫

            drop database test;
            

            9.?從數據庫導出文件

            select * from a into outfile "d:\abc.vbs"
            

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线