Top

NSD ENGINEER DAY06

  1. 案例1:postfix基础邮件服务
  2. 案例2:添加一个swap分区
  3. 案例3:配置聚合连接
  4. 案例4:Linux工程师 综合测试

1 案例1:postfix基础邮件服务

1.1 问题

本例要求在虚拟机server0上配置 postfix 基础服务,具体要求如下:

  1. 监听本机的所有接口
  2. 将邮件域和邮件服务主机名都改为 example.com

然后在server0上使用mail命令测试发信/收信操作:

  1. 由 root 给本机用户 mike 发一封测试邮件
  2. 查收用户 mike 的邮箱,读取邮件内容,确保是从 root@example.com 发过来的

1.2 方案

电子邮箱:1234567@qq.com表示在互联网区域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:添加一个swap分区

2.1 问题

本例要求为虚拟机 server0 添加一个交换分区,相关要求如下:

  1. 此交换分区的大小为 512MiB
  2. 当系统启动时,swap分区应该可以自动挂载
  3. 不要移除或更改其他已经存在于你系统中的交换分区

2.2 方案

交换分区不需要挂载点,在配置开机挂载时,挂载点直接写成swap即可。

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:格式化交换分区

1)将提前准备的分区/dev/vdb7格式化为swap文件系统

[root@server0 ~]# mkswap  /dev/vdb7
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=80e358b9-b55d-4797-aaa4-41800aa00e3f

2)确认格式化结果

[root@server0 ~]# blkid  /dev/vdb7
/dev/vdb7: UUID="80e358b9-b55d-4797-aaa4-41800aa00e3f" TYPE="swap"

步骤二:配置交换分区的开机启用

修改/etc/fstab文件,添加交换分区记录:

[root@server0 ~]# vim  /etc/fstab
.. ..
/dev/vdb7	swap	swap	defaults	0 0

步骤三:确认挂载配置可用

1)检查启用新交换分区之前

[root@server0 ~]# swapon  -s
[root@server0 ~]#

2)启用新交换分区

[root@server0 ~]# swapon  -a

3)检查启用新交换分区之后

[root@server0 ~]# swapon  -s
Filename		Type			Size  	Used		Priority
/dev/vdb7    	partition	524284			-1

3 案例3:配置聚合连接

3.1 问题

本例要求在两个虚拟机 server0、desktop0之间配置一个链路,要求如下:

  1. 此链路使用接口 eth1 和 eth2
  2. 此链路在其中一个接口失效时仍然能工作
  3. 此链路在 server0 上使用下面的地址 172.16.3.20/255.255.255.0
  4. 此链路在 desktop0 上使用下面的地址 172.16.3.25/255.255.255.0
  5. 此链路在系统重启之后依然保持正常状态

3.2 方案

聚合连接(team):指的是网络连接的捆绑/组队,通过将多个实际网卡(team-slave)整个为逻辑上的单个连接,实现负载均衡、热备份等单块网卡难以完成的特殊功能。

聚合连接的类型:热备份activebackup、轮询负载均衡roundrobin。

定义聚合连接的类型配置时,采用JSON语法标记,主要特点如下:

热备份-聚合连接(activebackup):

{ "runner":{ "name":"activebackup" }  }

负载均衡-聚合连接(roundrobin):

{ "runner":{ "name":"roundrobin" }  }

3.3 步骤

除了所配置的IP地址不一样以外,在server0、desktop0主机上的其他操作相同。此处仅列出在server0上的配置过程。

实现此案例需要按照如下步骤进行。

步骤一:准备练习用网卡环境

新建的聚合连接将组合新增加的两块网卡eth1、eth2。

