RHCE---服务+ansible

news2024/12/23 9:46:48

一、命令提示符颜色

也可以写入配置文件/etc/profile
[root@master ~]# vim .bashrc 
绿色:
PS1='\[\033[01;32m\]\u@\H:\[\033[01;34m\]\w\$\[\033[00m\] '
粉红色:
PS1='\[\e[1;35m\]\u@\h:\[\e[0m\]\[\e[1;33m\]\w\[\e[1;35m\]\[\e[0m\]\[\e[1;34m\]\$ \[\e[0m\]'
[root@master ~]# source .bashrc

详解:

[root@master ~]# echo $PS1
[\u@\h \W]\$
那么里面的 [\u@\h \W]$分别代表什么呢?
PS1(是数字1而不是字母l),每个版本bash的PS1变量内的特殊符号可能有些小的差异,
你可以先man bash 一下。
  下面是RedHat7环境下默认的特殊符号所代表的意义:
  \d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
  \H :完整的主机名称。例如:我的机器名称为:RedHat7.linux,则这个名称就是RedHat7.linux
  \h :仅取主机的第一个名字,如上例,则为RedHat7,而.linux则被省略
  \t :显示时间为24小时格式,如:HH:MM:SS
  \T :显示时间为12小时格式
  \A :显示时间为24小时格式:HH:MM
  \u :当前用户的账号名称
  \v :BASH的版本信息
  \w :完整的工作目录名称。家目录会以 ~代替
  \W :利用basename取得工作目录名称,所以只会列出最后一个目录
  \# :下达的第几个命令
  \$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
  默认的PS1内容为: PS1='[\u@\h \W]\$ ' ,
  所以默认的提示符就是: [root@linux ~]#

当我们了解上述参数之后,在实际操作过程中,我们如果想显示主机全名以及完整的工作目录,我们就需要修改PS1的相应参数,并写入/etc/profile文件中 例如:修改前,我们默认的PS1对于主机名、目录都只是显示一部分,
[root@RedHat7 ~]# hostname
RedHat7.linux
[root@RedHat7 ~]# 
[root@RedHat7 ~]# cd /etc/sysconfig/network-scripts/
[root@RedHat7 network-scripts]#
现在我们想让主机名和工作路径全部显示出来,根据上面参数,我们需要用到大写的H和小写的w,我们用echo命令将修改后的PS1追加到 /etc/profile文件中(不建议这样操作,最好还是vim 进到文件去编辑好些),并更新该文件
[root@RedHat7 ~]# echo "PS1='[\u@\H \w]\$' " >> /etc/profile
[root@RedHat7 ~]# source /etc/profile
如果是在虚拟机里面或者是Xshell中,我们可能还要重启或断开连接再次连接才能看到结果。
[root@RedHat7.linux ~]$ cd /etc/sysconfig/network-scripts/
[root@RedHat7.linux /etc/sysconfig/network-scripts]$ 
此时,我们可以看到主机全名和工作路径的全部

 颜色值设置
 PS1中设置字符颜色的格式为:\[\e[F;Bm\],\[\e[0m\] 其中
 “F“为字体颜色,编号为30-37,
 “B”为背景颜色,编号为40-47。用 \[\e[0m\]结束颜色设置,颜色表如下:
  F    B
  30    40    黑色
  31    41    红色
  32    42    绿色
  33    43    黄色
  34    44    蓝色
  35    45    紫红色
  36    46    青蓝色
  37    47    白色
  根据颜色表,套用入字符颜色设置格式中,就可以对linux终端命令行颜色进行个性化设置。
  比如要设置命令行的格式为绿字黑底,显示当前用户的账号名称、
  主机的第一个名字、完整的当前工作目录名称、24小时格式时间,就可以使用如下的命令:
 
  export PS1='\[\e[30;1m\][\u@\h \w]\$ \[\e[0m\]  -----黑色提示符
  export PS1='\[\e[31;1m\][\u@\h \w]\$ \[\e[0m\]  -----红色提示符
  export PS1='\[\e[32;1m\][\u@\h \w]\$ \[\e[0m\]  -----绿色提示符
  export PS1='\[\e[33;1m\][\u@\h \w]\$ \[\e[0m\]  -----黄色提示符
  export PS1='\[\e[34;1m\][\u@\h \w]\$ \[\e[0m\]  -----蓝色提示符(天蓝)
  export PS1='\[\e[35;1m\][\u@\h \w]\$ \[\e[0m\]  -----粉色提示符
  export PS1='\[\e[36;1m\][\u@\h \w]\$ \[\e[0m\]  -----蓝色提示符(海蓝)
  export PS1='\[\e[37;1m\][\u@\h \w]\$ \[\e[0m\]  -----白色提示符

环境准备:

1.至少俩台linux主机,一台是控制节点,一台是受控节点
2.控制节点和受控节点都需要安装Python36
3.控制节点需要安装ansible
4.控制节点需要获得受控节点的普通用户或root用户的权限,控制节点需要ssh客户端,受控节点需要ssh服务端
5.控制节点和受控节点之间网络联通,配置静态ip

二、环境安装:

主机名IP地址角色
master172.25.250.132控制节点
node01172.25.250.128受控节点
node02172.25.250.129受控节点

1、替换yum源,方便安装软件:----阿里

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/Rocky-*.repo

dnf makecache

2、安装常用工具:

yum install -y bash-completion tree lrzsz  vim  net-tools.x86_64  unzip   lsof  wget

3、修改主机名:

master: hostnamectl set-hostname master
node01:hostnamectl set-hostname node01
node02:hostnamectl set-hostname node02

4、配置ip地址:

master:俩张网卡NAT和桥接模式

node01 node02:桥接模式

master主机上的配置:
1.查看状态:

[root@master ~]# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION
ens160  ethernet  connected                              ens160
ens224  ethernet  connecting (getting IP configuration)  Wired connection 1
lo      loopback  unmanaged                              --
[root@master ~]# nmcli connection
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  408f15fc-eaa9-3a51-ae18-d9673dcbabab  ethernet  ens224
ens160              b4725590-2691-43b0-b2a8-7eae81ee470a  ethernet  ens160


2、添加ip,网关,dns,改为手动,开机自启
[root@master ~]# cd /etc/sysconfig/network-scripts/
[root@master network-scripts]# ll
total 4
-rw-r--r--. 1 root root 247 Dec 13 09:34 ifcfg-ens160
[root@master network-scripts]# cat ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=b4725590-2691-43b0-b2a8-7eae81ee470a
DEVICE=ens160
ONBOOT=yes ---改为yes

3、修改master主机桥接网卡的ip地址:
[root@master ~]# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION
ens160  ethernet  connected                              ens160
ens224  ethernet  connecting (getting IP configuration)  Wired connection 1
lo      loopback  unmanaged       
[root@master network-scripts]# nmcli device  connect ens224 ---自动创建connection,如果有俩个网段就可以实现
但是我在家在学校只有一个192.168.x.x的地址,包括后面俩台node也配不上
[root@master network-scripts]# nmcli device connect ens224
Error: Connection activation failed: (5) IP configuration could not be reserved (no available address, timeout, etc.).

5、网卡改为仅主机模式:

仅主机:172.25.250.x 255.255.255.0

master:192.168.11.154---NAT模式,都可以连接

master:172.25.250.132
node01:172.25.250.128
node02:172.25.250.129

6、配置hosts文件:

172.25.250.132 master
172.25.250.128 node01
172.25.250.129 node02

7、xshell配置会话:

172.25.250.132 master
172.25.250.128 node01
172.25.250.129 node02

8、时间同步:

这里我使用的是仅主机模式,所以受控节点的主机没有互联网,但是三台主机的时间一样的,我就不做配置

1、安装时间同步软件包:
[root@master ~]# yum install chrony

2、修改配置文件:
[root@master ~]# vim /etc/chrony.conf
pool 2.rocky.pool.ntp.org iburst
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst

3、设置为开机自启:
[root@master ~]# systemctl enable --now chronyd

4、写计划任务同步:

[root@master ~]# vim /etc/crontab
0 10  * * * root  chronyc sources &>/dev/null

9、装Python36:

1、每台机器都装:接下来的操作都在master上
yum install python36 -y

2、不用root权限,权限太高了;在master主机上创建student 密码redhat;在node节点上用的redhat用户,密码redhat
[root@node01 ~]# vim /etc/sudoers
root    ALL=(ALL)       ALL
redhat ALL=(ALL)       NOPASSWD: ALL
强制保存退出
如果用的visudo打开就不用,正常退出就行


3、测试:
[root@master ~]# visudo
[root@master ~]#
[root@master ~]#
[root@master ~]# su - student
Last login: Tue Dec 13 12:17:40 CST 2022 on pts/0
[student@master ~]$ sudo ls /root
anaconda-ks.cfg

10、安装ansible:

1、阿里云下载扩展源:epel
[student@master ~]$ sudo yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

也可以自己写源:
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0

2、安装ansible:
[student@master ~]$ yum install ansible -y

3、查看ansible版本信息:
[student@master ~]$ ansible --version
ansible [core 2.13.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /home/student/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.13 (main, Nov 16 2022, 15:31:39) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True

11、配置免密登录:

1、在master主机上创建密钥对:
[student@master ~]$ ssh-copy-id redhat@node02
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/student/.ssh/id_rsa.pub"
The authenticity of host 'node02 (172.25.250.129)' can't be established.
ECDSA key fingerprint is SHA256:723ytDI+oeyH5SeBHONt70U2NspX11SZ5lwzBASGLy4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
redhat@node02's password:输入密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'redhat@node02'"
and check to make sure that only the key(s) you wanted were added.

2、测试:
在master连接node节点:
[student@master ~]$ ssh redhat@node01
Last login: Tue Dec 13 12:12:43 2022
[redhat@node01 ~]$

12、环境搭好了,做好快照

所有的密码都是redhat

三、简单操作:

ansible清单和配置文件

1、定义清单文件:

1、创建一个文件夹存放::
[student@master ~]$ mkdir ansibleTest
[student@master ~]$ cd ansibleTest/
[student@master ansibleTest]$

2、编写文件,注意优先级
[student@master ~]$ sudo vim /etc/ansible/hosts
这是在默认配置文件中的主机清单文件:
[student@master ~]$ tail -2 /etc/ansible/hosts
node01
node02

这是在自定义的主机清单文件,-i指定清单文件文件名:
[student@master ansibleTest]$ ansible all --list-hosts -i ./inventory
  hosts (3):
    node01
    node02
    master
这是查看主机组里面的主机文件:
[student@master ansibleTest]$ ansible webserver --list-hosts -i ./inventory
  hosts (2):
    node01
    node02

2、执行清单文件:

[student@master ~]$ ansible all --list-hosts
  hosts (2):
    node01
    node02

3、修改配置文件

1、自定义ansible.cfg,这几条信息都需要写
[student@master ansibleTest]$ cat ./ansible.cfg
[defaults]
inventory= ./inventory
remote_user = redhat
ask_pass = false
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

4、简单测试:

1.masterping不通。因为没有免密做student免密登录redhat:
[student@master ansibleTest]$ ansible all -m ping
The authenticity of host 'master (172.25.250.132)' can't be established.
ECDSA key fingerprint is SHA256:NeqtJaCF7cvzBynyHDzGp4j1w6qIRrF2du45YRldvB8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? node01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
这里master上面的redhat需要密码,但是在清单文件中是ask_pass = false,所以ping不通master
root    ALL=(ALL)       ALL
student ALL=(ALL) NOPASSWD: ALL
redhat ALL=(ALL) NOPASSWD:ALL
添加redhat进去


2、把公钥私钥用student用户传给redhat
[student@master ansibleTest]$ ssh-copy-id redhat@master
测试:
[student@master ansibleTest]$ ansible all -m ping
node02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
master | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
学会看日志

5、几个清单文件的优先级:

[student@master ansibleTest]$ ll /etc/ansible/ansible.cfg  ~/ansible.cfg   ./ansible.cfg

运行临时命令

1、创建文件:

1、file模块:
[student@master ansibleTest]$ ansible-doc -l ---查看所有模块
[student@master ansibleTest]$ ansible-doc file ---查看file模块的用法
[student@master ansibleTest]$ ansible all -m ping -v ---ping模块
Using /home/student/ansibleTest/ansible.cfg as config file  ---使用的配制文件
node01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
master | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

作业:

使用yum和service模块安装和启动httpd服务,但是我node没有网,所以下载不了
[student@master ansibleTest]$ ansible all -m yum -a 'name=httpd state=present'
[student@master ansibleTest]$ ansible all -m service -a 'name=httpd state=started'

这里我把受控节点也添加了俩张网卡,一个仅主机一个NAT
[student@master ansibleTest]$ ansible all -m yum -a 'name=httpd state=present'
node01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []
}
node02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []
}
master | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []
}

测试:
[student@master ansibleTest]$ ansible all -m shell -a 'systemctl is-active httpd'
node02 | CHANGED | rc=0 >>
active
node01 | CHANGED | rc=0 >>
active
master | CHANGED | rc=0 >>
active

playbook

1、编写一个确保chrond服务开机自启:

1、安装chrony服务:---注意服务名称呀!!!!
[student@master ansibleTest]$  ansible all -m yum -a 'name=chrony state=present'
node01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []
}
master | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "msg": "Nothing to do",
    "rc": 0,
    "results": []
}
node02 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: timedatex-0.5-3.el8.x86_64",
        "Installed: chrony-4.2-1.el8.rocky.1.0.x86_64"
    ]
}


