成都網(wǎng)站建設(shè)創(chuàng)意新手學(xué)百度競價要多久
前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。
簡介
有許多在 Linux 和類 Unix 系統(tǒng)上可用的 SQL 數(shù)據(jù)庫語言實現(xiàn)。MySQL 和 MariaDB 是在服務(wù)器環(huán)境中部署關(guān)系型數(shù)據(jù)庫的兩個流行選項。
然而,像大多數(shù)軟件一樣,如果配置不正確,這些工具可能成為安全隱患。本教程將指導(dǎo)您完成一些基本步驟,以確保您的 MariaDB 或 MySQL 數(shù)據(jù)庫安全,并確保它們不會成為您的 VPS 的后門。
為了簡單和說明的目的,我們將在 Ubuntu 12.04 VPS 實例上使用 MySQL 服務(wù)器。然而,這些技術(shù)也適用于其他 Linux 發(fā)行版,并且也可以用于 MariaDB。
初始設(shè)置
在安裝過程中,MySQL 會要求您設(shè)置 root 密碼。
sudo apt-get install mysql-server
您隨時可以在以后設(shè)置 root 密碼,但沒有理由跳過此步驟,因此您應(yīng)該從一開始就保護好管理員帳戶。
安裝完成后,我們應(yīng)該運行一些包含的腳本。首先,我們將使用 “mysql_install_db” 腳本為我們的數(shù)據(jù)庫創(chuàng)建一個目錄布局。
sudo mysql_install_db
接下來,運行名為 “mysql_secure_installation” 的腳本。這將引導(dǎo)我們完成一些程序,以刪除一些在生產(chǎn)環(huán)境中使用的危險默認設(shè)置。
sudo mysql_secure_installation
安全注意事項
保護 MySQL(以及幾乎任何其他系統(tǒng))的總體主題是只有在絕對必要時才授予訪問權(quán)限。您的數(shù)據(jù)安全有時取決于方便和安全之間的平衡。
在本指南中,我們將傾向于安全一側(cè),盡管您對數(shù)據(jù)庫軟件的具體使用可能會導(dǎo)致您從這些選項中進行選擇。
通過 My.cnf 文件實現(xiàn)安全
MySQL 的主要配置文件是一個名為 “my.cnf” 的文件,它位于 Ubuntu 的 “/etc/mysql/” 目錄和其他一些 VPS 的 “/etc/” 目錄中。
我們將更改此文件中的一些設(shè)置以鎖定我們的 MySQL 實例。
以 root 權(quán)限打開文件。如果您在不同的系統(tǒng)上按照本教程操作,請根據(jù)需要更改目錄路徑:
sudo nano /etc/mysql/my.cnf
我們應(yīng)該檢查的第一個設(shè)置是 “[mysqld]” 部分中的 “bind-address” 設(shè)置。此設(shè)置應(yīng)設(shè)置為您的本地回環(huán)網(wǎng)絡(luò)設(shè)備,即 “127.0.0.1”。
bind-address = 127.0.0.1
這確保了 MySQL 除了本地機器外不接受任何連接。
如果您需要從另一臺機器訪問此數(shù)據(jù)庫,請考慮通過 SSH 進行連接,以在本地進行數(shù)據(jù)庫查詢和管理,并通過 ssh 隧道發(fā)送結(jié)果。
我們將要修補的下一個漏洞是允許從 MySQL 中訪問底層文件系統(tǒng)的功能。這可能會帶來嚴重的安全問題,除非絕對需要,否則應(yīng)該關(guān)閉。
在文件的相同部分,我們將添加一個指令來禁用此功能以加載本地文件:
local-infile=0
這將禁止沒有文件級別權(quán)限的用戶從文件系統(tǒng)加載文件。
如果我們有足夠的空間,并且不是在操作大型數(shù)據(jù)庫,記錄額外信息可以幫助我們監(jiān)視可疑活動。
記錄太多可能會導(dǎo)致性能下降,因此這是您需要仔細權(quán)衡的事情。
您可以在我們一直在添加的同一個 “[mysqld]” 部分內(nèi)設(shè)置日志變量。
log=/var/log/mysql-logfile
確保 MySQL 日志、錯誤日志和 mysql 日志目錄不是全局可讀的:
sudo ls -l /var/log/mysql*
從內(nèi)部保護 MySQL
在使用 MySQL 時,有許多步驟可以提高安全性。
我們將在本節(jié)中將命令輸入到 MySQL 提示界面中,因此我們需要登錄。
mysql -u root -p
您將被要求輸入您之前設(shè)置的 root 密碼。
保護密碼和主機關(guān)聯(lián)
首先,確保 MySQL 中沒有沒有密碼或主機關(guān)聯(lián)的用戶:
SELECT User,Host,Password FROM mysql.user;
如您所見,在我們的示例設(shè)置中,用戶 “demo-user” 沒有密碼,并且無論他在哪個主機上都是有效的。這是非常不安全的。
我們可以使用以下命令為用戶設(shè)置密碼。將 “newPassWord” 更改為您希望分配的密碼。
UPDATE mysql.user SET Password=PASSWORD('<span class="highlight">newPassWord</span>') WHERE User="<span class="highlight">demo-user</span>";
如果我們再次檢查用戶表,我們將看到演示用戶現(xiàn)在有了密碼:
SELECT User,Host,Password FROM mysql.user;
如果我們的表中包含任何空白用戶(在這一點上不應(yīng)該有,因為我們運行了 “mysql_secure_installation”,但我們?nèi)詫⒔榻B這一點),我們應(yīng)該將它們刪除。
要做到這一點,我們可以使用以下調(diào)用從訪問表中刪除空白用戶:
DELETE FROM mysql.user WHERE User="";
在修改用戶表后,我們需要輸入以下命令以實施新的權(quán)限:
FLUSH PRIVILEGES;
實施特定于應(yīng)用程序的用戶
與在 Linux 中作為獨立用戶運行進程的做法類似,MySQL 也受益于相同類型的隔離。
使用 MySQL 的每個應(yīng)用程序應(yīng)該有自己的用戶,該用戶只具有有限的權(quán)限,并且只能訪問它需要運行的數(shù)據(jù)庫。
當我們配置新應(yīng)用程序使用 MySQL 時,我們應(yīng)該創(chuàng)建該應(yīng)用程序所需的數(shù)據(jù)庫:
create database <span class="highlight">testDB</span>;
接下來,我們應(yīng)該創(chuàng)建一個用戶來管理該數(shù)據(jù)庫,并僅分配它所需的權(quán)限。這將根據(jù)應(yīng)用程序而異,有些用途需要比其他用途更開放的權(quán)限。
要創(chuàng)建新用戶,請使用以下命令:
CREATE USER '<span class="highlight">demo-user</span>'@'localhost' IDENTIFIED BY '<span class="highlight">password</span>';
我們可以使用以下命令為新表授予新用戶權(quán)限。有關(guān)特定權(quán)限的更多信息,請參閱 如何在 MySQL 中創(chuàng)建新用戶并授予權(quán)限 教程:
GRANT <span class="highlight">SELECT,UPDATE,DELETE</span> ON <span class="highlight">testDB</span>.* TO '<span class="highlight">demo-user</span>'@'localhost';
例如,如果以后需要從帳戶中撤銷更新權(quán)限,可以使用以下命令:
REVOKE <span class="highlight">UPDATE</span> ON <span class="highlight">testDB</span>.* FROM '<span class="highlight">demo-user</span>'@'localhost';
如果我們需要在某個數(shù)據(jù)庫上擁有所有權(quán)限,我們可以使用以下命令指定:
GRANT ALL ON <span class="highlight">testDB</span>.* TO '<span class="highlight">demo-user</span>'@'localhost';
要顯示用戶的當前權(quán)限,我們首先必須使用 “flush privileges” 命令實施我們指定的權(quán)限。然后,我們可以查詢用戶擁有的授權(quán):
FLUSH PRIVILEGES;
show grants for '<span class="highlight">demo-user</span>'@'localhost';
完成更改后,始終刷新權(quán)限。
更改根用戶
您可能想要采取的另一個步驟是更改根登錄名。如果攻擊者試圖訪問根 MySQL 登錄,他們將需要執(zhí)行找到用戶名的額外步驟。
可以使用以下命令更改根登錄名:
rename user 'root'@'localhost' to '<span class="highlight">newAdminUser</span>'@'localhost';
我們可以使用與我們一直在使用的用于用戶數(shù)據(jù)庫的相同查詢來查看更改:
select user,host,password from mysql.user;
同樣,我們必須刷新權(quán)限以使這些更改生效:
FLUSH PRIVILEGES;
請記住,從現(xiàn)在開始,當您希望執(zhí)行管理任務(wù)時,您將需要以新創(chuàng)建的用戶名登錄到 MySQL:
mysql -u <span class="highlight">newAdminUser</span> -p
結(jié)論
盡管這絕不是 MySQL 和 MariaDB 安全實踐的詳盡清單,但它應(yīng)該為您提供了一個很好的介紹,讓您了解在保護數(shù)據(jù)庫時需要做出的決策類型。
有關(guān)配置和安全性的更多信息可以在 MySQL 和 MariaDB 網(wǎng)站以及它們各自的 man 頁面中找到。您選擇使用的應(yīng)用程序也可能提供安全建議。