[root@server0 ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.0.11  netmask 255.255.255.0  broadcast 172.25.0.255
        inet6 2003:ac18::305  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::5054:ff:fe00:b  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:00:00:0b  txqueuelen 1000  (Ethernet)
        RX packets 172995  bytes 23870389 (22.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54053  bytes 34274222 (32.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:f8:86:c1  txqueuelen 1000  (Ethernet)
        RX packets 104217  bytes 5437855 (5.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 171  bytes 17171 (16.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:38:79:d9  txqueuelen 1000  (Ethernet)
        RX packets 104118  bytes 5428927 (5.1 MiB)
        RX errors 0  dropped 2060  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
.. ..

步骤二:创建聚合连接配置

1)新建聚合连接

[root@server0 ~]# nmcli  con  add  con-name  team0  type  team  ifname team0  config  '{ "runner":{ "name":"activebackup" }  }'
Connection 'team0' (8e61d730-50ff-4a7b-8ca0-fcf5955f6ea7) successfully added.

2)配置IPv4地址

[root@server0 ~]# nmcli  con  modify  team0  ipv4.method  manual  ipv4.addresses  '172.16.3.20/24'  connection.autoconnect  yes

3)新建聚合成员连接

[root@server0 ~]# nmcli  con  add  con-name  team0-p1  type  team-slave  ifname  eth1  master  team0
Connection 'team0-p1' (a62d23a2-9a2a-4855-8fbc-60ce1fd43f0b) successfully added.
[root@server0 ~]# nmcli  con  add  con-name  team0-p2  type  team-slave  ifname  eth2  master  team0
Connection 'team0-p2' (f4d4980e-8123-4840-89ac-1af148cc2eea) successfully added.

步骤三:激活聚合连接

1)激活聚合连接

[root@server0 ~]# nmcli  connection  up  team0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

2)激活聚合成员连接

[root@server0 ~]# nmcli  connection  up  team0-p1 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
[root@server0 ~]# nmcli  connection  up  team0-p2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)

步骤四:确认聚合连接状态

1)查看聚合连接地址

[root@server0 ~]# ifconfig  team0
team0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.3.20  netmask 255.255.255.0  broadcast 172.16.3.255
        inet6 fe80::c80d:efff:fe08:ca57  prefixlen 64  scopeid 0x20<link>
        ether ca:0d:ef:08:ca:57  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 36  overruns 0  frame 0
        TX packets 68  bytes 8695 (8.4 KiB)
        TX errors 0  dropped 1 overruns 0  carrier 0  collisions 0

2)查看聚合连接运行状态

[root@server0 ~]# teamdctl  team0  state
setup:
  runner: activebackup  							//运行模式/类型
ports:
  eth1  											//成员网卡1
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eth2 											//成员网卡2
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: eth1  								//当前活动的成员网卡

4 案例4:Linux工程师 综合测试

4.1 问题

根据本文提供的练习步骤完成所有练习案例。

4.2 方案

开始练习之前,先依次重置虚拟机环境。

[root@room9pc13 ~]# rht-vmctl  reset  classroom
[root@room9pc13 ~]# rht-vmctl  reset  server
[root@room9pc13 ~]# rht-vmctl  reset  desktop

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤01:配置SELinux

案例概述:

确保SELinux处于强制启用模式。

解题参考:

[root@server0 ~]# vim  /etc/selinux/config  					//永久配置
SELINUX=enforcing
[root@server0 ~]# setenforce  1  								//临时配置

步骤02:自定义用户环境(别名设置)

案例概述:

在系统server0和desktop0上创建自定义命令为qstat,此自定义命令将执行以下命令:

/bin/ps -Ao pid,tt,user,fname,rsz

此命令对系统中所有用户有效。

解题参考:

[root@server0 ~]# vim  /etc/bashrc  							//修改初始文件
alias  qstat='/bin/ps -Ao pid,tt,user,fname,rsz' 				//设置别名

[root@server0 ~]# source  /etc/bashrc 							//或重登录后生效
[root@server0 ~]# qstat 										//确认别名可用

步骤03:配置防火墙端口转发

案例概述:

在系统server0、desktop0配置防火墙,要求如下:

解题参考:

[root@server0 ~]# systemctl  restart  firewalld
[root@server0 ~]# systemctl  enable  firewalld
[root@server0 ~]# firewall-cmd  --set-default-zone=trusted  		//默认全部允许
[root@server0 ~]# firewall-cmd  --permanent  --add-source=172.34.0.0/24  --zone=block
  															//阻止个别网段
[root@server0 ~]# firewall-cmd  --permanent --zone=trusted  --add-forward-port=port=5423:proto=tcp:toport=80 								//启用端口转发
[root@server0 ~]# firewall-cmd  --reload  						//重载防火墙策略

步骤04:配置链路聚合

案例概述:

在server0.example.com和desktop0.example.com之间按以下要求配置一个链路:

解题参考:

[root@server0 ~]# nmcli  connection  add  con-name  team0  type  team  ifname team0  config  '{ "runner":{ "name":"activebackup" }}'  					//建立新的聚合连接
[root@server0 ~]# nmcli  connection  add  con-name  team0-p1  type  team-slave ifname  eth1  master  team0  												//指定成员网卡1
[root@server0 ~]# nmcli  connection  add  con-name  team0-p2  type  team-slave ifname  eth2  master  team0 												//指定成员网卡2
[root@server0 ~]# nmcli  con  modify  team0  ipv4.method  manual ipv4.addresses  "172.16.3.20/24"  connection.autoconnect  yes				//为聚合连接配置IP地址

[root@server0 ~]# nmcli  connection  up  team0  			//激活聚合连接
[root@server0 ~]# nmcli  con  up  team0-p1 					//激活成员连接1
[root@server0 ~]# nmcli  con  up  team0-p2					//激活成员连接2
[root@server0 ~]# teamdctl  team0  state  					//确认连接状态

步骤05:配置IPv6地址

案例概述:

在您的考试系统上配置接口eth0使用下列 IPv6 地址:

解题参考:

[root@server0 ~]# nmcli  connection  show  						//获知连接名称
NAME           UUID                                     TYPE             DEVICE 
System eth0    5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03     802-3-ethernet   eth0

[root@server0 ~]# nmcli  connection  modify  "System eth0" ipv6.method manual \
    ipv6.addresses 2003:ac18::305/64
[root@server0 ~]# nmcli  connection  up  "System eth0"

//设置固定主机名,避免误操作(若有必要,还可进一步配置静态IP地址/默认网关/DNS地址)
[root@server0 ~]# vim  /etc/hostname
server0.example.com 

步骤06:配置本地邮件服务

案例概述:

在系统 desktop0 上执行下列操作,将其配置为后端邮件服务:

在系统 server0 上配置邮件服务,满足以下要求:

解题参考:

[root@server0 ~]# vim  /etc/postfix/main.cf
relayhost = [smtp0.example.com] 					//后端邮件服务器
inet_interfaces = loopback-only 					//仅本机
myorigin = desktop0.example.com  					//发件来源域
mynetworks = 127.0.0.0/8  [::1]/128 				//信任网络
mydestination = 									//此行的值设为空

[root@server0 ~]# systemctl restart postfix
[root@server0 ~]# systemctl enable postfix 

[root@server0 ~]# echo 'Mail Data.'  | mail -s 'Test1' student 	
													//在server0发信测试
[root@server0 ~]# mail  -u  student  				//在server0无邮件
No mail for student 
[root@desktop0 ~]# mail  -u  student  				//在desktop0上可收到这封邮件
.. ..

步骤07:通过Samba发布共享目录

案例概述:

在 server0 上通过SMB共享/common 目录:

解题参考:

[root@server0 ~]# yum  -y  install  samba
[root@server0 ~]# mkdir  /common
[root@server0 ~]# setsebool -P  samba_export_all_rw=on  	//取消SELinux限制
[root@server0 ~]# useradd  harry ; pdbedit  -a  harry  	//启用共享账号并设密码

[root@server0 ~]# vim  /etc/samba/smb.conf
[global]
workgroup = STAFF  									//修改此行,指定工作组名
[common]
path = /common
hosts allow = 172.25.0.0/24 							//只允许指定网段访问
[root@server0 ~]# systemctl  restart  smb
[root@server0 ~]# systemctl  enable  smb