2、编写playbook:

---
- name: enable chronyd
  hosts: all
  tasks:
    - name: enable chrony service
      service:
        name: chronyd
        enabled: yes

3、运行playbook:
[student@master ansibleTest]$ ansible-playbook chrony_service.yaml

PLAY [enable chronyd] ************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node01]
ok: [node02]
ok: [master]

TASK [enable chrony service] *****************************************************************************************************************
ok: [node01]
ok: [node02]
ok: [master]

PLAY RECAP ***********************************************************************************************************************************
master                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node01                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
执行成功结果!!!

2、语法检测:

[student@master ansibleTest]$ ansible-playbook  --syntax-check chrony_service.yaml
playbook: chrony_service.yaml

实验:

案例一:安装http 启动防火墙,写入测试页index.html

1、编写playbook:

---
- name: configer web server
  hosts: webs
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
    - name: start firwalld
      service:
        name: firewalld
        state: started

    - name: firewalld allow httpd
      firewalld:
        service: http
        state: enabled
    - name: copy index.html
      copy:
        content: "this is web test"
        dest: /var/www/html/idnex.html
    - name: test web page
      uri:
        url: http://localhost
        return_content: yes
        status_code: 200

2、语法检测:
[student@master ansibleTest]$ ansible-playbook --syntax-check configer_server.yaml
playbook: configer_server.yaml

3、运行playbook:

[student@master ansibleTest]$ ansible-playbook configer_server.yaml

PLAY [configer web server] *******************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [install httpd] *************************************************************************************************************************
ok: [node01]
ok: [node02]

TASK [start firwalld] ************************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [firewalld allow httpd] *****************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [copy index.html] ***********************************************************************************************************************
changed: [node01]
changed: [node02]

TASK [test web page] *************************************************************************************************************************
ok: [node02]
ok: [node01]

PLAY RECAP ***********************************************************************************************************************************
node01                     : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

案列二:在上一实验基础上写多个play

1、编写playbook:
[student@master ansibleTest]$ cat configer_server.yaml
---
- name: configer web server
  hosts: webs
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
    - name: start firwalld
      service:
        name: firewalld
        state: started

    - name: firewalld allow httpd
      firewalld:
        service: http
        state: enabled
    - name: copy index.html
      copy:
        content: "this is web test"
        dest: /var/www/html/index.html
    - name: test web page
      uri:
        url: http://localhost
        return_content: yes
        status_code: 200


- name: test web pages
  hosts: master
  tasks:
    - name: test node01 web
      uri:
        url: http://node01
        status_code: 200
    - name: test node02 web
      uri:
        url: http://node02
        status_code: 200

2、测试:

[student@master ansibleTest]$ ansible-playbook configer_server.yaml

PLAY [configer web server] *******************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [install httpd] *************************************************************************************************************************
ok: [node01]
ok: [node02]

TASK [start firwalld] ************************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [firewalld allow httpd] *****************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [copy index.html] ***********************************************************************************************************************
changed: [node01]
changed: [node02]

TASK [test web page] *************************************************************************************************************************
ok: [node02]
ok: [node01]

PLAY RECAP ***********************************************************************************************************************************
node01                     : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

案例三:webserver

1、编写playbook:
---
- name: first play
  hosts: webs
  tasks:
    - name: install packages
      yum:
        name:
          - httpd
          - php
          - firewalld
          - mariadb-server
          - php-mysqlnd
        state: latest


    - name: start firewalld
      service:
        name: firewalld
        state: started
        enabled: yes

    - name: configer firewalld allow http
      firewalld:
        service: http
        permanent: yes
        state: enabled
        immediate: yes

    - name: copy index.php
      copy:
        src: index.php
        dest: /var/www/html/index.php


    - name: start httpd
      service:
        name: httpd
        state: restarted
        enabled: yes

- name: second play
  hosts: master
  become: no
  tasks:
    - name: test web1 page
      uri:
        url: http://node01
        return_content: yes
        status_code: 200

    - name: test web2 page
      uri:
        url: http://node02
        return_content: yes
        status_code: 200
 
2、编写php文件:
[student@master ansibleTest]$ cat index.php
<?php
phpinfo();

        
3、测试:
[student@master ansibleTest]$ ansible-playbook plays.yaml

PLAY [first play] ****************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [install packages] **********************************************************************************************************************
ok: [node01]
ok: [node02]

TASK [start firewalld] ***********************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [configer firewalld allow http] *********************************************************************************************************
ok: [node01]
ok: [node02]

TASK [copy index.php] ************************************************************************************************************************
ok: [node01]
ok: [node02]

TASK [start httpd] ***************************************************************************************************************************
ok: [node01]
ok: [node02]

PLAY [second play] ***************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [master]

TASK [test web1 page] ************************************************************************************************************************
ok: [master]

TASK [test web2 page] ************************************************************************************************************************
ok: [master]

PLAY RECAP ***********************************************************************************************************************************
master                     : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node01                     : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=6    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

作业:在受控节点上添加一个普通用户xiaohong,配置控制节点的student可以免密登录xiaohong用户,并且xiaohong可以sudo。

1、编写yaml:
[student@master ansibleTest]$ cat user.yaml
---
- name: generate public/private key pair
  hosts: master
  become: no
  remote_user: student
  tasks:
    - openssh_keypair:
        path: /home/student/.ssh/id_rsa

- name: create user
  hosts: node01
  tasks:
    - name: create user xiaohong
      user:
        name: xiaohong
        state: present

    - name: setting passwd
      shell: echo redhat | passwd --stdin xiaohong

    - name: setting sudoers
      lineinfile:
        line: "xiaohong ALL=(ALL) NOPASSWD: ALL"
        path: /etc/sudoers

- name: set authorized key
  hosts: node01
  remote_user: xiaohong
  become: no
  tasks:
    - name: set authorized key
      authorized_key:
        state: present
        user: xiaohong
        key: "{{ lookup( 'file', '/home/student/.ssh/id_rsa.pub' ) }}"

2、修改ansible.cfg文件
[student@master ansibleTest]$ cat ansible.cfg
[defaults]
inventory= ./inventory
remote_user = redhat
ask_pass = yes
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

3、语法检测:
[student@master ansibleTest]$ ansible-playbook user.yaml

4、执行:需要输入密码!!!

[student@master ansibleTest]$ ansible-playbook user.yaml
SSH password:

PLAY [generate public/private key pair] ******************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [master]

TASK [openssh_keypair] ***********************************************************************************************************************
changed: [master]

PLAY [create user] ***************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node01]

TASK [create user xiaohong] ******************************************************************************************************************
changed: [node01]

TASK [setting passwd] ************************************************************************************************************************
changed: [node01]

TASK [setting sudoers] ***********************************************************************************************************************
changed: [node01]

PLAY [set authorized key] ********************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node01]

TASK [set authorized key] ********************************************************************************************************************
changed: [node01]

PLAY RECAP ***********************************************************************************************************************************
master                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node01                     : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

作业二:给受控主机部署yum仓库

仓库1:

name:base

description:baseos

base url:http://mirrors.163.com/centos-vault/8.5.2111/BaseOS/x86_64/os/

需要验证软件包gpg签名

gpgcheck在/etc/pki/rpm-gpg/rpm-gpg-key-*

启用此软件仓库

仓库2:

name:app

description:APPstream

base url:http://mirrors.163.com/centos-vault/8.5.2111/AppStream/x86_64/os/

需要验证软件包gpg签名

gpgcheck在/etc/pki/rpm-gpg/rpm-gpg-key-*

注意:检查自己的linux版本,选择对应版本的仓库

部署成功后在受控节点上安装vsftpd软件包

环境前准备:
查看配置文件:
[student@master ansibleTest]$ cat ansible.cfg
[defaults]
inventory= ./inventory
remote_user = redhat
ask_pass = false
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
[student@master ansibleTest]$ ansible --version
ansible [core 2.13.3]
  config file = /home/student/ansibleTest/ansible.cfg
  configured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /home/student/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.13 (main, Nov 16 2022, 15:31:39) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True

查看inventory:
[student@master ansibleTest]$ cat inventory
[webs]
node01
node02

[web1]
node01

[web2]
node02

[all]
node01
node02
master

做好免密登录,重传
[student@master ansibleTest]$ ssh-copy-id redhat@node01
[student@master ansibleTest]$ ssh-copy-id redhat@node02


1、编写playbook:
[student@master ansibleTest]$ cat yum.yaml
---
- name: create repository
  hosts: webs
  tasks:
    - name: add repository baseos
      yum_repository:
        name: base
        description: baseos
        baseurl: http://mirrors.163.com/rocky/8.6/BaseOS/x86_64/os/
        gpgcheck: yes
        gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG_KEY-rockyofficial
        enabled: yes
    - name: add repository app
      yum_repository:
        name: app
        description: appstream
        baseurl: http://mirrors.163.com/rocky/8.6/AppStream/x86_64/os/
        gpgcheck: yes
        gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG_KEY-rockyofficial
        enabled: yes

2、语法检测:
[student@master ansibleTest]$ ansible-playbook yum.yaml

3、测试:
[student@master ansibleTest]$ ansible-playbook yum.yaml

PLAY [create repository] *********************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node02]
ok: [node01]

TASK [add repository baseos] *****************************************************************************************************************
changed: [node02]
changed: [node01]

TASK [add repository app] ********************************************************************************************************************
changed: [node01]
changed: [node02]

PLAY RECAP ***********************************************************************************************************************************
node01                     : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

作业三:给web主机组写一个playbook,该playbook有俩个play,第一个play可以保证在web主机组上安装httpd和php,确保web主机组的/var/www/html/目录下有一个index.php,内容如下:

<?php
phpinfo();

该playbook里面的第二个play用于测试该web主机组的web服务能否被成功访问index.php内容

管理事实

案例一:向受管主机的/home/file文件里面写入内容如下:

hostname=当前主机的名字
memory=当前主机的内存大小
BIOS version = 当前主机的bios的版本
distribution = 当前linux主机的发行版本信息
size of disk device is 当前主机的磁盘大小
[student@master ansibleTest]$ cat sys.yaml
---
- name: first play
  hosts: master
  tasks:
    - name: print msg
      debug:
        msg: |
                hostname: {{ ansible_facts.hostname }},
                memory: {{ ansible_facts.memory_mb.real.total }}
                bios version: {{ ansible_facts.bios_version }}
                distribution: {{ansible_facts.distribution }}
                device size: {{ ansible_facts.device.sda.size}}

    - name: copy file
      copy:
        content: |
                hostname: {{ ansible_facts.hostname }},
                memory: {{ ansible_facts.memory_mb.real.total }}
                bios version: {{ ansible_facts.bios_version }}
                distribution: {{ansible_facts.distribution }}
                device size: {{ ansible_facts.device.sda.size}}

        dest: /home/file

案例二:将createuser.fact文件传输到受管主机工作为自定义事实

案例三:使用debug模块,显示当前受控主机的dns服务器的ip地址

