1. 程式人生 > >基礎郵件,mariadb數據庫

基礎郵件,mariadb數據庫

oop 所有 wget ria 數據庫查詢 ren container 平臺 包含

postfix基礎郵件服務

1.1 問題

本例要求在虛擬機server0上配置 postfix 基礎服務,具體要求如下:

  1. 監聽本機的所有接口
  2. 將郵件域和郵件服務主機名都改為 example.com

然後在server0上使用mail命令測試發信/收信操作:

  1. 由 root 給本機用戶 mike 發一封測試郵件
  2. 查收用戶 mike 的郵箱,讀取郵件內容,確保是從 [email protected] 發過來的

1.2 方案

電子郵箱:[email protected]表示在互聯網區域qq.com內的一臺郵件服務器上屬於用戶1234567的一個電子郵箱(目錄)。

postfix發信服務(TCP 25,SMTP)的功能:

  • 為用戶提供電子郵箱
  • 為郵箱用戶向其他郵件服務器發送郵件
  • 為郵箱用戶投遞/存儲收到的郵件

dovecot取信服務(TCP 110/143,POP3/IMAP)的功能:為郵箱用戶提取郵件。

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:配置postfix基礎郵件服務

1)安裝postfix軟件包

  1. [root@server0 ~]# yum -y install postfix
  2. .. ..

2)調整郵件服務配置

  1. [root@server0 ~]# vim /etc/postfix/main.cf
  2. .. ..
  3. inet_interfaces = all //監聽接口
  4. mydomain = example.com //郵件域
  5. myhostname = example.com //本服務器主機名

3)啟動postfix服務

  1. [root@server0 ~]# systemctl restart postfix

4)查看郵件服務監聽狀態

  1. [root@server0 ~]# netstat -antpu | grep :25
  2. tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1739/master
  3. tcp6 0 0 :::25 :::* LISTEN 1739/master

步驟二:使用mail命令發信/收信

1)給用戶root發一封測試郵件

  1. [root@server0 ~]# echo ‘1111‘ | mail -s ‘mail1‘ root

2)由管理員收取指定用戶root的郵件

  1. [root@server0 ~]# mail -u root
  2. Heirloom Mail version 12.5 7/5/10. Type ? for help.
  3. "/var/mail/root": 1 message 1 new
  4. >N 1 root Sat Nov 26 17:40 18/532 "mail"
  5. & 1 //讀取第1封郵件內容
  6. Message 1:
  7. From root@example.com Sat Nov 26 17:40:06 2016
  8. Return-Path: <root@example.com>
  9. X-Original-To: root
  10. Delivered-To: root@example.com
  11. Date: Sat, 26 Nov 2016 17:40:06 +0800
  12. To: root@example.com
  13. Subject: mail1 //檢查郵件標題
  14. User-Agent: Heirloom mailx 12.5 7/5/10
  15. Content-Type: text/plain; charset=us-ascii
  16. From: root@example.com (root)
  17. Status: R
  18. 1111 //檢查郵件內容
  19. & q //退出mail程序
  20. Held 1 message in /var/mail/root
  21. [root@server0 ~]#

2 案例2:postfix空客戶端郵件服務

2.1 問題

本例要求初始化後端郵件服務器desktop0.example.com,操作如下:

  1. lab smtp-nullclient setup

然後將虛擬機server0配置為空客戶端郵件服務器,具體要求如下:

  1. 此系統不接收外部發送來的郵件,本地發送的任何郵件都會自動路由到 smtp0.example.com
  2. 所發出的郵件顯示來自於 desktop0.example.com
  3. 在 server0 上發送一封標題為 Test1 的郵件給本地用戶 student ;實際結果將由 desktop0 上的本地用戶 student 接收到此郵件

2.2 方案

postfix空客戶端郵件服務器的功能:

  • 不為用戶提供電子郵箱
  • 為郵箱用戶向其他郵件服務器發送郵件
  • 不接受(投遞/存儲)發送給給本服務器的郵件

空客戶端郵件服務器的工作環境:

客戶端 ---> 空客戶端郵件服務器(發)---> 普通郵件服務器(發/收)

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:將server0配置為空客戶端郵件服務器

1)重建postfix服務配置

刪除配置文件/etc/postfix/main.cf,然後重裝postfix軟件包:

  1. [root@server0 ~]# rm -rf /etc/postfix/main.cf
  2. [root@server0 ~]# yum -y reinstall postfix
  3. .. ..

