基本操作:(以httpd服务为例)

  1. 设置服务开机自启动

systemctl enable --now httpd

  1. 启动/重启/关闭服务

systemctl start/restart/stop httpd

  1. 更改主机名

hostnamectl set-hostname server1.example.com

  1. vim编辑器

一、 防火墙放行端口

1
2
3
4
5
6
http 80 tcp



dhcp 8899 tcp
#比赛将会给以上信息,要求放行这些端口/服务
  • allow:允许通过指定端口的网络流量。
  • deny:拒绝通过指定端口的网络流量。
  • reject:拒绝通过指定端口的网络流量,并发送错误响应包给客户端。

使用示例:# 格式:ufw allow/deny 端口/协议

  1. 开启或关闭ufw
1
ufw enable/disable
  1. 开放端口
1
ufw allow <port>/<protocol>

例如,允许TCP协议的80端口通过ufw:

1
ufw allow 80/tcp
  1. 禁用端口
1
ufw deny <port>/<protocol>

二、ssh免密

对server1和server2配置免密,使俩台机器可以互相免密登录

1
2
3
4
ssh-key-gen -t rsa # 生成密钥
ssh-copy-id root@server1 # 将密钥发送给server2
# 在主控server1将生成的密钥发送给server2,server2即可免密登录server1
# 题目要求互相免密登陆,所以要在server1和server2上都操作,将密钥生成后发送给对方

三、网络配置

配置apt源并使之生效

1
2
3
4
5
6
vim /etc/apt/source.list# 这是apt源配置文件,在此配置源
# 建议原有的不要删除,注释掉即可,在后面新增新的源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

apt update # 配置完更新软件清单

注:免密、网络、端口配置失败,后面题目将做不出来

四、配置虚拟主机

  1. 基于端口
  2. 基于域名
  3. 基于IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apt install apache2 -y
# 安装apache2, -y是指安装过程省略yes确认
systemctl start apache2
# 启动apache2
systemctl enable apache2
# 设置开机自启
apt install ufw
# 安装防火墙
ufw enable
# 设置开机自启
ufw allow 80
# 放行端口或 ufw allow ssh
[root@UOS /var/www]# mkdir html_1
[root@UOS /var/www]# mkdir html_2
[root@UOS /var/www]# mkdir html_3
# 创建网站目录以及网站首页
[root@UOS /var/www]# echo "this is no.1" > ./html_2/index.html
[root@UOS /var/www]# echo "this is no.2" > ./html_2/index.html
[root@UOS /var/www]# echo "this is no.3" > ./html_3/index.html

基于端口的虚拟主机

修改 /etc/apache2/sites-available/000-default.conf默认配置

若 /etc/apache2/sites-enabled/ vhosts.conf 配置了,则不使用默认配置

这是网页配置文件,决定网页在哪里

1
2
3
4
<VirtualHost *:8080>                                                            
# ServerName 192.168.22.138
DocumentRoot /var/www/heml_1
</VirtualHost>

修改/etc/apache目录下的ports.conf文件,在Listen 80下面加上一条Listen 8080,监听8080端口

1
2
3
4
5
Listen 80                      
Listen 8080
systemctl restart apache2
# 重启apache2服务
打开192.168.22.138 验证

基于IP的虚拟主机

添加网卡,配置另一个IP,

nmtui 图形化配置

1
2
3
4
5
6
7
8
9
10
<VirtualHost 192.168.22.138:8080> 
DocumentRoot /var/www/heml_1
</VirtualHost>
<VirtualHost 192.168.22.140:8080>
DocumentRoot /var/www/heml_2

</VirtualHost>
<VirtualHost 192.168.22.142:8080>
DocumentRoot /var/www/heml_3
</VirtualHost>
1
2
3
systemctl restart apache2
# 重启apache2服务
打开 192.168.22.138 和 192.168.22.140 验证

基于域名的虚拟主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim /etc/hosts
# 配置域名映射
192.168.22.138 www.uos1.com

<VirtualHost *:8080>
ServerName www.uos1.com
DocumentRoot /var/www/heml_1
</VirtualHost>

<VirtualHost *:8080>
ServerName www.uos2.com
DocumentRoot /var/www/heml_2
</VirtualHost>

<VirtualHost *:8080>
ServerName www.uos3.com
DocumentRoot /var/www/heml_3
</VirtualHost>

三种方法一起使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<VirtualHost 192.168.22.138:80>                                 
# ServerName www.uos1.com
DocumentRoot /var/www/html_1
</VirtualHost>

<VirtualHost 192.168.22.140:80>
# ServerName www.uos2.com
DocumentRoot /var/www/html_2
</VirtualHost>

<VirtualHost *:80>
ServerName www.uos3.com
DocumentRoot /var/www/html_3
</VirtualHost>

五、时钟同步

