CentOS安裝MySQL-5.6.10+安全配置

来源:http://www.cnblogs.com/brishenzhou/archive/2016/12/07/6140261.html
-Advertisement-
Play Games

CentOS 6.5 x86_64系統下安裝MySQL-5.6.10,並且根據生產環境需要做了一定的安全配置。 ...


 

註:以下所有操作均在CentOS 6.5 x86_64位系統下完成。

 

#準備工作#

在安裝MySQL之前,請確保已經使用yum安裝了各類基礎組件,具體見《CentOS安裝LNMP環境的基礎組件》

然後創建mysql的用戶組和用戶,並且不允許登錄許可權:

# id mysql
id: mysql:無此用戶
# groupadd mysql
# useradd -g mysql -s /sbin/nologin mysql
# id mysql
uid=500(mysql) gid=500(mysql) 組=500(mysql)

 #MySQL的安裝#

給MySQL的安裝準備目錄:

# mkdir -p /data/mysql/data
# chown -R mysql:mysql /data/mysql

開始源碼安裝MySQL,make的時候大概要10分鐘左右:

# cd /usr/local/src
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz
# tar zxf mysql-5.6.10.tar.gz
# cd mysql-5.6.10

# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.10 -DSYSCONFDIR=/usr/local/mysql-5.6.10/etc -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.10/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DMYSQL_DATADIR=/data/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1

...
CMake Warning:
  Manually-specified variables were not used by the project:

    MYSQL_USER

-- Build files have been written to: /usr/local/src/mysql-5.6.10

# make && make install
# mkdir -p /usr/local/mysql-5.6.10/etc
# mkdir -p /usr/local/mysql-5.6.10/tmp
# ln -s /usr/local/mysql-5.6.10/ /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql-5.6.10
# chown -R mysql:mysql /usr/local/mysql

給當前環境添加MySQL的bin目錄:

# vim /etc/profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin

$ source /etc/profile

執行初初始化配置腳本並創建系統自帶的資料庫和表:

# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data
...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  ./bin/mysqladmin -u root password 'new-password'
  ./bin/mysqladmin -u root -h machinename password 'new-password'

Alternatively you can run:

  ./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the ./bin/mysqlbug script!

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file ./my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as ./my-new.cnf,
please compare it with your file and take the changes you need.

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

註:由於MySQL在啟動的時候,會先去/etc/my.cnf找配置文件,如果沒有找到則搜索$basedir/my.cnf,也即/usr/local/mysql-5.6.10/my.cnf,所以必須確保/etc/my.cnf沒有存在,否則可能導致無法啟動。

實際操作上發現系統上存在該文件,所以這裡可能需要將該文件先備份改名,然後再根據上面的配置寫配置文件:

# mv /etc/my.cnf /etc/my.cnf.bak

# vim /usr/local/mysql-5.6.10/my.cnf
[mysqld]

basedir=/usr/local/mysql-5.6.10
datadir=/data/mysql/data
socket=/usr/local/mysql-5.6.10/tmp/mysql.sock
user=mysql

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

修改MySQL用戶root的密碼,這裡使用mysqld_safe安全模式啟動:

# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

[1] 3970
[root@machinename ~]# 141230 19:02:31 mysqld_safe Logging to '/data/mysql/data/centos.err'.
141230 19:02:32 mysqld_safe Starting mysqld daemon with databases from /data/mysql/data

這個時候已經啟動了mysqd_safe安全模式,另開一個視窗作為客戶端連入MySQL伺服器:

# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.10 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;
mysql> update user set password=password('yourpassword') where user='root';
mysql> flush privileges;
mysql> exit;

修改完畢之後使用kill把mysqld_safe進程殺死:

# ps aux | grep mysql
root      3970  0.0  0.2 106308  1492 pts/1    S    19:02   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking
mysql     4143  0.1 18.0 558280 90316 pts/1    Sl   19:02   0:00 /usr/local/mysql-5.6.10/bin/mysqld --basedir=/usr/local/mysql-5.6.10 --datadir=/data/mysql/data --plugin-dir=/usr/local/mysql-5.6.10/lib/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/data/mysql/data/centos.err --pid-file=/data/mysql/data/centos.pid --socket=/usr/local/mysql-5.6.10/tmp/mysql.sock
root      4313  0.0  0.1 103252   836 pts/0    S+   19:05   0:00 grep mysql

# kill -9 3970
# kill -9 4143

或者回到剛纔啟動mysqld_safe的視窗ctrl+c將進程殺死也行。

