基礎郵件,mariadb數據庫
postfix基礎郵件服務
1.1 問題
本例要求在虛擬機server0上配置 postfix 基礎服務,具體要求如下:
- 監聽本機的所有接口
- 將郵件域和郵件服務主機名都改為 example.com
然後在server0上使用mail命令測試發信/收信操作:
- 由 root 給本機用戶 mike 發一封測試郵件
- 查收用戶 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軟件包
- [root@server0 ~]# yum -y install postfix
- .. ..
2)調整郵件服務配置
- [root@server0 ~]# vim /etc/postfix/main.cf
- .. ..
- inet_interfaces = all //監聽接口
- mydomain = example.com //郵件域
- myhostname = example.com //本服務器主機名
3)啟動postfix服務
- [root@server0 ~]# systemctl restart postfix
4)查看郵件服務監聽狀態
- [root@server0 ~]# netstat -antpu | grep :25
- tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1739/master
- tcp6 0 0 :::25 :::* LISTEN 1739/master
步驟二:使用mail命令發信/收信
1)給用戶root發一封測試郵件
- [root@server0 ~]# echo ‘1111‘ | mail -s ‘mail1‘ root
2)由管理員收取指定用戶root的郵件
- [root@server0 ~]# mail -u root
- Heirloom Mail version 12.5 7/5/10. Type ? for help.
- "/var/mail/root": 1 message 1 new
- >N 1 root Sat Nov 26 17:40 18/532 "mail"
- & 1 //讀取第1封郵件內容
- Message 1:
- From root@example.com Sat Nov 26 17:40:06 2016
- Return-Path: <root@example.com>
- X-Original-To: root
- Delivered-To: root@example.com
- Date: Sat, 26 Nov 2016 17:40:06 +0800
- To: root@example.com
- Subject: mail1 //檢查郵件標題
- User-Agent: Heirloom mailx 12.5 7/5/10
- Content-Type: text/plain; charset=us-ascii
- From: root@example.com (root)
- Status: R
- 1111 //檢查郵件內容
- & q //退出mail程序
- Held 1 message in /var/mail/root
- [root@server0 ~]#
2 案例2:postfix空客戶端郵件服務
2.1 問題
本例要求初始化後端郵件服務器desktop0.example.com,操作如下:
- lab smtp-nullclient setup
然後將虛擬機server0配置為空客戶端郵件服務器,具體要求如下:
- 此系統不接收外部發送來的郵件,本地發送的任何郵件都會自動路由到 smtp0.example.com
- 所發出的郵件顯示來自於 desktop0.example.com
- 在 server0 上發送一封標題為 Test1 的郵件給本地用戶 student ;實際結果將由 desktop0 上的本地用戶 student 接收到此郵件
2.2 方案
postfix空客戶端郵件服務器的功能:
- 不為用戶提供電子郵箱
- 為郵箱用戶向其他郵件服務器發送郵件
- 不接受(投遞/存儲)發送給給本服務器的郵件
空客戶端郵件服務器的工作環境:
客戶端 ---> 空客戶端郵件服務器(發)---> 普通郵件服務器(發/收)
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:將server0配置為空客戶端郵件服務器
1)重建postfix服務配置
刪除配置文件/etc/postfix/main.cf,然後重裝postfix軟件包:
- [root@server0 ~]# rm -rf /etc/postfix/main.cf
- [root@server0 ~]# yum -y reinstall postfix
- .. ..
2)修改main.cf配置文件,調整或修改現有配置
- [root@server0 ~]# vim /etc/postfix/main.cf
- #mydomain = example.com //移除上一案例的配置
- #myhostname = example.com
- relayhost = [smtp0.example.com] //目標郵件服務器
- inet_interfaces = loopback-only //僅本機
- myorigin = desktop0.example.com //發件來源域
- mynetworks = 127.0.0.0/8 [::1]/128 //信任網絡
- mydestination = //將投遞域設為空
3)啟動postfix服務
- [root@server0 ~]# systemctl restart postfix
4)查看郵件服務監聽狀態
- [root@server0 ~]# netstat -antpu | grep :25
- tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2054/master
- tcp6 0 0 ::1:25 :::* LISTEN 2054/master
步驟二:將desktop0配置為後端郵件服務器
1)執行 lab smtp-nullclient setup
- [root@desktop0 ~]# lab smtp-nullclient setup
- Setting up desktop machine...
- Setting up dovecot...
- Generating new dovecot certificate...
- Setting up postfix... Generating new postfix certificates...
- Setting up firewall...
- Setting up user student...
- Installing httpd to share cert...
2)確認發信服務(postfix)
- [root@desktop0 ~]# netstat -antpu | grep :25
- tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 31366/master
- tcp6 0 0 :::25 :::* LISTEN 31366/master
3)確認取信服務(dovecot)
- [root@desktop0 ~]# netstat -antpu | grep dovecot
- tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 31229/dovecot
- .. ..
步驟三:使用mail命令測試空客戶端郵件服務器
1)在server0(空客戶端郵件服務器)上給本機用戶student發信
- [root@server0 ~]# echo ‘Mail Data.‘ | mail -s ‘Test1‘ student
- [root@server0 ~]# mail -u student //本機用戶並不會收到郵件
- No mail for student
2)在desktop0(後端郵件服務器)上的同名用戶student可以收到信
- [root@desktop0 ~]# mail -u student
- Heirloom Mail version 12.5 7/5/10. Type ? for help.
- "/var/mail/student": 1 message 1 new
- >N 1 root Sat Nov 26 18:29 21/833 "Test"
- & 1 //讀取第1封郵件內容
- Message 1:
- From root@desktop0.example.com Sat Nov 26 18:29:08 2016
- Return-Path: <root@desktop0.example.com>
- X-Original-To: student@desktop0.example.com
- Delivered-To: student@desktop0.example.com
- Date: Sat, 26 Nov 2016 18:29:08 +0800
- To: student@desktop0.example.com
- Subject: Test1 //檢查郵件標題
- User-Agent: Heirloom mailx 12.5 7/5/10
- Content-Type: text/plain; charset=us-ascii
- From: root@desktop0.example.com (root)
- Status: R
- Mail Data. //檢查郵件內容
- & q //退出mail程序
- Held 1 message in /var/mail/student
- [root@desktop0 ~]#
3 案例3:搭建mariadb數據庫系統
3.1 問題
本例要求在虛擬機server0上安裝 MariaDB 數據庫系統:
- 安裝 mariadb-server、mariadb 軟件包
- 啟動 mariadb 服務,並確認監聽狀態
然後在客戶端訪問此數據庫服務:
- 使用 mysql 命令訪問本機的數據庫服務,用戶名為 root,密碼為空
- 執行 SHOW DATABASES; 指令列出有哪些庫
- 退出 mysql 交互界面
3.2 方案
數據庫表及相關軟件的基本知識:
- 數據(記錄):用來表示一個事物(實體)的一些信息(屬性)的文字/圖片文件等,例如字符串“:tedu.cn”
- 數據表:存放很多條數據記錄的容器,例如學員聯系信息表、學員月考成績表
- 數據表的每一行:存放一條記錄
- 數據表的每一列/字段:很多個事物的同一個屬性
- 數據庫:存放很多個相互關聯的表格的容器,例如NSD1609學員檔案庫
- 數據庫管理系統(DBMS):用來管理(創建庫/添加/查詢/刪除/授權等)數據庫信息的軟件平臺
MariaDB服務端:軟件包mariadb-server、系統服務mariadb
MariaDB客戶端:軟件包mariadb、管理工具mysql
MariaDB服務端配置文件:/etc/my.cnf
傳輸協議及端口:TCP 3306
mysql命令的簡單用法:
- mysql [-u用戶名] [-p[密碼]]
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:搭建MariaDB數據庫服務器
1)安裝軟件包mariadb-server、mariadb
- [root@server0 ~]# yum -y install mariadb-server mariadb
- .. ..
2)啟動系統服務mariadb,並設置開機自啟
- [root@server0 ~]# systemctl restart mariadb
- [root@server0 ~]# systemctl enable mariadb
- ln -s ‘/usr/lib/systemd/system/mariadb.service‘ ‘/etc/systemd/system/multi-user.target.wants/mariadb.service‘
3)檢查監聽狀態
- [root@server0 ~]# netstat -antpu | grep :3306
- tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2922/mysqld
步驟二:訪問本機的MariaDB數據庫系統
1)以用戶root連接本機的mariadb(或mysqld)數據庫服務
- [root@server0 ~]# mysql -uroot
- Welcome to the MariaDB monitor. Commands end with ; or \g.
- Your MariaDB connection id is 3
- Server version: 5.5.35-MariaDB MariaDB Server
- Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
- Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
- MariaDB [(none)]>
2)查看當前數據庫系統內有哪些庫
- MariaDB [(none)]> SHOW DATABASES;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | test |
- +--------------------+
- 4 rows in set (0.00 sec)
3)退出操作環境
- MariaDB [(none)]> QUIT
- Bye
- [root@server0 ~]#
4 案例4:配置一個數據庫
4.1 問題
本例要求在虛擬機server0上部署 MariaDB 數據庫,具體要求如下:
- 此數據庫系統只能被 localhost 訪問
- 新建一個數據庫名為 Contacts,其中應該包含來自數據庫復制的內容,復制文件的 URL 為:http://classroom/pub/materials/users.sql
- 除了 root 用戶,此數據庫只能被用戶 Raikon 查詢,此用戶的密碼為atenorth
- root用戶的密碼為 atenorth
4.2 方案
為數據庫賬號修改密碼:
- mysqladmin [-u用戶名] [-p[舊密碼]] password ‘新密碼‘
導入/恢復到數據庫:
- mysql [-u用戶名] [-p[密碼]] 數據庫名 < 備份文件.sql
為數據庫用戶授權/撤銷權限:
- grant 權限1,權限2... on 庫名.表名 to 用戶名@客戶機地址 identified by ‘密碼‘;
- revoke 權限1,權限2... on 庫名.表名 from 用戶名@客戶機地址;
4.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:禁止mariadb服務提供網絡監聽(只服務於本機)
1)修改配置文件
- [root@server0 ~]# vim /etc/my.cnf
- [mysqld]
- skip-networking //跳過網絡
2)重啟mariadb服務
- [root@server0 ~]# systemctl restart mariadb //重啟服務
3)確認結果
- [root@server0 ~]# netstat -anptu | grep :3306 //已經不提供端口監聽
- [root@server0 ~]# pgrep -l mysqld //但進程仍在
- 3127 mysqld_safe
- 3297 mysqld
步驟二:配置數據庫管理密碼
1)使用mysqladmin為用戶root設置密碼
原管理賬號root的密碼為空,因此無需驗證舊密碼:
- [root@server0 ~]# mysqladmin -u root password ‘atenorth‘
2)驗證新密碼是否可用
root使用空密碼從本機連接將會失敗:
- [root@server0 ~]# mysql -uroot
- ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
必須指定正確的新密碼才能連接成功:
- [root@server0 ~]# mysql -uroot -patenorth
- Welcome to the MariaDB monitor. Commands end with ; or \g.
- Your MariaDB connection id is 4
- Server version: 5.5.35-MariaDB MariaDB Server
- Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.
- Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
- .. ..
步驟三:建Contacts庫並導入備份數據
1)創建新庫Contacts,並退出操作環境
- MariaDB [(none)]> CREATE DATABASE Contacts;
- Query OK, 1 row affected (0.00 sec)
- MariaDB [(none)]> QUIT
- Bye
2)下載指定的數據庫備份
- [root@server0 ~]# wget http://classroom.example.com/pub/materials/users.sql
- --2016-11-26 19:00:37-- http://classroom.example.com/pub/materials/users.sql
- Resolving classroom.example.com (classroom.example.com)... 172.25.254.254
- Connecting to classroom.example.com (classroom.example.com)|172.25.254.254|:80... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 2634 (2.6K) [application/sql]
- Saving to: ‘users.sql’
- 100%[=====================>] 2,634 --.-K/s in 0s
- 2016-11-26 19:00:37 (269 MB/s) - ‘users.sql’ saved [2634/2634]
- [root@server0 ~]# ls -lh users.sql //確認下載的文件
- -rw-r--r--. 1 root root 2.6K Mar 31 2016 users.sql
3)導入數據庫
- [root@server0 ~]# mysql -uroot -patenorth Contacts < users.sql
4)重新連入操作環境,確認導入結果
- [root@server0 ~]# mysql -uroot -patenorth
- .. ..
- MariaDB [(none)]> USE Contacts; //使用指定庫
- Database changed
- MariaDB [Contacts]> SHOW TABLES; //列出有哪些表
- +--------------------+
- | Tables_in_Contacts |
- +--------------------+
- | base |
- | location |
- +--------------------+
- 2 rows in set (0.00 sec)
步驟四:為Contacts庫授權
1)允許用戶Raikon從本機訪問,具有查詢權限,密碼為atenorth
- MariaDB [Contacts]> GRANT select ON Contacts.* TO Raikon@localhost IDENTIFIED BY ‘atenorth‘;
- Query OK, 0 rows affected (0.00 sec)
2)退出操作環境
- MariaDB [Contacts]> QUIT
- Bye
- [root@server0 ~]#
5 案例5:使用數據庫查詢
5.1 問題
本例要求配置MariaDB數據庫,完成以下任務:
- 禁止空密碼root用戶訪問mariadb數據庫
- 在系統server0上使用數據庫Contacts,通過SQL查詢回答下列問題:密碼是solicitous的人的名字?有多少人的姓名是Barbara同時居住在 Sunnyvale?
5.2 方案
表記錄增刪改查:
- insert into [庫名.]表名 values(值1,值2,值3);
- delete from [庫名.]表名 where ...;
- update [庫名.]表名 set 字段名=字段值 where ....;
- select 字段列表 from [庫名.]表名 where 字段名1=值 and|or 字段名2=值;
統計查詢結果的數量:
- select count(*) from [庫名.]表名 where .. ..;
5.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:清理空密碼root用戶
1)確認空密碼root用戶記錄
MariaDB服務端默認的mysql庫user表保存了用戶授權記錄。
使用DESC指令查看表結構,以便了解相關字段名:
- MariaDB [(none)]> DESC mysql.user;
- +------------------------+-----------------------------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------------------+-----------------------------------+------+-----+---------+-------+
- | Host | char(60) | NO | PRI | | |
- | User | char(16) | NO | PRI | | |
- | Password | char(41) | NO | | | |
列出user表中的Host、User、Password字段,限定密碼為空的root用戶:
- MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
- +---------------------+------+----------+
- | Host | User | Password |
- +---------------------+------+----------+
- | server0.example.com | root | |
- | 127.0.0.1 | root | |
- | ::1 | root | |
- +---------------------+------+----------+
- 3 rows in set (0.00 sec)
- MariaDB [(none)]>
2)刪除空密碼root用戶記錄
使用DELETE指令刪除掉需要清除的授權記錄:
- MariaDB [(none)]> DELETE FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
- Query OK, 3 rows affected (0.00 sec)
再次查詢,確認刪除結果:
- MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user WHERE User=‘root‘ AND Password=‘‘;
- Empty set (0.00 sec)
步驟二:按條件查詢表記錄
1)按單個條件查詢
找出密碼是solicitous的人的名字?
- MariaDB [(none)]> SELECT name FROM Contacts.base WHERE Password=‘solicitous‘;
- +-------+
- | name |
- +-------+
- | James |
- +-------+
- 1 row in set (0.00 sec)
2)按多個條件在關聯的兩張表中查詢
有多少人的姓名是Barbara同時居住在 Sunnyvale?
- MariaDB [(none)]> USE Contacts;
- .. ..
- Database changed
- MariaDB [Contacts]> SELECT COUNT(*) FROM base,location WHERE base.name=‘Barbara‘ AND location.city=‘Sunnyvale‘ AND base.id=location.id;
- +----------+
- | COUNT(*) |
- +----------+
- | 1 |
- +----------+
- 1 row in set (0.00 sec)
基礎郵件,mariadb數據庫