[student@master ansibleTest]$ ansible-playbook dns.yaml

PLAY [firt play] *****************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node01]

TASK [debug] *********************************************************************************************************************************
ok: [node01] => {
    "ansible_facts.dns.nameservers": [
        "192.168.11.2",
        "172.25.250.1"
    ]
}

PLAY RECAP ***********************************************************************************************************************************
node01                     : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[student@master ansibleTest]$ cat dns.yaml
---
- name: firt play
  hosts: node01
  tasks:
    - debug:
        var: ansible_facts.dns.nameservers

实施任务控制

案列一:重启服务

1、编写playbook:
[student@master ansibleTest]$ cat restart_service.yaml
---
- name: restart service
  hosts: all
  tasks:
    - name: install httpd mariadb-server
      yum:
        name:
          - httpd
          - mariadb-server

        state: present
      register: result

    - debug:
        var: result

    - name: start service
      service:
        name: "{{ item }}"
        state: restarted
      loop:
        - httpd
        - mariadb
      when: result.rc == 0
2、执行:俩次执行不一样,因为幂等性
[student@master ansibleTest]$ ansible-playbook restart_service.yaml

PLAY [restart service] ***********************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [node02]
ok: [node01]
ok: [master]

TASK [install httpd mariadb-server] **********************************************************************************************************
ok: [node01]
ok: [master]
ok: [node02]

TASK [debug] *********************************************************************************************************************************
ok: [node01] => {
    "result": {
        "changed": false,
        "failed": false,
        "msg": "Nothing to do",
        "rc": 0,
        "results": []
    }
}
ok: [node02] => {
    "result": {
        "changed": false,
        "failed": false,
        "msg": "Nothing to do",
        "rc": 0,
        "results": []
    }
}
ok: [master] => {
    "result": {
        "changed": false,
        "failed": false,
        "msg": "Nothing to do",
        "rc": 0,
        "results": []
    }
}

TASK [start service] *************************************************************************************************************************
changed: [node01] => (item=httpd)
changed: [node02] => (item=httpd)
changed: [master] => (item=httpd)
changed: [node01] => (item=mariadb)
changed: [node02] => (item=mariadb)
changed: [master] => (item=mariadb)

PLAY RECAP ***********************************************************************************************************************************
master                     : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node01                     : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

四、个人博客搭建

一、主要内容

wordpress依赖于PHP和MySQL,所以在搭建wordpress前需要先把PHP和MySQL的环境搭建好,本文中使用的web服务为apache。

1、安装LAMP服务器系统(Linux、Apache、MySQL、PHP )

2、安装WordPress

二、具体步骤

安装apache

使用yum安装apache

root@rocky:~# yum install httpd -y

启动apache

root@rocky:~# systemctl is-active httpd
active
root@rocky:~# systemctl start httpd

设置开机自启动

systemctl enable httpd

或者:重启加开机自启动
root@rocky:~# systemctl enable --now httpd

安装PHP

root@rocky:~# yum install php php-devel -y

接下来是一些拓展

yum install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc -y

还有一个不能通过上述方式直接安装的php-mysql

root@rocky:~# yum search php-mysql
Last metadata expiration check: 0:16:40 ago on Sat 17 Dec 2022 07:54:40 PM CST.
===================================================================== Name Matched: php-mysql ======================================================================
php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
root@rocky:~# yum install php-mysqlnd.x86_64
Last metadata expiration check: 0:16:55 ago on Sat 17 Dec 2022 07:54:40 PM CST.
Package php-mysqlnd-7.2.24-1.module+el8.4.0+413+c9202dda.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

PHP,启动!

root@rocky:~# systemctl start php-fpm

开机启动

root@rocky:~# systemctl enable php-fpm

安装MySQL

很多教程选择安装mysql的客户端来进行以下操作,官网也是这么玩的,但是我懒,就选择了直接摁命令行

root@rocky:~# yum install mysql mysql-server

启动MySQL

root@rocky:~# systemctl start mysqld.service

修改新建好的账户密码

root@rocky:~# mysqladmin -u root password 123456

登入你的MySQL

root@rocky:~# mysql -u root -p123456

输入你刚刚修改的密码,然后新建一个库

mysql> create database wordpress ;
Query OK, 1 row affected (0.00 sec)

新建一个用户(MySQL8.0需要先创建用户,如果不是8.0+可以跳过这步),如果报错把"IDENTIFIED BY '这里是你的密码'"这块去掉

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER 'wordpress'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)

授予访问权限,刷新

mysql> grant all privileges on wordpress .* to 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on wordpress to 'wordpress'@'%';
Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

准备工作完成开始安装wordpress

安装wordpress

下载wordpress的包,并解压。如果你愿意冒着一点打不开的风险重新安装的话可以试试下面的最新版,毕竟在装了两次最新版都死亡白屏但是换成了旧版本之前,我也是个一定要装最新版的强迫症

root@rocky:~#  wget http://wordpress.org/latest.tar.gz

 tar -xzf latest.tar.gz

附上我用起来没毛病的包

root@rocky:~# wget https://cn.wordpress.org/wordpress-5.0.3-zh_CN.zip
root@rocky:~#unzip wordpress-5.0.3-zh_CN.zip

将wordpress文件夹拷贝至apache服务器根文件目录下(正常情况下为:/var/www/html )

root@rocky:~#cp -r wordpress /var/www/html/

跳转然后创建并修改wordpress的配置文件

root@rocky:~# cd /var/www/html/wordpress/
root@rocky:/var/www/html/wordpress# cp wp-config-sample.php wp-config.php
root@rocky:/var/www/html/wordpress# vim wp-config.php

修改数据库名字,用户名,密码

测试:

关闭防火墙selinux

root@rocky:/var/www/html/wordpress# systemctl is-active firewalld.service
active
root@rocky:/var/www/html/wordpress# systemctl stop firewalld.service
root@rocky:/var/www/html/wordpress# setenforce 0
root@rocky:/var/www/html/wordpress# getenforce
Permissive

访问

http://192.168.11.142/wordpress/wp-admin/install.php

进行wordpress初始化,一顿操作猛如虎,但是结果进不了数据库

简化步骤直接操作:

1、安装httpd:
[root@rocky ~]#yum update
[root@rocky ~]# yum install httpd -y

2、启动服务;
[root@rocky ~]# systemctl start httpd

3、关闭防火墙,selinux
[root@rocky ~]# systemctl stop firewalld.service
[root@rocky ~]# setenforce 0

4、安装PHP:
[root@rocky ~]# yum install php -y

5、安装组件:
[root@rocky ~]#yum install php-* -y

6、写phpinfo
[root@rocky html]# cat info.php
<?php
phpinfo();
?>

7、重启服务:
[root@rocky html]# systemctl restart httpd.service
[root@rocky html]# systemctl restart php-fpm.service

8、安装mysql:
[root@rocky html]# yum install mysql-server -y

9、重启并设置为开机自启动:
[root@rocky html]# systemctl enable --now mysqld

10、设置数据库密码:
mysqladmin -uroot -p123456

11、创建数据库:
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

12、下载WordPress:
root@rocky:~# wget https://cn.wordpress.org/wordpress-5.0.3-zh_CN.zip
root@rocky:~#unzip wordpress-5.0.3-zh_CN.zip

13、拷贝一份并命名为 wp-config.php
[root@rocky wordpress]# cp wp-config-sample.php wp-config.php

14、修改三个地方:
第一个是数据库名称,安装mysql时最后面创建的数据库,这里是wordpress
第二个是数据库的名称,这里没创建用户,用默认的root即可
第三个是数据库的密码,即安装第3步数据库时修改的密码,没修改的话默认填写’’,空着,不要删除两个单引号,(实际上我没试过没密码的,习惯性给数据库都添加了密码,这里你可以试试看没密码的,如果不行就按照安装数据库部分第三步修改一下密码,然后设置进来就行)
修改完成后按esc,然后输入:wq退出保存文件即可

15、测试:http://192.168.11.142/wordpress/wp-admin/install.php
数据库密码为空

蒸汽小火车:

下载链接:http://rpmfind.net/linux/rpm2html/search.php?query=sl&submit=Search+...&system=&arch=+x86_64

1、下载:
[root@rocky ~]# wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/s/sl-5.02-1.el8.x86_64.r   pm
2、安装:
[root@rocky ~]# rpm -i sl-5.02-1.el8.x86_64.rpm
warning: sl-5.02-1.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
3、运行:
[root@rocky ~]# sl

五、RHCE---服务篇

环境准备

1、将网卡设置为开机自启动:

[root@master ~]# nmcli connection modify ens160 connection.autoconnect yes
[root@master ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)

2、学习环境:8.x

[root@master ~]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.6 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.6"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.6 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="Rocky Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8"

3、系统时间--方便后期查看日志文件更新时间:

[root@master ~]# timedatectl set-timezone   Asia/Shanghai

4、配置好yum/dnf源 rpm

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

5、安装常用的软件包:

yum install -y bash-completion tree lrzsz  vim  net-tools.x86_64  unzip net-tools  lsof  wget

6、rpm包软件管理:

rpm包进行管理
rpm   -ivh 安装软件
      -evh 卸载软件
       -qa     rpm -qa | grep httpd 查看信息
       -ql      
       -qf

7、yum/dnf 7的版本用yum更多,在8版本之后用的dnf之多,可以在后期自己尝试用dnf

#vim   /etc/fstab
/dev/sr0   /mnt  iso9660    defaults     0 0 
#mount -a 查看挂载
#vim /etc/yum.repos.d/base.repo 
[BaseOS]
name=RHEL8.5-BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
[AppStream]
name=RHEL8.5-AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0

案例

案例一: 搭建web服务器,提供redhat测试界面

linux主机作为服务器

1、部署web服务程序 apache http server(httpd)

[root@localhost ~]# rpm -qa | grep httpd
httpd-filesystem-2.4.37-41.module+el8.5.0+11772+c8e0c271.noarch
httpd-tools-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64
httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64
redhat-logos-httpd-84.5-1.el8.noarch
[root@localhost ~]# yum install httpd -y

2、当前主机启动该服务程序

#systemctl    start|stop|restart|status|load|reload|enable|disable|is-active|is-enabled   httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl is-active httpd

3、提供客户端主机可以访问的资源文件

默认的资源文件

问什么默认访问的是欢迎界面:通过主配置/var/www/html加载网站资源文件(index.html),当文件不存在,匹配子配置文件/etc/httpd/conf.d/welcome.conf

Alias /.noindex.html /usr/share/httpd/noindex/index.html

4、关闭防火墙,selinux

[root@localhost ~]# systemctl stop firewalld      ---建议临时关闭
 [root@localhost ~]# systemctl disable firewalld

关闭selinux:

临时生效
[root@localhost ~]# setenforce 0      ---主机运行状态下临时关闭
[root@localhost ~]# getenforce            --查看selinux状态
Permissive 
永久修改linux状态
[root@localhost ~]# vim /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.     强制状态(开启)
#     permissive - SELinux prints warnings instead of enforcing.   警告(关闭)
#     disabled - No SELinux policy is loaded.                    禁用(不加载selinux)
SELINUX=permissive

5、rpm -ql httpd | more

/etc/httpd/conf 主配置目录(默认提供的参数信息)

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d 子配置目录(辅助)(自定义的配置文件)