1
2
3
4
5
6
apt install chrony
vim /etc/chrony/chrony.conf
# 添加 server server.lab.example.com
# server 后面接上题目给的时间服务器,此处为举例,添加后设置重启、开机启动
systemctl restart chrony
systemctl enable chronyd

六、脚本编写

编写一个shell脚本,要求找出1..200内能被6整除的数字,并除以2后输出

vim script.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

for i in {1..200}
do
if [ $(($i%6)) -eq 0 ]
then
result=$(($i/2))
echo $result
fi
done
1
2
chmod +x script.sh #添加运行权限
./script.sh#运行

七、Docker配置与应用

此题要求拉取服务器仓库上一个镜像,所以掌握Docker基本操作即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
镜像的基本操作命令
docker search uos #docker镜像查询
docker pull uosproject/uos#下载镜像
docker images #查看镜像
docker save uosproject/uos:latest -o uos.tar #导出uos镜像为uos.tar
docker load -i nginx.tar #导入本地镜像
docker rmi nginx #删除镜像

镜像的导出和导入
docker save uosproject/uos > /tmp/uos.tar#将镜像导出为tar文件
docker rmi uosproject/uos
docker load < /tmp/uos.tar#删除原有的uos镜像,通过文件导入镜像
docker images #列出所有镜像

容器基本命令
docker run -it uosproject/uos bash #以bash环境启动镜像
docker ps -a #不加-a只显示运行状态的docker进程,每次都随机创建容器名和容器ID
docker stop 597b8cd3ca55 #通过容器ID关闭容器
docker start 597b8cd3ca55 #启动容器
docker restart 597b8cd3ca55#重启容器
docker logs 597b8cd3ca55#通过容器ID来查询日志
docker tag uosproject/uos:latest uosproject/txuos:v1 #启动容器修改镜像的名称和标签,默认标签为latest
docker inspect uosproject/uos#查看镜像的底层信息
docker attach 597b8cd3ca55#连接到容器
docker ps#查看容器
docker exec -it 597b8cd3ca55 bash
docker top 597b8cd3ca55#查看容器进程列表

可以尝试搭建一个apache2容器或者nginx容器

八、数据库基本操作

在server1上,建立三个mariadb用户dbuser1/dbuer2/dbuser3
在server1上,建立三个数据库uosdb1,/uosdb2/uosdb3
一一对应授权:
dbuser1只可访问uosdb1
dbuser2只可访问uosdb2
dbuser3只可访问uosdb3

九、ansible配置

下载ansible并配置,使server1可以管理server2

  1. 下载ansible配置ansible
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
vim /etc/ansible/ansible.cfg
#重要配置
[defaults]
inventory=/home/root/ansible/inventory
remote_user=root
host_key_checking=False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False


vim /etc/ansible/inventory
#配置被控端清单
#定义单个主机
server1
server2
#定义主机组
#[]里是主机组名称,下面加上属于此组的主机
[group1]
server1
[group2]
server2
#定义嵌套组,group2组是group1主机组的成员
[group1:children]
group2

比赛的时候好像只需要配置主机清单inventory

若不清楚模块具体用法,安装ansible后可通过ansible-doc systemd查看用法(以systemd模块为例)

十、自动化安装

编写playbook,在所有控制节点安装php和mariadb

看需求,若安装软件包则是第一个tasks,此处用了一个循环,可以下载多个安装包,比赛的时候是php和mariadb这两个。

若安装软件包组,则为第二个tasks,软件包组有空格,要加个@

第三个tasks为更新所有软件包

- hosts 是指定任务运行的控制节点,all为所有,若只想在某个控制节点运行playbook,只需要写那个控制节点的主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@controller ansible]$ vim package.yml
# 在所有控制节点安装mariadb 和 php
- name: Install package
hosts: all
become: true

tasks:
- name: Update apt cache
apt: update_cache=yes
# 使用Apt模块更新apt缓存。
- name: Install mariadb and php
apt: name={{ item }} state=present
with_items:
- mariadb
- php
# 安装软件
- name: Enable service
systemd:
name: nginx.service
enabled: yes
state: started
# 启动服务
[admin@controller ansible]$ ansible-playbook packages.yml
#掌握安装软件那步操作即可

十一、替换文件内容

编写一个playbook,要求将被控段/var/www/html下的index.html文件替换成

this is file1

this is file2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[admin@controller ansible]$ vim replace.yml
- hosts: all
tasks:
  - name: replace this is file1
    replace:
      path: /var/www/html/index1.html
      regexp: '.*'
      replace: 'this is file1'
  - name: replace this is file2
    replace:
      path: /var/www/html/index2.html
      regexp: '.*'
      replace: 'this is file2'

[admin@controller ansible]$ ansible-playbook replace.yml

除以上知识外,比赛还将涉及到基础服务配置(nginx、DHCP、)、NFS、逻辑卷、vdo等