2)修改main.cf配置文件,調整或修改現有配置

  1. [root@server0 ~]# vim /etc/postfix/main.cf
  2. #mydomain = example.com //移除上一案例的配置
  3. #myhostname = example.com
  4. relayhost = [smtp0.example.com] //目標郵件服務器
  5. inet_interfaces = loopback-only //僅本機
  6. myorigin = desktop0.example.com //發件來源域
  7. mynetworks = 127.0.0.0/8 [::1]/128 //信任網絡
  8. mydestination = //將投遞域設為空

3)啟動postfix服務

  1. [root@server0 ~]# systemctl restart postfix

4)查看郵件服務監聽狀態

  1. [root@server0 ~]# netstat -antpu | grep :25
  2. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2054/master
  3. tcp6 0 0 ::1:25 :::* LISTEN 2054/master

步驟二:將desktop0配置為後端郵件服務器

1)執行 lab smtp-nullclient setup

  1. [root@desktop0 ~]# lab smtp-nullclient setup
  2. Setting up desktop machine...
  3. Setting up dovecot...
  4. Generating new dovecot certificate...
  5. Setting up postfix... Generating new postfix certificates...
  6. Setting up firewall...
  7. Setting up user student...
  8. Installing httpd to share cert...

2)確認發信服務(postfix)

  1. [root@desktop0 ~]# netstat -antpu | grep :25
  2. tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 31366/master
  3. tcp6 0 0 :::25 :::* LISTEN 31366/master

3)確認取信服務(dovecot)

  1. [root@desktop0 ~]# netstat -antpu | grep dovecot
  2. tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 31229/dovecot
  3. .. ..

步驟三:使用mail命令測試空客戶端郵件服務器

1)在server0(空客戶端郵件服務器)上給本機用戶student發信

  1. [root@server0 ~]# echo ‘Mail Data.‘ | mail -s ‘Test1‘ student
  2. [root@server0 ~]# mail -u student //本機用戶並不會收到郵件
  3. No mail for student

2)在desktop0(後端郵件服務器)上的同名用戶student可以收到信

  1. [root@desktop0 ~]# mail -u student
  2. Heirloom Mail version 12.5 7/5/10. Type ? for help.
  3. "/var/mail/student": 1 message 1 new
  4. >N 1 root Sat Nov 26 18:29 21/833 "Test"
  5. & 1 //讀取第1封郵件內容
  6. Message 1:
  7. From root@desktop0.example.com Sat Nov 26 18:29:08 2016
  8. Return-Path: <root@desktop0.example.com>
  9. X-Original-To: student@desktop0.example.com
  10. Delivered-To: student@desktop0.example.com
  11. Date: Sat, 26 Nov 2016 18:29:08 +0800
  12. To: student@desktop0.example.com
  13. Subject: Test1 //檢查郵件標題
  14. User-Agent: Heirloom mailx 12.5 7/5/10
  15. Content-Type: text/plain; charset=us-ascii
  16. From: root@desktop0.example.com (root)
  17. Status: R
  18. Mail Data. //檢查郵件內容
  19. & q //退出mail程序
  20. Held 1 message in /var/mail/student
  21. [root@desktop0 ~]#

3 案例3:搭建mariadb數據庫系統

3.1 問題

本例要求在虛擬機server0上安裝 MariaDB 數據庫系統:

  1. 安裝 mariadb-server、mariadb 軟件包
  2. 啟動 mariadb 服務,並確認監聽狀態

然後在客戶端訪問此數據庫服務:

  1. 使用 mysql 命令訪問本機的數據庫服務,用戶名為 root,密碼為空
  2. 執行 SHOW DATABASES; 指令列出有哪些庫
  3. 退出 mysql 交互界面

3.2 方案

數據庫表及相關軟件的基本知識:

  • 數據(記錄):用來表示一個事物(實體)的一些信息(屬性)的文字/圖片文件等,例如字符串“:tedu.cn”
  • 數據表:存放很多條數據記錄的容器,例如學員聯系信息表、學員月考成績表
  • 數據表的每一行:存放一條記錄
  • 數據表的每一列/字段:很多個事物的同一個屬性
  • 數據庫:存放很多個相互關聯的表格的容器,例如NSD1609學員檔案庫
  • 數據庫管理系統(DBMS):用來管理(創建庫/添加/查詢/刪除/授權等)數據庫信息的軟件平臺

MariaDB服務端:軟件包mariadb-server、系統服務mariadb

MariaDB客戶端:軟件包mariadb、管理工具mysql

MariaDB服務端配置文件:/etc/my.cnf

傳輸協議及端口:TCP 3306

mysql命令的簡單用法:

  1. mysql [-u用戶名] [-p[密碼]]

3.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:搭建MariaDB數據庫服務器