/etc/httpd/conf.d/*.conf

一个完整配置文件先加载主配置文件,在加载子配置文件

/etc/httpd/conf.modules.d 模块配置文件的路径

全局生效
ServerRoot   /etc/httpd      配置文件中加载文件的主路径
Listen  80                   服务程序默认监听端口
User apache                  服务程序运行后的所属用户和所属组
Group apache
Serveradmin  root@localhost
#ServerName  www.example.com:80   定义服务主机访问名称
ServerName 0.0.0.0:80
DocumentRoot "/var/www/html"   定义网站默认的主路径
IncludeOptional conf.d/*.conf   开始加载所有子配置文件

局部生效
<Directory />            目录起始标签  /
    AllowOverride none
    Require all denied         请求所有拒绝
</Directory>
<Directory "/var/www">     目录起始标签  /var/www  
    AllowOverride None
    # Allow open access:
    Require all granted     请求所有允许  
</Directory>
<IfModule dir_module>      模块标记  对目录模块定义
    DirectoryIndex index.html     网站主目录索引文件文件名为index.html
</IfModule>

案例二:搭建网站创建自定义网页文件

linux主机作为服务器

1、部署web服务程序 apache http server(httpd)

2、当前主机启动该服务程序

3、提供客户端主机可以访问的资源文件

#cd /var/www/html
  #echo helloworld > index.html
  通过主配置/var/www/html加载网站资源文件(index.html)当文件存在,直接加载该文件内容进行相应。

4、关闭防火墙,selinux

window/linux 客户端主机

浏览器:url 网址 http://ip/1/index.html /var/www/html/1/index.html

权限控制

web服务程序资源文件的权限控制可以在配置文件和文件层级。

<Directory "/www">     目录起始标签  /www  
    AllowOverride None
    #Allow open access:
    Require all granted     请求所有允许  
</Directory>
[root@localhost ~]# chmod o-r /www/index.html
[root@localhost ~]# ll /www/index.html
-rw-r-----. 1 root root 13 Mar 20 09:58 /www/index.html
[root@localhost ~]# chmod o+r /www/index.html

https://httpd.apache.org/docs/2.4/howto/auth.html
require user tom
Require ip address
Require not  ip address
Require host domain_name
<Directory /openlab>
        AllowOverride none
        <RequireAll>
                Require all granted
                Require not  ip 192.168.153.128
        </RequireAll>
</Directory>

多网站访问
http://ip|域名|:80
https://

案例三:多ip匹配多网站

1、当前主机配置多个ip

[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses  192.168.153.128/24 ipv4.gateway 192.168.153.2 ipv4.dns 114.114.114.114 +ipv4.a
ddresses 192.168.153.129 +ipv4.addresses  192.168.153.130
[root@localhost ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@localhost ~]# ip a

2、通过配置基于多个虚拟主机标签配置多个网站站点

虚拟主机示例文件
# rpm -ql httpd | grep vhosts.conf
#  vim /usr/share/doc/httpd/httpd-vhosts.conf
1.自定义子配置文件,配置多主机网站信息
vim /etc/httpd/conf.d/vhosts.conf 
<VirtualHost 192.168.153.128:80>
    DocumentRoot "/openlab/128"
    ServerName 192.168.153.128
    ErrorLog "/var/log/httpd/dummy-128.example.com-error_log"
    CustomLog "/var/log/httpd/dummy-128.example.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.153.129:80>
    DocumentRoot "/openlab/129"
    ServerName 192.168.153.129
</VirtualHost>

<VirtualHost 192.168.153.130:80>
    DocumentRoot "/openlab/130"
    ServerName 192.168.153.130
</VirtualHost>
#资源路径的访问权限
<Directory /openlab>
        AllowOverride none
        Require all granted
</Directory>
2.根据配置创建对应资源文件
#mkdir /openlab/{128,129,130} -pv
#echo this is 128 > /openlab/128/index.html
#echo this is 129 > /openlab/129/index.html
#echo this is 130 > /openlab/130/index.html
#systemctl restart httpd

案例四: 基于多端口访问多网站

##130-80
<VirtualHost 192.168.153.130:80>
    DocumentRoot "/openlab/130"
    ServerName 192.168.153.130
</VirtualHost>
##130--10000    
Listen 10000   #监听自定义端口
<VirtualHost 192.168.153.130:10000>
    DocumentRoot "/openlab/10000"
    ServerName 192.168.153.130
</VirtualHost>
<Directory /openlab>
        AllowOverride none
        Require all granted
</Directory> 

[root@localhost ~]# mkdir /openlab/10000
[root@localhost ~]# echo this is 10000 > /openlab/10000/index.html
[root@localhost ~]# systemctl restart httpd     

测试:

案例五:基于域名访问多网站

<VirtualHost 192.168.153.128:80>
    DocumentRoot "/openlab/haha"
    ServerName www.haha.com
    ErrorLog "/var/log/httpd/dummy-128.example.com-error_log"
    CustomLog "/var/log/httpd/dummy-128.example.com-access_log" common
</VirtualHost>
<VirtualHost 192.168.153.128:80>
    DocumentRoot "/openlab/xixi"
    ServerName www.xixi.com
    ErrorLog "/var/log/httpd/dummy-128.example.com-error_log"
    CustomLog "/var/log/httpd/dummy-128.example.com-access_log" common
</VirtualHost>
<Directory /openlab>
        AllowOverride none
        Require all granted
</Directory> 
[root@localhost ~]# mkdir /openlab/{haha,xixi}
[root@localhost ~]# echo this is xixi > /openlab/xixi/index.html
[root@localhost ~]# echo this is haha > /openlab/haha/index.html
[root@localhost ~]# systemctl restart httpd

客户端测试

1.通过域名访问需要将域名解析为ip
	通过浏览器缓存匹配
	客户端主机的hosts文件匹配  
  		window:C:\Windows\System32\drivers\etc
							192.168.153.128         www.haha.com
							192.168.153.128         www.xixi.com                         
         linux :  /etc/hosts
	路由缓存记录匹配
	本地dns服务

排错方式

(1) 启动不成功(配置文件写的有问题)systemctl restart httpd  
[root@localhost ~]#systemctl status httpd
[root@localhost ~]# journalctl -xe
[root@localhost ~]# httpd -t

(2)访问的内容不是我们定义的内容
逻辑问题:分析主机配置标签是否能匹配或是否冲突
		资源文件是否创建
        匹配对应文件是否有权限
		防火墙,selinux

案例六:虚拟目录

alias 虚拟目录名称 真实目录路径

​ 为了便于对网站资源进行灵活管理,还可以把这些文件存放在本地计算机的其它文件夹中或者其它计算机的共享文件夹中,然后再把这个文件夹映射到网站主目录中的一个目录上,这个文件夹被称为“虚拟目录”。

每个虚拟目录都有一个别名,这样用户就可以通过这个虚拟目录的别名来访问与之对应的真实文件夹中的资源了。虚拟目录的好处是在不需要改变别名的情况下,可以随时改变其对应的文件夹。

<VirtualHost 192.168.153.128:80>
    DocumentRoot "/openlab/128"
    #  /网站根目录=/openlab/128
    Alias /file   /openlab/128/1/f/file/newfile/
    ServerName 192.168.153.128
        #  /openlab/128/3w
    Alias /3w     /www
</VirtualHost>
<Directory /openlab>
        AllowOverride none
        Require all granted
</Directory>
<Directory "/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>


[root@localhost ~]# mkdir -pv  /openlab/128/1/f/file/newfile/
mkdir: created directory '/openlab/128/1'
mkdir: created directory '/openlab/128/1/f'
mkdir: created directory '/openlab/128/1/f/file'
mkdir: created directory '/openlab/128/1/f/file/newfile/'
[root@localhost ~]# echo this is zijiemian > /openlab/128/1/f/file/newfile/index.html

[root@localhost ~]# mkdir /www
mkdir: cannot create directory ‘/www’: File exists
[root@localhost ~]# cd /www
[root@localhost www]# ll
total 4
-rw-r--r--. 1 root root 13 Mar 20 09:58 index.html
[root@localhost www]# echo this is 128 test page > index.html

案例七:用户访问控制+虚拟目录

<VirtualHost 192.168.153.128:80>
    DocumentRoot "/openlab/128"
       # /网站根目录=/openlab/128
    Alias /file   /openlab/128/1/f/file/newfile/
    ServerName 192.168.153.128
    Alias /3w     /www
</VirtualHost>
<Directory /openlab>
        AllowOverride none
        Require all granted
</Directory>
<Directory /www>
        AuthType Basic
        AuthName "Please login:"
        AuthuserFile /etc/httpd/userfile
        Require user tom zhangsan
</Directory>

[root@localhost www]# htpasswd -c /etc/httpd/userfile tom    
New password: 
Re-type new password: 
Adding password for user tom
[root@localhost www]# htpasswd /etc/httpd/userfile zhangsan
New password: 
Re-type new password: 
Adding password for user zhangsan

curl  http://192.168.153.128/3w/   -u tom

案例八:搭建加密网站

1.加载mod_ssl认证模块

[root@localhost www]# yum install mod_ssl -y

2.生成自签名证书

(第二种) [root@localhost ~]#cd /etc/pki/tls/certs
[root@localhost certs]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ../private/openlab.key  -x509 -days 365 -out openlab.crt

----------------------------------------------x509 key csr crt---------------------------
[root@www certs]# openssl genrsa -aes128 2048 > openlab.key
 (第三种) #openssl req -utf8 -new -key openlab.key -x509 -days 365 -out openlab.crt 
-------------------------------------------------------------------------------------

3.虚拟主机标签中添加加密验证信息

<VirtualHost 192.168.153.128:443>
    DocumentRoot "/ssl"
    ServerName 192.168.153.128
    SSLEngine on
	SSLCertificateFile /etc/pki/tls/certs/openlab.crt
	SSLCertificateKeyFile /etc/pki/tls/private/openlab.key
</VirtualHost>
<Directory /ssl>
​        AllowOverride none
​        Require all granted
</Directory>

4.重启服务测试

**案例九:扩展配置 **

1.通过http/https 实现文件共享
目录标签中 options +indexes
indexes 默认加载directoryindex 目录标签后,当目录directoryindex找不到对应网页文件(删除主路径下的index.html,以及欢迎界面)会加载mod_autoindex 会将网站主路径下的文件格式为目录列表提供客户端主机访问。

2.配置用户主界面---静态

1.更改用户主界面配置
vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
<Directory "/home/tom/public_html">
AuthType Basic
AuthName "please login"
AuthuserFile /etc/httpd/userfile
Require user tom
注意: 访问用户主界面通过什么协议访问
指定网站访问方式(ip)通过哪种协议可以匹配
2.创建资源信息
#useradd tom
#mkdir /home/tom/public_html
#echo this is tom > /home/tom/public_html/index.html
#chmod o+rx /home/tom
#htpasswd -c /etc/httpd/userfile tom
3.重启
4.firewalld setenfore

搭建动态网站
LAMP
1.linux平台部署web服务
2.配置web服务
(1).安装web服务
(2).根据配置定义加载网页资源文件的路径

[root@localhost uc_server]# cat /etc/httpd/conf.d/vhosts.conf
<Directory /www>
AllowOverride none
Require all granted
<Virtualhost 192.168.153.128:80>
DocumentRoot /www
ServerName 192.168.153.128

(3).根据配置创建资源文件

#mkdir /www
#cd /www  
#unzip Discuz_X3.4_SC_UTF8_20191201.zip

(4).重启服务

3.部署mariadb

[root@localhost install]# yum install mairadb-server -y
[root@localhost www]# systemctl start mariadb
[root@localhost www]# mysql_secure_installation 初始化数据库
enter
y
redhat
redhat
一直y
[root@localhost www]# mysql -uroot -predhat // -u用户名 -p密码
MariaDB [(none)]> create database luntan;
MariaDB [(none)]>quit
[root@localhost www]# systemctl restart mariadb

4.安装PHP应用程序

yum install php* -y
[root@localhost upload]# pwd
/www/upload
[root@localhost upload]# chmod o+w data config uc_* -R

NFS

1.NFS 网络文件系统(文件共享协议)
通过nfs服务器可以共享文件,客户端主机通过挂载方式访问共享文件。
2.挂载的特点:(文件访问)
通过客户端主机挂载点目录连接服务端共享的nfs文件系统,类似与所有文件都在本地,但实际上所有文
件都在服务端主机中,通过服务端主机可以控制客户某些主机可以访问该文件。
3.挂载方式:
1)临时挂载
2)开机自动挂载
3)自动挂载
一个挂载点可以同时连接多个文件系统(不推荐)注意:RHEL7.X 多个nfs文件系统不支持同时挂载到
一个挂载点目录,但RHEL8.x 多个nfs文件系统不支持同时挂载到一个挂载点目录,但通过挂载点访问的是最后一次连接的文件系统。
同一个文件系统可以挂载到多个挂载点目录。
4.nfs 文件共享的原理

5.nfs服务搭建
服务端
1)安装软件包rpcbind nfs-server
2)自定设置,编辑配置文件

vim /etc/exports
共享目录 允许访问的主机(参数,...)

ro rw
root_squash
no_root_squash
all_squash
anonuid=
anongid=
no_all_squash
sync
async
atime
noatime
  1. 创建资源文件
    创建共享主目录,以及主目录对于用户访问权限设置
    4)systemctl start nfs-server
    exportfs -ra
    5)防火墙 ,selinux
    客户端:linux
    1).showmount -e 服务端ip 查询服务主机共享文件系统
    2).挂载文件系统
    6.服务是否启动
    systemctl is-active httpd
systemctl status httpd
ps -aux | grep httpd
ss -tunlp | grep 2048
netstat -tunlp | grep httpd
lsof -i:80
rpcinfo -p

7.nfs优缺点

**案例:架设一台NFS服务器,并按照以下要求配置 **

1、开放/nfs/shared目录,供所有用户查询资料
2、开放/nfs/upload目录,为192.168.100.0/24网段主机可以上传目录,
并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210

3、将/home/tom目录仅共享给192.168.100.136这台主机,并只有用户tom可以完全访问该目录
autofs
能够动态管理文件系统,在系统需要该文件系统资源时,将文件系统动态挂载可以动态取消挂载。

1.安装自动挂载服务程序
yum install autofs -y
2.自定义触发条件,满足该条件后,将文件系统自动挂载
vim /etc/auto.master 主参数文件中定义挂载条件
#挂载点主目录 子参数文件(连接autofs文件系统)
/nfs /etc/auto.nfs
vim /etc/auto.nfs
#触发条件(挂载点目录) 文件系统名称
test 192.168.153.128:/test
3.加载参数
systemctl restart autofs
查看挂载点主目录是否自动创建
手动: cd /nfs cd test
自动触发:
mount /dev/sr0 /pub/sr0

**搭建web服务通过域名访问网站资源文件,网站资源文件通过nfs服务器共享个web服务端主机,提供用
户解析和查询 **

1.web服务器
yum install httpd
[root@localhost ~]# cat /etc/httpd/conf.d/vhosts.conf
<Directory /www/129>
AllowOverride none
Require all granted
<Virtualhost *:80>
DocumentRoot /www/129
ServerName 192.168.153.129

2、安装自动挂载服务程序
yum install autofs -y
vim /etc/auto.master
/www /etc/auto.web
vim /etc/auto.web
129 192.168.153.128:/test
systemctl restart autofs
yum install php*
yum install mariadb-server -y
systemctl restart mariadb
mysql_secure_installation
mysql -uroot -predhat
create database wordpress;
exit
systemctl start mairadb
systemctl restart httpd

3.nfs服务器 wordpress
#rpm -qa | grep nfs
#rpm -qa | grep rpcbind
#vim /etc/exports
#mkdir /test
#cd /test
通过xftp将wordpress包传到共享主目录/test#unzip wordpress-5.9.2.zip
#unzip wordpress-5.9.2.zip
[root@localhost test]# ll
total 19800
drwxr-xr-x. 5 root root 4096 Mar 10 19:39 wordpress
-rw-r--r--. 1 root root 20270503 Mar 27 04:30 wordpress-5.9.2.zip
[root@localhost test]# systemctl restart nfs-server
[root@localhost test]# systemctl stop firewalld
[root@localhost test]# setenforce 0
[root@localhost wordpress]# cp wp-config-sample.php wp-config.php

linux邮件客户端的配置

第三方邮件客户端程序验证能够通过linux主机将信件发送到外网邮件服务器。

yum install mailx -y

vim  /etc/mail.rc

set from=lxx1065372838@163.com      # 邮箱账号
set smtp=smtp.163.com                         #邮件服务器的主机名
set smtp-auth-user=lxx1065372838@163.com    # 邮箱账号
set smtp-auth-password=QUREDFYKLNBRAIAA   #授权码
set smtp-auth=login             

(1)#echo "邮件内容" | mail -s '邮件主题'     收件用户的邮箱账号

(2)#echo  邮件内容 > /a.txt

mail -s  '主题'  -a  /a.txt  收件用户的邮箱账号   <  /a.txt

nmcli

### 配置网卡冗余(主备)

#nmcli connection add type team ifname team0 con-name team0 config '{"runner":       {"name": "activebackup"}}

#nmcli connection add type  team-slave ifname ens224 con-name team0-port1 master team0

#nmcli connection add type team-slave  ifname ens256 con-name team0-port2 master team0

#nmcli connection show 

#nmcli con   up team0-port1

#nmcli con   up team0-port2

#teadctl team0   stat

#nmcli connection modify team0 ipv4.addresses 192.168.153.111/24   +ipv4.addresses 192.168.153.111/24ipv4.gateway 192.168.153.2  ipv4.dns 114.114.114.114 ipv4.method  manual  connection.autoconnect yes

## 桥接网卡

#nmcli connection add type bridge-slave   ifname ens160 con-name br1-port1 master br1
 #nmcli connection show 
 #nmcli connection up br1-port1

环境准备:

1、下载环境:

2、解压:100G左右

3、打开:

  • 方法一:双击RH294.vmx
  • 方法二:vmware打开RH294.vmx

4、远程连接:

  • 给win的虚拟网卡:VMware Network Adapter VMnet1增加一个ip:
    • ip:172.25.254.1/255.255.255.0,不需要网关
  • 远程连接:
    • IP:172.25.254.250 kiosk/redhat
    • root用户远程登录密码:Asimov
    • student:student

5、设置课程:考试和工作都不用

[kiosk@foundation0 ~]$ rht-setcourse rh294
/content/rhel8.0/x86_64/vms /home/kiosk
/home/kiosk
Course set to rh294

6、启动课程环境:

[kiosk@foundation0 ~]$ rht-vmctl status all
bastion DEFINED
workstation DEFINED
servera DEFINED
serverb DEFINED
serverc DEFINED
serverd DEFINED

[kiosk@foundation0 ~]$ rht-vmctl start classroom 
[kiosk@foundation0 ~]$ rht-vmctl start all 
Starting bastion.
Starting workstation.
Starting servera.
Starting serverb.
Starting serverc.
Starting serverd.

重置虚拟机:
[kiosk@foundation0 ~]$ rht-vmctl reset  all 
Are you sure you want to reset bastion workstation servera serverb serverc serverd? (y/n) y

查看状态:
[kiosk@foundation0 ~]$ rht-vmctl status all
bastion RUNNING
workstation RUNNING
servera RUNNING
serverb RUNNING
serverc RUNNING
serverd RUNNING
[kiosk@foundation0 ~]$ rht-vmctl status classroom 
classroom RUNNING

学会查看帮助:
[kiosk@foundation0 ~]$ rht-vmctl --help

This utility manages the Red Hat Training supplied VMs on the local
hypervisor.

Usage: rht-vmctl [-y|--yes] VMCMD VMNAME [DATETIME]
       rht-vmctl [-i|--inquire] VMCMD VMNAME [DATETIME]
       rht-vmctl -h|--help

  where VMCMD is one of:
    view       - launches console viewer of VMNAME
    start      - obtain and start up VMNAME
    stop       - stop a running VMNAME
    restart    - if running, stop then start VMNAME
    poweroff   - if running, force stop VMNAME
    reset      - poweroff, return to saved or original state, start VMNAME
    save       - stop, save image, start VMNAME (to DATETIME)
    restore    - poweroff, restore to save (to DATETIME), start VMNAME
    listsaves  - list the saves of VMNAME
    status     - display libvirt status of VMNAME
    get        - if not here, obtain VMNAME from server
    remove     - remove VMNAME from system
    fullreset  - poweroff, reobtain from server, start VMNAME (bad save/image)

  -i|--inquire - confirm each VMNAME first
  -y|--yes     - confirm nothing, just do it

  VMNAME of "all" processes all VMs available in the course

注意:重新开机之后,只需要执行rht-vmctl start all

练习环境:
[kiosk@foundation0 ~]$ ssh student@workstation
Warning: Permanently added 'workstation,172.25.250.9' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

[student@workstation ~]$

ansible后面的命令:自己去了解一下

student@master:~$ ansible-
ansible-community   ansible-connection  ansible-doc         ansible-inventory   ansible-pull        
ansible-config      ansible-console     ansible-galaxy      ansible-playbook    ansible-vault  

student@master:~/ansibleDemo$ ansible-inventory --list
{
    "_meta": {
        "hostvars": {}
    },
    "all": {
        "children": [
            "ungrouped"
        ]
    }
}

双网卡绑定team

堡垒机或跳板机

双网卡绑定:

  • 轮询:轮流响应用户请求。缺点:如果某一块网卡出现故障,可能会导致访问异常。
  • 主备:正常情况下,只有一个网卡工作。缺点:浪费了一块网卡资源。优点:高可用。
  • 负载均衡:流量分担。

扩展内容:

双网卡绑定:team

前提:需要俩块相同的类型的网卡

查看:

[root@master ~]# nmcli connection show
NAME   UUID                                  TYPE      DEVICE
ens33  4f0220d5-7ac9-456a-ba4a-852f14911ac7  ethernet  ens33

修改连接名:

[root@master ~]# nmcli connection modify ens33 con-name ens33

查看team配置:

[root@master yum.repos.d]# cd /usr/share/doc/teamd-1.29/example_configs/

配置:

1、创建team0设备和team0会话

[root@master example_configs]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'

2、配置team0地址信息

[root@master example_configs]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.11.100/24 ipv4.gatwag 192.168.11.2 ipv4.dns 114.114.114.114 autoconnect yes

3、添加设备到team0

[root@master example_configs]# nmcli connection add type team-slave con-name team0-1 ifname ens33 master team0
[root@master example_configs]# nmcli connection add type team-slave con-name team0-2 ifname ens34 master team0

4、激活设备

在虚拟机中去做,xshell会中断

[root@master example_configs]# nmcli connection up team0-1
[root@master example_configs]# nmcli connection up team0-2
[root@master example_configs]# nmcli connection up team0

5、查看

[root@master example_configs]# teamdctl team0 state

NFS服务器

案例一:共享/data目录给192.168.11.0/24整个网段可读可写

1、安装软件

[root@master ~]# yum install nfs-utils.x86_64  rpcbind.x86_64  -y

2、编写配置文件

[root@master ~]# cat /etc/exports
/data 192.168.11.0/24(rw,sync,no_root_squash)

3、创建目录

[root@master ~]# mkdir /data

4、测试

[root@master ~]# showmount -e
Export list for master.itcast.com:
/data 192.168.11.0/24

挂载:

  • 手动挂载:mount
  • 开机自动挂载:/etc/fstab
  • 按需挂载:autofs,使用时挂载,灵活

案例:配置autofs挂载光盘到/mnt/dvd

1、安装软件

[root@master ~]# yum install autofs.x86_64 -y

2、写配置文件

[root@master ~]# vim /etc/auto.master
上层目录 配置文件
/mnt /etc/auto.cdrom

[root@master ~]# cat /etc/auto.cdrom

dvd     -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

3、重启服务

[root@master ~]# systemctl enable --now autofs.service

4、测试

[root@master ~]# ls /mnt/

[root@master ~]# ll /mnt/dvd
total 1670
-rw-rw-r--. 1 root root      14 Jul 26  2022 CentOS_BuildTag
drwxr-xr-x. 3 root root    2048 Jul 26  2022 EFI
-rw-rw-r--. 1 root root     227 Aug 30  2017 EULA
-rw-rw-r--. 1 root root   18009 Dec 10  2015 GPL
drwxr-xr-x. 3 root root    2048 Jul 26  2022 images
drwxr-xr-x. 2 root root    2048 Jul 26  2022 isolinux
drwxr-xr-x. 2 root root    2048 Jul 26  2022 LiveOS
drwxr-xr-x. 2 root root 1671168 Jul 26  2022 Packages
drwxr-xr-x. 2 root root    4096 Jul 26  2022 repodata
-rw-rw-r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root    2883 Jul 27  2022 TRANS.TBL
[root@master ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.8M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.9G   16G  11% /
/dev/sda1               1014M  139M  876M  14% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/sr0                 9.6G  9.6G     0 100% /mnt/dvd

DNS服务器

unbound

1、安装unbound

[root@master ~]# yum install unbound -y

2、编辑配置文件,对全局参数进行配置

[root@master ~]# vim /etc/unbound/unbound.conf
        access-control: 192.168.11.0/24 allow
        username: ""
        domain-insecure: "openlab.edu"
 		include: /etc/unbound/local.d/*.conf

3、进入配置解析域

[root@master ~]# cd /etc/unbound/local.d/
[root@master local.d]# ls
block-example.com.conf
[root@master local.d]# more  block-example.com.conf
# entries in this file override toe global DNS
#
# Example blocking email going out to example.com
#
#       local-data: "example.com. 3600 IN MX 5 127.0.0.1"
#       local-data: "example.com. 3600 IN A 127.0.0.1"

# This can also be done dynamically using: unbound-control local-data [...]

# For more complicated redirection, use conf.d/ with stub-add: or forward-add:

4、配置正向解析记录和反向解析目录

[root@master local.d]# cat domain.conf
local-zone:"openlab.edu." static
local-data:"openlab.edu. 86400 IN SOA dns1.openlab.edu. root.openlab.edu 2023031501 1D 1H 1W 1H"
local-data:"dns1.openlab.edu. IN  A 192.168.11.121"
local-data:"www.openlab.edu. IN A  192.168.11.111"
local-data:"web.openlab.edu.IN CNAME www.openlab.edu."
local-data:"mail.openlab.edu. IN A 192.168.11.222"
local-data:"openlab.edu. IN MX 5 mail.openlab.edu."

# 反向解析
local-data-ptr:"192.168.11.121 dns1.openlab.edu"
local-data-ptr:"192.168.11.111 www.openlab.edu"
local-data-ptr:"192.168.11.111 web.openlab.edu"
local-data-ptr:"192.168.11.222 mail.openlab.edu"

5、配置转发

[root@master local.d]# vim /etc/unbound/unbound.conf
forward-zone:
        name: "."
        forward-addr:223.5.5.5

6、语法检测

[root@master local.d]# unbound-checkconf

7、重启服务

[root@master ~]# systemctl restart unbound

8、测试

客户端:
[root@master local.d]# yum install bind-utils.x86_64 -y

[root@master ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain itcast.com
nameserver 192.168.11.121

[root@master ~]#nslookup
> 192.168.11.121

bind---常用

1、安装软件

[root@master ~]# yum install bind -y

2、关闭防火墙或者放行DNS服务

[root@master ~]# firewall-cmd --permanent --add-service=dns
success
[root@master ~]# firewall-cmd --reload
success

3、修改配置文件

[root@master ~]# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.11.148; }; #修改这一行IP,注意分号
        //listen-on-v6 port 53 { ::1; }; # IPV6的,可以注释掉
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { 192.168.11.0/24; }; # 修改为本网段,或者用any

4、区域文件

[root@master ~]# vim /etc/named.rfc1912.zones # 路径在配置文件中有
正向解析:
zone "openlab.edu" IN {
        type master;
        file "openlab.edu.zone";
};

[root@master ~]# cd /var/named/
[root@master named]# ll
total 16
drwxrwx---. 2 named named    6 Jan 26 00:48 data
drwxrwx---. 2 named named    6 Jan 26 00:48 dynamic
-rw-r-----. 1 root  named 2253 Apr  5  2018 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named    6 Jan 26 00:48 slaves
[root@master named]# cp -a named.localhost  openlab.edu.zone #注意带权限修改
[root@master named]# vim openlab.edu.zone
[root@master named]# cat openlab.edu.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031601      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
        MX 5    mail.openlab.edu.
dns1    A       192.168.11.148
mail    A       192.168.11.222
www     A       192.168.11.111
web     CNAME   www

5、语法检测

# 7版本的语法:
[root@master named]# named-checkzone "openlab.edu" /var/named/openlab.edu.zone
zone openlab.edu/IN: loaded serial 2023031601
OK

6、重启服务

[root@master named]# systemctl enable --now named.service
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

7、客户端测试

安装bind-utils
[root@node01 ~]# yum install bind-utils.x86_64  -y
[root@node01 ~]# more /etc/resolv.conf
# Generated by NetworkManager
search localdomain itcast.com
nameserver 192.168.11.148

[root@node01 ~]# nslookup
> dns1.openlab.edu
Server:         192.168.11.148
Address:        192.168.11.148#53

Name:   dns1.openlab.edu
Address: 192.168.11.148
> www.openlab.edu
Server:         192.168.11.148
Address:        192.168.11.148#53

Name:   www.openlab.edu
Address: 192.168.11.111
> set type=cname
> web.openlab.edu
Server:         192.168.11.148
Address:        192.168.11.148#53

web.openlab.edu canonical name = www.openlab.edu.

正向解析成功接下来配置反向解析

1、修改主配置文件

[root@master ~]# vim /etc/named.rfc1912.zones # 路径在配置文件中有
zone "11.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.11.zone";
};

2、修改模板文件

[root@master named]# vim /etc/named.rfc1912.zones
[root@master named]# cp -a named.loopback 192.168.11.zone
[root@master named]# vim 192.168.11.zone
[root@master named]# cat 192.168.11.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031601      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
dns1.openlab.edu.       A       192.168.11.148
148     PTR     dns1.openlab.edu.
111     PTR     www.openlab.edu.
111     PTR     web.openlab.edu.
222     PTR     mail.openlab.edu.

3、语法检测+重启服务

[root@master named]# named-checkzone "openlab.edu" 192.168.11.zone
zone openlab.edu/IN: loaded serial 2023031601
OK
[root@master named]# systemctl restart named

4、测试

[root@node01 ~]# host -t PTR 192.168.11.148
148.11.168.192.in-addr.arpa domain name pointer dns1.openlab.edu.
[root@node01 ~]# nslookup
> 192.168.11.111
111.11.168.192.in-addr.arpa     name = www.openlab.edu.
111.11.168.192.in-addr.arpa     name = web.openlab.edu.

主从DNS服务器

区域完全传送(主从DNS)

需要俩台DNS服务器:master slave

M:192.168.11.148

S:192.168.11.138

主服务器配置

1、主配置文件

添加允许传送的从服务器,allow-transfer { address_match_elment;...};

[root@master named]# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.11.148; };
        //listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { 192.168.11.0/24; };
        allow-transfer { 192.168.11.138;}; # 添加从服务器地址

2、数据文件

[root@master named]# cat openlab.edu.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031602      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
        NS      dns2.openlab.edu.
        MX 5    mail.openlab.edu.
dns1    A       192.168.11.148
dns2    A       192.168.11.138
mail    A       192.168.11.222
www     A       192.168.11.111
web     CNAME   www


[root@master named]# cat 192.168.11.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031602      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
        NS      dns2.oppenlab.edu.
dns1.openlab.edu.       A       192.168.11.148
dns2.openlab.edu.       A       192.168.11.138
148     PTR     dns1.openlab.edu.
138     PTR     dns2.openlab.edu.
111     PTR     www.openlab.edu.
111     PTR     web.openlab.edu.
222     PTR     mail.openlab.edu.

3、语法检测

[root@master named]# named-checkzone "openlab.edu" 192.168.11.zone
zone openlab.edu/IN: loaded serial 2023031602
OK

[root@master named]# named-checkzone "openlab.edu" openlab.edu.zone
zone openlab.edu/IN: loaded serial 2023031602
OK

4、重启服务

[root@master named]# systemctl restart named

从服务器配置

1、安装软件

[root@node02 ~]# yum install bind -y

2、主配置文件

[root@node02 ~]# vim /etc/named.conf
options {
        listen-on port 53 { 192.168.11.138; }; # 指向自己的IP
        //listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     {192.168.11.0/24; }; # 指向网段即可

3、数据文件

[root@node02 ~]# vim /etc/named.rfc1912.zones
zone "openlab.edu" IN {
        type slave;
        file "slaves/opnlab.edu.zone";
        masters {192.168.11.148;};
}; 
zone "11.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.11.zone";
        masters {192.168.11.148;};
};

4、语法检测

[root@node02 ~]# named-checkconf

5、测试

[root@node02 ~]# firewall-cmd --permanent --add-service=dns
success
[root@node02 ~]# firewall-cmd --reload
success
[root@node02 ~]# systemctl enable --now named.service
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

[root@node02 ~]# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 508 Mar 16 14:25 192.168.11.zone
-rw-r--r--. 1 named named 475 Mar 16 14:25 opnlab.edu.zone

# 可以在本机上测试
[root@node02 ~]# nslookup
> server 192.168.11.138
Default server: 192.168.11.138
Address: 192.168.11.138#53
> www.openlab.edu
Server:         192.168.11.138
Address:        192.168.11.138#53

Name:   www.openlab.edu
Address: 192.168.11.111
> 192.168.11.111
111.11.168.192.in-addr.arpa     name = www.openlab.edu.
111.11.168.192.in-addr.arpa     name = web.openlab.edu.

区域增量传送(主从DNS)

[root@master named]# cat openlab.edu.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031603      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
        NS      dns2.openlab.edu.
        MX 5    mail.openlab.edu.
dns1    A       192.168.11.148
dns2    A       192.168.11.138
mail    A       192.168.11.222
www     A       192.168.11.111
web     CNAME   www
ftp     A       192.168.11.112
[root@master named]# cat 192.168.11.zone
$TTL 1D
@       IN SOA  dns1.openlab.edu. admin.openlab.edu. (
                                        2023031603      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1.openlab.edu.
        NS      dns2.oppenlab.edu.
dns1.openlab.edu.       A       192.168.11.148
dns2.openlab.edu.       A       192.168.11.148
148     PTR     dns1.openlab.edu.
138     PTR     dns2.openlab.edu.
111     PTR     www.openlab.edu.
111     PTR     web.openlab.edu.
222     PTR     mail.openlab.edu.
112     PTR     ftp.openlab.edu.

重启服务

[root@master named]# systemctl restart named.service

测试

[root@node02 named]# nslookup ftp.openlab.edu 192.168.11.138
Server:         192.168.11.138
Address:        192.168.11.138#53

Name:   ftp.openlab.edu
Address: 192.168.11.112

[root@node02 named]# nslookup 192.168.11.148  192.168.11.138
148.11.168.192.in-addr.arpa     name = dns1.openlab.edu.

web服务器

1、安装软件

[root@node01 ~]# yum install httpd -y

2、设置为开机自启动

[root@node01 ~]# systemctl enable --now httpd

3、查看状态

[root@node01 ~]# systemctl status httpd

4、查看进程

[root@node01 ~]# ps -ef | grep httpd
root        2447       1  0 15:57 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root        2521    2146  0 15:58 pts/2    00:00:00 grep --color=auto httpd

5、查看端口

[root@node01 ~]# netstat -lntup | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      2447/httpd
[root@node01 ~]# ss -lntup | grep 80
tcp   LISTEN 0      128                *:80              *:*    users:(("httpd",pid=2573,fd=4),("httpd",pid=2572,fd=4),("httpd",pid=2571,fd=4),("httpd",pid=2447,fd=4))

6、关闭防火墙或者放行服务

[root@node01 ~]# firewall-cmd --permanent --add-service=http
success
[root@node01 ~]# firewall-cmd --reload
success

7、默认测试

8、默认测试路径

[root@node01 ~]# echo "欢迎来我的web页面" > /var/www/html/index.html
[root@node01 ~]# curl 192.168.11.104
欢迎来我的web页面

虚拟目录别名

1、创建虚拟目录存放位置及虚拟目录默认首页文件

[root@node01 ~]# mkdir /openlab/xxgc -p
[root@node01 ~]# cat /var/www/html/index.html
欢迎访问信息工程系主页!

2、创建、编辑虚拟目录子配置文件

[root@node01 ~]# cat /etc/httpd/conf.d/vdir.conf
Alias /xxgcx "/openlab/xxgc"
<Directory "/openlab/xxgc">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

3、语法检测+重启服务

[root@node01 ~]# httpd -t
Syntax OK
[root@node01 ~]# setenforce 0
[root@node01 ~]# systemctl restart httpd.service

4、测试页面

虚拟主机

三类:

  • 基于IP:一台服务器申请多个IP
  • 基于端口:同一个IP,不同的端口
  • 基于域名:使用同样的IP,同样的端口,不同的域名

如何配?

安装一个在线帮助文档,查看帮助配置

[root@node01 ~]# yum install httpd-manual -y
[root@node01 ~]# systemctl restart httpd.service

基于IP

1、创建目录,准备测试页面

[root@node01 ~]# mkdir -p /openlab/{news,blog,bbs}
[root@node01 ~]# echo "新闻测试页!" > /openlab/news/index.html

[root@node01 ~]# echo "blog测试页!" > /openlab/blog/index.html

[root@node01 ~]# echo "bbs测试页!" > /openlab/bbs/index.html

2、给网卡添加IP,绑定对应的测试页面

news:192.168.11.104
blog:192.168.11.110
bbs:192.168.11.120
[root@node01 ~]# nmcli connection modify ens160 +ipv4.addresses 192.168.11.110/24
[root@node01 ~]# nmcli connection modify ens160 +ipv4.addresses 192.168.11.120/24
[root@node01 ~]#
[root@node01 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:6b:0b:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.110/24 brd 192.168.11.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.11.120/24 brd 192.168.11.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.11.104/24 brd 192.168.11.255 scope global secondary dynamic noprefixroute ens160
       valid_lft 1796sec preferred_lft 1796sec
    inet6 fe80::20c:29ff:fe6b:b72/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

3、配置虚拟主机

[root@node01 ~]# cd /etc/httpd/conf.d/
[root@node01 conf.d]#
[root@node01 conf.d]# ls
autoindex.conf  manual.conf  README  userdir.conf  vdir.conf  welcome.conf
[root@node01 conf.d]# vim VirtualHost.conf
[root@node01 conf.d]# cat VirtualHost.conf
<Directory "/openlab/">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>	

<VirtualHost 192.168.11.104:80>
    DocumentRoot "/openlab/news/"
    ServerName news.openlab.edu
    ErrorLog "/openlab/news/error_log"
    CustomLog "/openlab/news/access_log" combined
</VirtualHost>

<VirtualHost 192.168.11.110:80>
    DocumentRoot "/openlab/blog/"
    ServerName blog.openlab.edu
    ErrorLog "/openlab/blog/error_log"
    CustomLog "/openlab/blog/access_log" combined
</VirtualHost>



<VirtualHost 192.168.11.120:80>
    DocumentRoot "/openlab/bbs/"
    ServerName bbs.openlab.edu
    ErrorLog "/openlab/bbs/error_log"
    CustomLog "/openlab/bbs/access_log" combined
</VirtualHost>

4、语法检测+重启服务

[root@node01 conf.d]# httpd -t
Syntax OK
[root@node01 conf.d]# systemctl restart httpd.service

5、测试

6、恢复环境

[root@node01 conf.d]# nmcli connection modify ens160 -ipv4.addresses 192.168.11.120/24
[root@node01 conf.d]# nmcli connection modify ens160 -ipv4.addresses 192.168.11.110/24
[root@node01 conf.d]# nmcli connection up ens160

基于端口

1、修改配置文件

[root@node01 conf.d]# cat VirtualHost.conf
<VirtualHost 192.168.11.104:80>
    DocumentRoot "/openlab/news/"
    ServerName news.openlab.edu
    ErrorLog "/openlab/news/error_log"
    CustomLog "/openlab/news/access_log" combined
</VirtualHost>

<VirtualHost 192.168.11.104:81>
    DocumentRoot "/openlab/blog/"
    ServerName blog.openlab.edu
    ErrorLog "/openlab/blog/error_log"
    CustomLog "/openlab/blog/access_log" combined
</VirtualHost>



<VirtualHost 192.168.11.104:82>
    DocumentRoot "/openlab/bbs/"
    ServerName bbs.openlab.edu
    ErrorLog "/openlab/bbs/error_log"
    CustomLog "/openlab/bbs/access_log" combined
</VirtualHost>

<Directory "/openlab/">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>
Listen 81
Listen 82

2、重启服务 + 关闭防火墙 +selinux

[root@node01 conf.d]# systemctl restart httpd.service
[root@node01 conf.d]# systemctl stop firewalld.service
[root@node01 conf.d]# setenforce 0
[root@node01 conf.d]# systemctl restart httpd.service
[root@node01 conf.d]# ss -lntup | grep 81
tcp   LISTEN 0      128                *:81              *:*    users:(("httpd",pid=39951,fd=9),("httpd",pid=39601,fd=9),("httpd",pid=39600,fd=9),("httpd",pid=39599,fd=9),("httpd",pid=39476,fd=9))
[root@node01 conf.d]# ss -lntup | grep 82
tcp   LISTEN 0      128                *:82              *:*    users:(("httpd",pid=39951,fd=11),("httpd",pid=39601,fd=11),("httpd",pid=39600,fd=11),("httpd",pid=39599,fd=11),("httpd",pid=39476,fd=11))
[root@node01 conf.d]# ss -lntup | grep 80
tcp   LISTEN 0      128                *:80              *:*    users:(("httpd",pid=39951,fd=4),("httpd",pid=39601,fd=4),("httpd",pid=39600,fd=4),("httpd",pid=39599,fd=4),("httpd",pid=39476,fd=4))

3、测试

基于域名

1、修改配置文件

[root@node01 conf.d]# cat VirtualHost.conf
<VirtualHost 192.168.11.104:80>
    DocumentRoot "/openlab/news/"
    ServerName news.openlab.edu
    ErrorLog "/openlab/news/error_log"
    CustomLog "/openlab/news/access_log" combined
</VirtualHost>

<VirtualHost 192.168.11.104:80>
    DocumentRoot "/openlab/blog/"
    ServerName blog.openlab.edu
    ErrorLog "/openlab/blog/error_log"
    CustomLog "/openlab/blog/access_log" combined
</VirtualHost>



<VirtualHost 192.168.11.104:80>
    DocumentRoot "/openlab/bbs/"
    ServerName bbs.openlab.edu
    ErrorLog "/openlab/bbs/error_log"
    CustomLog "/openlab/bbs/access_log" combined
</VirtualHost>

<Directory "/openlab/">
    AllowOverride None
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

2、重启服务

[root@node01 conf.d]# systemctl restart httpd.service

3、没有DNS情况下修改hosts文件

[root@node01 conf.d]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.11.104 news.openlab.edu blog.openlab.edu bbs.openlab.edu

4、测试

[root@node01 conf.d]# curl news.openlab.edu
新闻测试页!
[root@node01 conf.d]# curl blog.openlab.edu
blog测试页!
[root@node01 conf.d]# curl bbs.openlab.edu
bbs测试页!

个人页面网站

1、修改redhat权限

[root@node01 conf.d]# cd /home/redhat/
[root@node01 redhat]# chmod 711 /home/redhat/

2、创建public_html目录

[root@node01 redhat]# mkdir public_html

3、写index.html默认页面

[root@node01 redhat]# echo "这是redhat个人测试页面" > public_html/index.html

4、关闭防火墙和selinux

[root@node01 redhat]# systemctl is-active firewalld.service
inactive
[root@node01 redhat]# getenforce
Permissive

5、修改配置文件

[root@node01 conf.d]# vim userdir.conf
<IfModule mod_userdir.c>
    #UserDir disabled
    UserDir public_html
</IfModule>

6、语法检测+重启服务

[root@node01 conf.d]# httpd -t
Syntax OK
[root@node01 conf.d]# systemctl restart httpd.service

加密解密

案例:基于https的静态站点

第一阶段:制作CA根证书

1、制作CA秘钥

操作过程:设置CA秘钥口令(123456)

[root@node01 httpd]# mkdir /etc/httpd/ssl
[root@node01 httpd]# cd /etc/httpd/ssl/
[root@node01 ssl]# openssl genrsa -des3 -out ca.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
............+++++
............................................................................................................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

2、制作CA根证书申请

[root@node01 ssl]# openssl req -new -key ca.key  -out ca.csr
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SX
Locality Name (eg, city) [Default City]:Sx
Organization Name (eg, company) [Default Company Ltd]:openlab
Organizational Unit Name (eg, section) []:openlab
Common Name (eg, your name or your server's hostname) []:tom
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3、生成根签名证书

[root@node01 ssl]# openssl x509 -req -days 3650 -signkey ca.key -in ca.csr -out ca.crt
Signature ok
subject=C = CN, ST = SX, L = Sx, O = openlab, OU = openlab, CN = tom
Getting Private key
Enter pass phrase for ca.key:

[root@node01 ssl]# ls
ca.crt  ca.csr  ca.key

第二阶段:制作服务器证书

1、制作服务器秘钥

[root@node01 ssl]# openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..........................................................................................+++++
..................................+++++
e is 65537 (0x010001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

2、制作服务器证书签名申请

[root@node01 ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SC
Locality Name (eg, city) [Default City]:cd
Organization Name (eg, company) [Default Company Ltd]:it
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:www.it.edu
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3、签署证书

[root@node01 ssl]# openssl x509 -req -days 3560 -CA ca.crt -CAkey ca.key  -CAcreateserial -in server.csr -out server.crt
Signature ok
subject=C = CN, ST = SC, L = cd, O = it, OU = it, CN = www.it.edu
Getting CA Private Key
Enter pass phrase for ca.key:
[root@node01 ssl]# ls
ca.crt  ca.csr  ca.key  ca.srl  server.crt  server.csr  server.key

4、配置虚拟主机

[root@node01 ssl]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:443>
DocumentRoot /var/www/web
ServerName www.openlab.edu
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!IDEA
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
SSLCertificateChainFile  /etc/httpd/ssl/ca.crt
</VirtualHost>

5、测试页面

[root@node01 ~]# mkdir /var/www/web
[root@node01 ~]# echo "https测试页面!..."> /var/www/web/index.html

6、重启服务

[root@node01 ssl]# systemctl restart httpd.service
Enter TLS private key passphrase for www.openlab.edu:443 (RSA) : ******

image-20230317091124090

LAMP环境

1、安装软件

[root@node01 ~]# yum install httpd mariadb-server php  php-gd php-mysqlnd.x86_64  -y

2、测试环境

Apache和php协同

[root@node01 ~]# cd /var/www/html/
[root@node01 html]# vim phpinfo.php
[root@node01 html]# cat phpinfo.php
<?php
phpinfo();
?>
[root@node01 html]# systemctl enable --now httpd php-fpm.service

image-20230317092554688

php与mariadb协同

启动数据库

[root@node01 html]# systemctl enable --now mariadb

初始安全设置

[root@node01 html]# mysql_secure_installation

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

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, 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):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

测试php数据库

[root@node01 html]# cat php_mysql.php
<?php
$con = new Mysqli("localhost","root","123456");
if ($con->connect_error)
  {
  die('Could not connect: ' . $con->connect_error);
  }
else{
echo "Success!";
}
// some code
mysql_close($con);
?>

image-20230317093918211

测试完毕!删除这俩个文件!

3、部署php应用

博客 论坛 门户网站

1> 上传软件

2> 解压到指定目录

3> 修改权限

4> 向导安装

FTP服务器

服务端:

1、安装软件

[root@node01 ~]# yum install vsftpd.x86_64 -y

2、重启服务

[root@node01 ~]# systemctl restart vsftpd.service

3、查看状态

[root@node01 ~]# systemctl status vsftpd.service

4、查看端口

[root@node01 ~]# ss -lntup | grep ftp
tcp   LISTEN 0      32                 *:21              *:*    users:(("vsftpd",pid=2669,fd=3))

5、放行服务

[root@node01 ~]# firewall-cmd --permanent --add-service=ftp
success
[root@node01 ~]# firewall-cmd --reload
success
[root@node01 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client ftp ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

6、修改主配置文件

[root@node01 ~]# vim /etc/vsftpd/vsftpd.conf
#anonymous_enable=NO
anonymous_enable=yes

[root@node01 ~]# systemctl restart vsftpd.service

客户端

1、安装软件

[root@node02 ~]# yum install ftp.x86_64  lftp -y

2、连接

[root@node02 ~]# ftp 192.168.11.104
Connected to 192.168.11.104 (192.168.11.104).
220 (vsFTPd 3.0.3)
Name (192.168.11.104:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>bye


[root@node02 ~]# lftp 192.168.11.104
lftp 192.168.11.104:~> user ftp
Password:
lftp ftp@192.168.11.104:~> ls
drwxr-xr-x    2 0        0               6 Apr 22  2021 pub
lftp ftp@192.168.11.104:/> exit

案例:扩展学校的FTP服务器

1、建立用于维护网站的禁止登录且家目录为/var/www/web1的用户user1 设置用户密码 创建用于测试的文件

[root@node01 ~]# mkdir -p /var/www/web1
[root@node01 ~]# echo "www.openlab.edu" > /var/www/web1/本地用户访问ftp.txt
[root@node01 ~]# chmod -R 757 /var/www/web1/

[root@node01 ~]# useradd user1 -s /bin/bash

[root@node01 ~]# echo 123456 | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@node01 ~]# chown -R user1 /var/www/web1/

[root@node01 ~]# ll -d /var/www/web1/
drwxr-xrwx. 2 user1 root 39 Mar 18 14:23 /var/www/web1/

2、编辑主配置文件 重启服务

[root@node01 ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=YES
anonymous_enable=NO
local_root=/var/www/web1
write_enable=YES
local_umask=022
connect_from_port_20=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
[root@node01 ~]# systemctl restart vsftpd.service

3、建立/etc/vsftpd/chroot_list文件,锁定用户

[root@node01 ~]# cat /etc/vsftpd/chroot_list
user1

4、测试

[root@node02 ~]# ftp 192.168.11.104
Connected to 192.168.11.104 (192.168.11.104).
220 (vsFTPd 3.0.3)
Name (192.168.11.104:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

案例:配置一个虚拟用户访问ftp

本地用户user2

虚拟用户z3 l4

虚拟用户目录:

z3 /ftp/public 下载

l4 /var/www/web2 上传下载

1、创建虚拟用户对应的本地用户及目录

[root@node01 ~]# useradd user2 -s /sbin/nologin
[root@node01 ~]# mkdir -p /ftp/public /var/www/web2
[root@node01 ~]# echo "test file "> /ftp/public/f1.txt
[root@node01 ~]# echo "test file "> /var/www/web2/f1.txt
[root@node01 ~]# chown user2 /var/www/web2/ /ftp/public/
[root@node01 ~]# chmod  -R 755 /var/www/web2/ /ftp/public/

2、创建虚拟用户文件

[root@node01 ~]# cat /etc/vsftpd/vuser.list
z3
123
l4
456

3、转换虚拟用户文件

[root@node01 ~]# db_load -T -t hash -f /etc/vsftpd/vuser.list  /etc/vsftpd/vuser.db
[root@node01 ~]# chmod 600 /etc/vsftpd/vuser.*

4、创建用户用户登录时的PAM文件

[root@node01 ~]# cd /etc/pam.d/
[root@node01 pam.d]# cp -p vsftpd vuser.vu
[root@node01 pam.d]# vim vuser.vu
[root@node01 pam.d]# cat vuser.vu
#%PAM-1.0
auth    sufficient      pam_userdb.so   db=/etc/vsftpd/vuser
account sufficient      pam_userdb.so   db=/etc/vsftpd/vuser
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

5、修改配置文件

[root@node01 ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO //禁止匿名登录
local_enable=YES //允许本地用户模式,由于映射的系统用户为本地用户,因此此项必须开启
guest_enable=YES //开启虚拟用户模式
guest_username=user2 //指定虚拟用户账号映射到本地账号vftp
pam_service_name=vuser.vu //指定pam文件
chroot_local_user=YES //禁锢用户在其家目录
allow_writeable_chroot=YES //允许禁锢的FTP根目录可写
user_config_dir=/etc/vsftpd/vconfig //指定虚拟用户的权限配置目录
userlist_enable=YES
userlist_deny=YES
virtual_user_local_privs=YES

6、虚拟用户配置专用文件

[root@node01 ~]# mkdir  -p /etc/vsftpd/vconfig

[root@node01 ~]# cat /etc/vsftpd/vconfig/z3
local_root=/ftp/public/
anno_world_readable_only=YES
write_enable=NO
anno_max_rate=500000

[root@node01 ~]# cat /etc/vsftpd/vconfig/l4
local_root=/var/www/web2/
write_enable=YES
anno_upload_enable=YES
anno_mkdir_wirte_enable=YES
anno_other_write_enable=YES
anno_max_rate=500000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[架构之路-168]-《软考-系统分析师》-4-据通信与计算机网络-4/5- 常见网络设备与网络工程

目录 4 . 4 网络互连与常用设备 1 . 网络互连设备 2 . 交换技术 3 . 路由技术 4 . 5 网络工程 4.5.1 网络规划&#xff08;要做什么&#xff1f;打算怎么做&#xff1f; 什么时间做&#xff1f;&#xff09; 1 . 网络需求分析 2 . 可行性研究 3 . 对现有网络的分析与描…

【Dom获取属性操作】JavaScript 全栈体系(十)

Web APIs 第四章 操作元素属性 一、操作元素常用属性 还可以通过 JS 设置/修改标签元素属性&#xff0c;比如通过 src更换 图片最常见的属性比如&#xff1a; href、title、src 等语法&#xff1a; 对象.属性 值 <!DOCTYPE html> <html lang"en">&…

【c#串口通信(4)】串口调试助手的使用

前言: 关于本文中使用到的串口助手工具,订阅专栏后,加入vip群,即可在群文件免费下载 1、打开串口 1.1 选择端口号 在下图的箭头所指处,选择下拉框中你想打开的串口,因为我之前使用虚拟串口工具虚拟了COM1、COM3,所以我可以先选择COM2 1.2 设置好参数 1.2.1 波特率:…

Python数据结构与算法篇(九)--单调栈与单调队列

1 单调栈 1.1 介绍 栈&#xff08;stack&#xff09;是很简单的一种数据结构&#xff0c;先进后出的逻辑顺序&#xff0c;符合某些问题的特点&#xff0c;比如说函数调用栈。 单调栈实际上就是栈&#xff0c;只是利用了一些巧妙的逻辑&#xff0c;使得每次新元素入栈后&#x…

rhcse中配置DNS的正反向解析

实验一 正向解析 服务端ip 192.168.9.30 客户端ip 192.168.9.31 网址 www.openlab.com 安装DNS软件 服务端 [rootlocalhost ~]# yum install bind -y 客户端与服务端相同 编辑DNS主配置文件 修改其中的11和19行 listen-on port 53 { any; }; allow-query { a…

homeassistant配置MQTT集成以及传感器实体(STM32连接进入homeassistant)

大家可以看作者的小破站教学视频&#xff08;如果喜欢的话可以点个关注&#xff0c;给个三联&#xff01;啊哈哈哈哈哈哈&#xff09;&#xff1a; 【homeassistant配置MQTT集成以及传感器实体&#xff08;STM32连接进入homeassistant&#xff09;】 最近homeassistan更新之后…

Python VTK计算曲面的高斯曲率和平均曲率

introduction&#xff1a; Python VTK计算曲面的高斯曲率和平均曲率&#xff0c;如何使用户Python版本的VTK计算曲面的高斯曲率并映射在曲面上。使用了两个不同的表面&#xff0c;每个表面根据其高斯曲率和平均曲率着色. Display: Step: 本文介绍了 如何使用户Python版本的V…

什么是软件开发脚手架?为什么需要脚手架?常用的脚手架有哪些?

什么是软件开发脚手架&#xff1f;为什么需要脚手架&#xff1f;常用的脚手架有哪些&#xff1f; 微服务本身是一种架构风格&#xff0c;也是指导组织构建软件的一系列最佳实践集合。然而&#xff0c;业务团队在拆分应用后&#xff0c;会产生更多细粒度服务&#xff0c;并面临…

基于LINUX实现ping发送与接收

作用 Linux ping 命令用于检测主机&#xff1a;执行 ping 会使用 ICMP 传输协议&#xff0c;发出要求回应的信息&#xff0c;若远端主机的网络功能没有问题&#xff0c;就会回应该信息&#xff0c;因而得知该主机运作正常。 基础使用 #ping 192.168.1.1//ping 主机ip#ping -…

【项目】视频列表滑动,自动播放

自动播放 期望效果&#xff0c;当滑动列表结束后&#xff0c;屏幕中间的视频自动播放HTML页面data变量实践操作&#xff01;重点来了&#xff01;滚动获得的数据实现效果源码&#xff08;粘贴即可运行&#xff09; 期望效果&#xff0c;当滑动列表结束后&#xff0c;屏幕中间的…

C. Anna, Svyatoslav and Maps(floyd + 思维)

Problem - C - Codeforces 给你一个有n个顶点的无权图&#xff0c;以及由m个顶点的序列p1,p2,...,pm给出的路径&#xff08;该路径不一定简单&#xff09;&#xff1b;对于每个1≤i<m&#xff0c;有一个弧从pi到pi1。 如果v是p的子序列&#xff0c;v1p1&#xff0c;vkpm&a…

重学Java设计模式-行为型模式-命令模式

重学Java设计模式-行为型模式-命令模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-21-重学 Java 设计模式《实战命令模式》.html#重学-java-设计模式-实战命令模式「模拟高档餐厅八大菜系-小二点单厨师烹饪场景」 命令模式介绍 图片来自&a…

后端查询到数据,前端显示该数据为null

问题展示&#xff1a; 数据库可视化界面。我们要展示record属性里面的值。 前端form表单&#xff1a; 后端属性&#xff1a; 后端sql语句&#xff1a; 接下来我们查询订单详情&#xff0c;ID8的订单。 后端控制台&#xff1a; 我们明显的看到&#xff0c;record这个属…

CSS选择器进阶1.2

一&#xff0c;复合选择器 1.1后代选择器&#xff1a;Space 作用&#xff1a;根据HTML标签的嵌套关系&#xff0c;选择父元素后代中满足条件的元素。 选择器语法&#xff08;选择器1为父选择器&#xff0c;选择器2为后代选择器&#xff09;&#xff1a; 选择器1 选择器2{CSS…

【HTML5】HTML5 语义化标签 ( HTML5 简介 | 新增特性 | 语义化标签及代码示例 )

文章目录 一、HTML5 简介二、HTML5 语义化标签三、HTML5 语义化标签代码示例 一、HTML5 简介 HTML5 指的是 对 HTML 语言的第五次重大修改 , 新增了新的元素 / 属性 / 行为 ; HTML5 新增的特性 : 语义特性本地存储特性设备兼容特性连接特性网页多媒体特性三维特性图形及特效特…

故障重现, JAVA进程内存不够时突然挂掉模拟

背景&#xff0c;服务器上的一个JAVA服务进程突然挂掉&#xff0c;查看产生了崩溃日志&#xff0c;如下&#xff1a; # Set larger code cache with -XX:ReservedCodeCacheSize # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:26…

什么是跳表?

文章目录文章目的注意事项1.什么是跳表-skiplist2.skiplist的效率如何保证&#xff1f;2.1 一个节点的平均层数3. skiplist的实现文章目的 让你知道什么是跳表,梳理跳表跳表的设计思路及实现 注意事项 下面有数学公式,需要数学功底,只要弄清楚用来干嘛就行有兴趣的人可以了解…

FVCOM模型数值模拟流域、海洋水动力、水环境,解决水交换及污染物扩散问题、溢油及物质输运问题

目录 FVCOM流域、海洋水环境数值模拟方法及实践技术应用 第一章、FVCOM水动力相关理论 第二章、Linux系统下FVCOM运行环境搭建 第三章、FVCOM三维水动力数值模拟前处理 第四章、FVCOM三维水动力数值模拟 第五章、FVCOM三维水动力计算结果可视化及率定方法 第六章、FVCOM…

算法的空间复杂度

空间复杂度也是一个数学表达式&#xff0c;是对一个算法在运行过程中临时占用存储空间大小的量度 空间复杂度不是程序占用了多少bytes的空间&#xff0c;因为这个也没太大意义 所以空间复杂度算的是变量的个数 空间复杂度计算规则基本跟实践复杂度类似&#xff0c;也使用大O渐进…

Ajax详解

1、什么是Ajax ajax 全名 async javascript and XML是前后台交互的能力也就是我们客户端给服务端发送消息的工具&#xff0c;以及接受响应的工具是一个 默认异步 执行机制的功能。 2、 AJAX 的优势 不需要插件的支持&#xff0c;原生 js 就可以使用用户体验好&#xff08;不…