複製服務啟動腳本:

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld

設置開機啟動MySQL服務並正常開啟MySQL服務(非必要項):

# chkconfig mysqld on

# service mysqld
Usage: mysqld  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]

# service mysqld start
Starting MySQL.      

以後就可以直接通過service mysqld命令來開啟/關閉MySQL資料庫了。

最後,建議生產環境下運行安全設置腳本,禁止root用戶遠程連接,移除test資料庫和匿名用戶等:

# /usr/local/mysql-5.6.10/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

註:上面輸入的root密碼指的是前面設置的MySQL的root賬戶的密碼。

至此,MySQL資料庫已經安裝完畢。

 #MySQL的安全配置#

1、確保啟動MySQL不能使用系統的root賬號,必須是新建的mysql賬號,比如:

# mysqld_safe --user=mysql

2、MySQL安裝好運行初始化資料庫後,預設的root賬戶密碼為空,必須給其設置一個密碼,同時保證該密碼具有較高的安全性。比如:

mysql> user mysql;
mysql> update user set password=password('yourpassword') where user='root';
mysql> flush privileges;

3、刪除預設資料庫及用戶:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
mysql> drop daabase test;
mysql> use mysql;
mysql> select host,user from user;
+--------------+------+
| host         | user |
+--------------+------+
| 127.0.0.1    | root |
| ::1          | root |
| machinename  |      |
| machinename  | root |
| localhost    |      |
| localhost    | root |
+--------------+------+
mysql> delete from user where not(host='localhost' and user='root');
mysql> flush privileges;

註:上面的user表中的數據可能會有所不同。

4、當開髮網站連接資料庫的時候,建議建立一個用戶只針對某個庫有update/select/delete/insert/drop table/create table等許可權,減小某個項目的資料庫的用戶名和密碼被竊取後造成其他項目受影響,比如:

mysql>create database yourdbname default charset utf8 collate utf8_general_ci;
mysql>create user 'yourusername'@'localhost' identified by 'yourpassword';
mysql> grant select,insert,update,delete,create,drop privileges on yourdbname.* To 'yourusername'@localhost identified by 'yourpassword';

5、資料庫文件所在的目錄不允許未經授權的用戶訪問,需要控制對該目錄的訪問,比如:

# chown -R mysql:mysql /data/mysql/data
# chmod -R go-rwx /data/mysql/data

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • arm處理器以其低功耗和小尺寸而聞名,幾乎所有的手機處理器都是基於arm,在嵌入式系統中應用非常廣泛。 armv6, armv7, armv7s, arm64指的是arm處理器的指令集。 i386, x86_64指的是pc端處理器指令集。 所有指令集原則上是向下相容的。 arm64:iPhone6s ...
  • 今天在運行自己編寫的App時,突然發現App在運行時閃退,然後就查看了Android Studio的Log,發現了這個錯誤,上網查了一下,才知道是RecyclerView的原生Bug,在數據更新時會出現這個Bug,錯誤顯示為 可以看到錯誤並沒有指到我自己所寫的代碼,所以斷定是原生的Bug。 錯誤解決 ...
  • Linux設備驅動中必須解決的一個問題是多個進程對共用資源的併發訪問,併發的訪問會導致競態。中斷屏蔽、原子操作、自旋鎖和信號量都是解決併發問題的機制。中斷屏蔽很少單獨被使用,原子操作只能針對整數進行,因此自旋鎖和信號量應用最為廣泛。自旋鎖會導致死迴圈,鎖定期間不允許阻塞,因此要求鎖定的臨界區小。信號... ...
  • CentOS 6.5 x86_64系統下安裝Apache-2.4.10,並且根據生產環境需要做了一定的安全配置。 ...
  • 設備驅動充當了硬體和應用軟體之間的紐帶,它使得應用軟體只需要調用系統軟體的應用編程介面(API)就可讓硬體去完成要求的工作。本文主要講解了Linux設備驅動與硬體的關係,Linux設備驅動的開發模式以及內核中相關的重要基礎數據結構。 ...
  • CentOS 6.5 x86_64系統下安裝Nginx-1.6.2,並且根據生產環境需要做了一定的安全配置。 ...
  • MII(media-independent interface)提供了MAC(media access control)與PHY(Ethernet physical layer)之間的互聯技術,該介面支持10Mb/s與100Mb/s的數據傳輸速率,數據傳輸的位寬為4位。MDIO(Management... ...
  • SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的記憶體。同步是指其時鐘頻率與CPU前端匯流排的系統時鐘頻率相同;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲的。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...