1)安裝軟件包mariadb-server、mariadb

  1. [root@server0 ~]# yum -y install mariadb-server mariadb
  2. .. ..

2)啟動系統服務mariadb,並設置開機自啟

  1. [root@server0 ~]# systemctl restart mariadb
  2. [root@server0 ~]# systemctl enable mariadb
  3. ln -s ‘/usr/lib/systemd/system/mariadb.service‘ ‘/etc/systemd/system/multi-user.target.wants/mariadb.service‘

3)檢查監聽狀態

  1. [root@server0 ~]# netstat -antpu | grep :3306
  2. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2922/mysqld

步驟二:訪問本機的MariaDB數據庫系統

1)以用戶root連接本機的mariadb(或mysqld)數據庫服務

  1. [root@server0 ~]# mysql -uroot
  2. Welcome to the MariaDB monitor. Commands end with ; or \g.
  3. Your MariaDB connection id is 3
  4. Server version: 5.5.35-MariaDB MariaDB Server
  5. Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
  6. Type ‘help;‘ or \hfor help. Type \c‘ to clear the current input statement.
  7. MariaDB [(none)]>

2)查看當前數據庫系統內有哪些庫

  1. MariaDB [(none)]> SHOW DATABASES;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | test |
  9. +--------------------+
  10. 4 rows in set (0.00 sec)

3)退出操作環境

  1. MariaDB [(none)]> QUIT
  2. Bye
  3. [root@server0 ~]#

4 案例4:配置一個數據庫

4.1 問題

本例要求在虛擬機server0上部署 MariaDB 數據庫,具體要求如下:

  1. 此數據庫系統只能被 localhost 訪問
  2. 新建一個數據庫名為 Contacts,其中應該包含來自數據庫復制的內容,復制文件的 URL 為:http://classroom/pub/materials/users.sql
  3. 除了 root 用戶,此數據庫只能被用戶 Raikon 查詢,此用戶的密碼為atenorth
  4. root用戶的密碼為 atenorth

4.2 方案

為數據庫賬號修改密碼:

  1. mysqladmin [-u用戶名] [-p[舊密碼]] password ‘新密碼‘

導入/恢復到數據庫:

  1. mysql [-u用戶名] [-p[密碼]] 數據庫名 < 備份文件.sql

為數據庫用戶授權/撤銷權限:

  1. grant 權限1,權限2... on 庫名.表名 to 用戶名@客戶機地址 identified by ‘密碼‘;
  2. revoke 權限1,權限2... on 庫名.表名 from 用戶名@客戶機地址;

4.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:禁止mariadb服務提供網絡監聽(只服務於本機)

1)修改配置文件

  1. [root@server0 ~]# vim /etc/my.cnf
  2. [mysqld]
  3. skip-networking //跳過網絡

2)重啟mariadb服務

  1. [root@server0 ~]# systemctl restart mariadb //重啟服務

3)確認結果

  1. [root@server0 ~]# netstat -anptu | grep :3306 //已經不提供端口監聽
  2. [root@server0 ~]# pgrep -l mysqld //但進程仍在
  3. 3127 mysqld_safe
  4. 3297 mysqld

步驟二:配置數據庫管理密碼

1)使用mysqladmin為用戶root設置密碼

原管理賬號root的密碼為空,因此無需驗證舊密碼:

  1. [root@server0 ~]# mysqladmin -u root password ‘atenorth‘

2)驗證新密碼是否可用

root使用空密碼從本機連接將會失敗:

  1. [root@server0 ~]# mysql -uroot
  2. ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)

必須指定正確的新密碼才能連接成功:

  1. [root@server0 ~]# mysql -uroot -patenorth
  2. Welcome to the MariaDB monitor. Commands end with ; or \g.
  3. Your MariaDB connection id is 4
  4. Server version: 5.5.35-MariaDB MariaDB Server
  5. Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
  6. Type ‘help;‘ or \hfor help. Type \c‘ to clear the current input statement.
  7. .. ..

步驟三:建Contacts庫並導入備份數據

1)創建新庫Contacts,並退出操作環境

  1. MariaDB [(none)]> CREATE DATABASE Contacts;
  2. Query OK, 1 row affected (0.00 sec)
  3. MariaDB [(none)]> QUIT
  4. Bye