步骤08:配置多用户Samba挂载

案例概述:

在server0通过SMB共享目录/devops,并满足以下要求:

解题参考:

在server0上 ——

[root@server0 ~]# mkdir  /devops
[root@server0 ~]# useradd  kenji  ;  pdbedit  -a  kenji
[root@server0 ~]# useradd  chihiro  ;  pdbedit  -a  chihiro

[root@server0 ~]# setfacl  -m  u:chihiro:rwx  /devops/  		//调整目录权限

[root@server0 ~]# vim  /etc/samba/smb.conf
.. ..
[devops]
    path = /devops
    write list = chihiro
hosts allow = 172.25.0.0/24 							//只允许指定网域访问
[root@server0 ~]# systemctl restart smb

在desktop0上 ——

[root@desktop0 ~]# yum  -y  install  samba-client  cifs-utils
[root@desktop0 ~]# smbclient  -L  server0  			//查看对方提供了哪些共享
.. .. 											//无需密码,直接按Enter键确认
[root@desktop0 ~]# mkdir  /mnt/dev 				//创建挂载点
[root@desktop0 ~]# vim  /etc/fstab
//server0.example.com/devops    /mnt/dev    cifs  username=kenji,password=atenorth,multiuser,sec=ntlmssp,_netdev  0  0

[root@desktop0 ~]# mount  -a 						//检查配置并挂载资源

验证多用户访问(在desktop0上):普通用户切换为chihiro 身份即可读写。

[root@desktop0 ~]# su  -  student  					//切换到普通用户
[student@desktop0 ~]$ su - chihiro
[student@desktop0 ~]$ cifscreds  add  -u  chihiro  server0 	//提交新认证凭据
Password:   										//提供Samba用户chihiro的密码
[student@desktop0 ~]$ touch  /mnt/dev/b.txt  		//确认有写入权限

步骤09:配置NFS共享服务

案例概述:

在 server0 配置 NFS 服务,要求如下:

解题参考:

[练习环境:lab nfskrb5 setup]

[root@server0 ~]# mkdir  -p  /public  /protected/project 	//创建共享目录
[root@server0 ~]# chown  ldapuser0  /protected/project/  	//调整目录访问权限

[root@server0 ~]# wget  -O  /etc/krb5.keytab \ 	
    http://classroom.example.com/pub/keytabs/server0.keytab	//下载并部署服务端密钥
[root@server0 ~]# vim  /etc/exports  						//配置NFS共享
/public    172.25.0.0/24(ro)
/protected    172.25.0.0/24(rw,sec=krb5p)
[root@server0 ~]# systemctl  start  nfs-secure-server  nfs-server  //启用两个服务
[root@server0 ~]# systemctl  enable  nfs-secure-server  nfs-server
[root@server0 ~]# exportfs  -rv  						//必要时更新共享配置

步骤10:挂载NFS共享

案例概述:

在desktop0上挂载一个来classroom.exmaple.com的共享,并符合下列要求:

解题参考:

[练习环境:lab nfskrb5 setup]

[root@desktop0 ~]# mkdir  -p  /mnt/nfsmount  /mnt/nfssecure
[root@desktop0 ~]# wget  -O /etc/krb5.keytab \ 
   http://classroom.example.com/pub/keytabs/desktop0.keytab  //下载部署客户端密钥
[root@desktop0 ~]# systemctl  start  nfs-secure 		//启用安全NFS的客户端服务
[root@desktop0 ~]# systemctl  enable  nfs-secure

[root@desktop0 ~]# showmount  -e  server0 				//查看对方提供了哪些共享
Export list for server0:
/protected  172.25.0.0/24
/public     172.25.0.0/24
[root@desktop0 ~]# vim  /etc/fstab  					//配置开机挂载
.. ..
server0.example.com:/public   	 /mnt/nfsmount   nfs   _netdev 			0  0
server0.example.com:/protected	 /mnt/nfssecure   nfs   sec=krb5p,_netdev	0  0
[root@desktop0 ~]# mount -a 							//检查配置并挂载资源