2)下載指定的數據庫備份

  1. [root@server0 ~]# wget http://classroom.example.com/pub/materials/users.sql
  2. --2016-11-26 19:00:37-- http://classroom.example.com/pub/materials/users.sql
  3. Resolving classroom.example.com (classroom.example.com)... 172.25.254.254
  4. Connecting to classroom.example.com (classroom.example.com)|172.25.254.254|:80... connected.
  5. HTTP request sent, awaiting response... 200 OK
  6. Length: 2634 (2.6K) [application/sql]
  7. Saving to: ‘users.sql’
  8. 100%[=====================>] 2,634 --.-K/s in 0s
  9. 2016-11-26 19:00:37 (269 MB/s) - ‘users.sql’ saved [2634/2634]
  10. [root@server0 ~]# ls -lh users.sql //確認下載的文件
  11. -rw-r--r--. 1 root root 2.6K Mar 31 2016 users.sql

3)導入數據庫

  1. [root@server0 ~]# mysql -uroot -patenorth Contacts < users.sql

4)重新連入操作環境,確認導入結果

  1. [root@server0 ~]# mysql -uroot -patenorth
  2. .. ..
  3. MariaDB [(none)]> USE Contacts; //使用指定庫
  4. Database changed
  5. MariaDB [Contacts]> SHOW TABLES; //列出有哪些表
  6. +--------------------+
  7. | Tables_in_Contacts |
  8. +--------------------+
  9. | base |
  10. | location |
  11. +--------------------+
  12. 2 rows in set (0.00 sec)

步驟四:為Contacts庫授權

1)允許用戶Raikon從本機訪問,具有查詢權限,密碼為atenorth

  1. MariaDB [Contacts]> GRANT select ON Contacts.* TO Raikon@localhost IDENTIFIED BY ‘atenorth‘;
  2. Query OK, 0 rows affected (0.00 sec)

2)退出操作環境

  1. MariaDB [Contacts]> QUIT
  2. Bye
  3. [root@server0 ~]#

5 案例5:使用數據庫查詢

5.1 問題

本例要求配置MariaDB數據庫,完成以下任務:

  1. 禁止空密碼root用戶訪問mariadb數據庫
  2. 在系統server0上使用數據庫Contacts,通過SQL查詢回答下列問題:密碼是solicitous的人的名字?有多少人的姓名是Barbara同時居住在 Sunnyvale?

5.2 方案

表記錄增刪改查:

  1. insert into [庫名.]表名 values(值1,值2,值3);
  2. delete from [庫名.]表名 where ...;
  3. update [庫名.]表名 set 字段名=字段值 where ....;
  4. select 字段列表 from [庫名.]表名 where 字段名1=值 and|or 字段名2=值;

統計查詢結果的數量:

  1. select count(*) from [庫名.]表名 where .. ..;

5.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:清理空密碼root用戶

1)確認空密碼root用戶記錄

MariaDB服務端默認的mysql庫user表保存了用戶授權記錄。

使用DESC指令查看表結構,以便了解相關字段名:

  1. MariaDB [(none)]> DESC mysql.user;
  2. +------------------------+-----------------------------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +------------------------+-----------------------------------+------+-----+---------+-------+
  5. | Host | char(60) | NO | PRI | | |
  6. | User | char(16) | NO | PRI | | |
  7. | Password | char(41) | NO | | | |

列出user表中的Host、User、Password字段,限定密碼為空的root用戶:

  1. MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
  2. +---------------------+------+----------+
  3. | Host | User | Password |
  4. +---------------------+------+----------+
  5. | server0.example.com | root | |
  6. | 127.0.0.1 | root | |
  7. | ::1 | root | |
  8. +---------------------+------+----------+
  9. 3 rows in set (0.00 sec)
  10. MariaDB [(none)]>

2)刪除空密碼root用戶記錄

使用DELETE指令刪除掉需要清除的授權記錄:

  1. MariaDB [(none)]> DELETE FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
  2. Query OK, 3 rows affected (0.00 sec)

再次查詢,確認刪除結果:

  1. MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
  2. Empty set (0.00 sec)

步驟二:按條件查詢表記錄

1)按單個條件查詢

找出密碼是solicitous的人的名字?

  1. MariaDB [(none)]> SELECT name FROM Contacts.base WHERE Password=‘solicitous‘;
  2. +-------+
  3. | name |
  4. +-------+
  5. | James |
  6. +-------+
  7. 1 row in set (0.00 sec)

2)按多個條件在關聯的兩張表中查詢

有多少人的姓名是Barbara同時居住在 Sunnyvale?

  1. MariaDB [(none)]> USE Contacts;
  2. .. ..
  3. Database changed
  4. MariaDB [Contacts]> SELECT COUNT(*) FROM base,location WHERE base.name=‘Barbara‘ AND location.city=‘Sunnyvale‘ AND base.id=location.id;
  5. +----------+
  6. | COUNT(*) |
  7. +----------+
  8. | 1 |
  9. +----------+
  10. 1 row in set (0.00 sec)

基礎郵件,mariadb數據庫