[root@desktop0 ~]# ssh  ldapuser0@desktop0  			//SSH登入以获取通行证
ldapuser0@desktop0's password: 						//密码kerberos
[ldapuser0@desktop0 ~]$ touch  /mnt/nfssecure/project/a.txt 	//写入测试

步骤11:实现一个web服务器

案例概述:

为http://server0.example.com 配置 Web 服务器:

解题参考:

[root@server0 ~]# yum  -y  install  httpd
[root@server0 ~]# vim  /etc/httpd/conf.d/00-default.conf  
<VirtualHost *:80>  							//添加第一个(默认)虚拟主机
        ServerName  server0.example.com
        DocumentRoot  /var/www/html
</VirtualHost>
[root@server0 ~]# cd  /var/www/html/			//下载并部署给定的首页文件
[root@server0 html]# wget -O index.html \ 
   http://classroom.example.com/pub/materials/station.html 	

[root@server0 html]# systemctl  restart  httpd
[root@server0 html]# systemctl  enable  httpd

步骤12:配置安全web服务

案例概述:

为站点 http://server0.example.com 配置TLS加密:

解题参考:

[root@server0 ~]# yum  -y  install  mod_ssl  			//安装模块包
[root@server0 ~]# cd  /etc/pki/tls/certs/  				//下载并部署证书、密钥
[root@server0 certs]# wget  http://classroom.example.com/pub/example-ca.crt
[root@server0 certs]# wget \
     http://classroom.example.com/pub/tls/certs/server0.crt
[root@server0 certs]# cd  /etc/pki/tls/private/
[root@server0 private]# wget \
     http://classroom.example.com/pub/tls/private/server0.key

[root@server0 private]# vim  /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>  
    DocumentRoot  "/var/www/html" 
    ServerName server0.example.com:443
    .. .. 											//修改第100、107、122行
    SSLCertificateFile  /etc/pki/tls/certs/server0.crt
    SSLCertificateKeyFile  /etc/pki/tls/private/server0.key
    SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
</VirtualHost>
[root@server0 private]# systemctl  restart  httpd

步骤13:配置虚拟主机

案例概述:

在server0上扩展您的 web 服务器,为站点 http://www0.example.com 创建一个虚拟主机,然后执行下述步骤:

注意:原始站点 http://server0.example.com 必须仍然能够访问,名称服务器classroom.example.com 已经提供对主机名 www0.example.com 的域名解析。

解题参考:

[root@server0 ~]# mkdir  /var/www/virtual
[root@server0 ~]# cd  /var/www/virtual/			//下载并部署给定的首页文件
[root@server0 virtual]# wget -O index.html \  
   http://classroom.example.com/pub/materials/www.html 	

[root@server0 virtual]# vim  /etc/httpd/conf.d/01-www0.conf
<VirtualHost *:80>
        ServerName  www0.example.com
        DocumentRoot  /var/www/virtual
</VirtualHost>
[root@server0 virtual]# systemctl  restart  httpd 

步骤14:配置web内容的访问

案例概述:

在您的server0上的 web 服务器的DocumentRoot目录下创建一个名为 private 的目录,要求如下:

解题参考:

[root@server0 ~]# mkdir  /var/www/html/private
[root@server0 ~]# cd  /var/www/html/private/  				//下载并部署给定的首页文件
[root@server0 private]# wget  -O index.html \
   http://classroom.example.com/pub/materials/private.html 

[root@server0 private]# vim  /etc/httpd/conf.d/00-default.conf
.. ..
<Directory /var/www/html/private>
        Require ip  127.0.0.1  ::1  172.25.0.11  			//仅允许本机IP访问
</Directory>
[root@server0 private]# systemctl  restart  httpd

步骤15:实现动态WEB内容

案例概述:

在server0上配置提供动态Web内容,要求如下:

解题参考:

[root@server0 ~]# yum  -y  install  mod_wsgi
[root@server0 ~]# mkdir  /var/www/webapp0

[root@server0 ~]# cd  /var/www/webapp0  		//下载并部署给定的动态WEB程序
[root@server0 webapp0]# wget 
    http://classroom.example.com/pub/materials/webinfo.wsgi

[root@server0 webapp0]# vim  /etc/httpd/conf.d/02-webapp0.conf
Listen 8909  									//增加对新端口的监听
<VirtualHost *:8909>
        ServerName webapp0.example.com
        DocumentRoot /var/www/webapp0
        WSGIScriptAlias / /var/www/webapp0/webinfo.wsgi 	//访问Web根自动转向程序
</VirtualHost>

[root@server0 webapp0]# semanage  port  -a  -t  http_port_t  -p tcp 8909 
 											//开启非标准端口
[root@server0 webapp0]# systemctl  restart  httpd

步骤16:配置一个数据库

案例概述:

在 server0 上创建一个 MariaDB 数据库,名为 Contacts,并符合以下条件:

解题参考:

1)安装、配置

[root@server0 ~]# yum  -y  install  mariadb-server  mariadb
[root@server0 ~]# vim  /etc/my.cnf
[mysqld]
skip-networking 								//添加此行,跳过网络
[root@server0 ~]# systemctl  restart  mariadb
[root@server0 ~]# systemctl  enable  mariadb

2)设密码、建库

[root@server0 ~]# mysqladmin  -u root  -p  password  'atenorth' 	//设置密码
[root@server0 ~]# mysql  -u  root  -p
MariaDB [(none)]> CREATE  DATABASE  Contacts;
MariaDB [(none)]> GRANT select ON Contacts.* to Raikon@localhost IDENTIFIED BY 'atenorth';
MariaDB [(none)]> DELETE FROM mysql.user WHERE Password='';		//删除空密码账号
    											//!!注意:设好root密码再做
MariaDB [(none)]> QUIT

3)导入库

[root@server0 ~]# wget  http://classroom.example.com/pub/materials/users.sql 
[root@server0 ~]# mysql  -u  root  -p  Contacts  <  users.sql

步骤17:数据库查询(填空)

案例概述:

在系统 server0 上使用数据库 Contacts,并使用相应的 SQL 查询以回答下列问题:

解题参考:

[root@server0 ~]# mysql  -u  root  -p
Enter password:
MariaDB [Contacts]> USE  Contacts;
MariaDB [Contacts]> SELECT  name  FROM  base  WHERE  password='solicitous';
+-------+
| name  |
+-------+
| James |
+-------+
MariaDB [Contacts]> SELECT  count(*)  FROM  base,location  WHERE base.name='Barbara'  AND  location.city='Sunnyvale'  AND  base.id=location.id ;
1
MariaDB [Contacts]> QUIT

步骤18:创建一个脚本

案例概述:

在server0上创建一个名为/root/foo.sh 的脚本,让其提供下列特性:

解题参考:

[root@server0 ~]# vim  /root/foo.sh 
#!/bin/bash
if [ "$1" = "redhat" ] ; then
	echo "fedora"
elif [ "$1" = "fedora" ] ; then
	echo "redhat"
else
	echo "/root/foo.sh redhat|fedora" >&2
fi
[root@server0 ~]# chmod  +x  /root/foo.sh

步骤19:创建一个添加用户的脚本

案例概述:

在server0上创建一个脚本,名为/root/batchusers,此脚本能实现为系统server0创建本地用户,并且这些用户的用户名来自一个包含用户名的文件,同时满足下列要求:

解题参考:

[root@server0 ~]# vim  /root/batchusers
#!/bin/bash
if [ $# -eq 0 ] ; then
echo "Usage: /root/batchusers <userfile>" 
exit 1
fi
if [ ! -f $1 ] ; then
echo "Input file not found" 
exit 2
fi
for name in $(cat $1)
do
    useradd  -s  /bin/false  $name
done
[root@server0 ~]# chmod  +x  /root/batchusers