sudo、PAM、ntp、DNS解析、防火墙规则配置以及mysql基础知识
1、SUDO,PAM配置规范说明
1.1 SUDO配置规范说明
sudo
即superuser do
,允许普通用户执行一些或者全部的root命令。实现的过程:
- 超级用户将普通用户的名称、要执行的命令以及以什么身份执行,配置在
/etc/sudoers
文件中。- 普通用户获得权限后执行命令时需在前面加上
sudo
,就可以执行授权后的命令了,执行时会询问该用户的密码(为了确认是否该用户本人操作,五分钟之内再次执行sudo,不会再询问密码),密码正确就会执行该命令了。
配置文件格式说明:/etc/sudoers
, /etc/sudoers.d/
配置文件中支持使用通配符 glob
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
配置文件规则有两类:
- 1、别名定义:不是必须的
- 2、授权规则:必须的
sudoers 授权规则格式:
用户 登入主机=(代表用户) 命令
user host=(runas) command
#格式说明
user: 运行命令者的身份
host: 通过哪些主机,可以设定特定的主机ip让其具有权限
(runas):以哪个用户的身份
command: 运行哪些命令,需要绝对路径
示例:给lgq用户挂载权限
[19:45:34 root@rocky ~]$ visudo /etc/sudoers
...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lgq ALL=(root) /usr/bin/mount,/usr/bin/umount #添加这一行授权规则
...
#挂载
[19:49:44 lgq@rocky ~]$ sudo mount /dev/cdrom /mnt/
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for lgq:
mount: /mnt: WARNING: device write-protected, mounted read-only.
[19:50:31 lgq@rocky ~]$ ls /mnt/
AppStream BaseOS EFI images isolinux LICENSE media.repo TRANS.TBL
#卸载
[19:51:21 lgq@rocky ~]$ sudo umount /mnt #这次没有输入密码是因为sudo机制在距离上一次五分钟之内,不用重复输入密码
[19:51:57 lgq@rocky ~]$ ls /mnt/
hgfs
sudoers的别名:
User和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo
别名有四种类型:
User_Alias
Runas_Alias
Host_Alias
Cmnd_Alias
别名的格式:
[A-Z]([A-Z][0-9]_)* #必须以大写字母开头,只能有大写字母、数字、下划线
#定义别名
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
示例:设置用户别名表示两个账户,在设置命令别名表示所需要设置的命令,然后授权
[20:49:10 root@rocky ~]# visudo /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lgq ALL=(root) /usr/bin/mount,/usr/bin/umount
User_Alias NETADMIN = netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifconfig
NETADMIN ALL=(root) NETCMD
## Allows members of the 'sys' group to run networking, software,
...
#netuser1账户测试
[netuser1@rocky root]$ sudo 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:b9:2b:b4 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.3/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb9:2bb4/64 scope link
valid_lft forever preferred_lft forever
#netuser2账户测试
[netuser2@rocky root]$ sudo 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:b9:2b:b4 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.3/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb9:2bb4/64 scope link
valid_lft forever preferred_lft forever
范例:授权lgq用户可以查看/var/log/messages*
文件:
[20:57:00 root@rocky ~]# visudo /etc/sudoers
...
lgq ALL=(ALL) /bin/cat /var/log/messages*
...
[21:01:49 lgq@rocky ~]$ sudo cat /var/log/messages-20220813|head
Jul 28 22:09:38 rocky kernel: Linux version 4.18.0-348.el8.0.2.x86_64 (mockbuild@dal1-prod-builder001.bld.equ.rockylinux.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-3) (GCC)) #1 SMP Sun Nov 14 00:51:12 UTC 2021
...
## 可以查看,但是在这个文件的后面再加上一个普通用户没有查看权限的文件时发生了惊喜,发现可以查看了。
[21:06:41 lgq@rocky ~]$ sudo cat /var/log/messages-20220813 /etc/passwd|tail
cockpit-wsinstance:x:992:988:User for cockpit-ws instances:/nonexisting:/sbin/nologin
sssd:x:991:987:User for sssd:/:/sbin/nologin
chrony:x:990:986::/var/lib/chrony:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
lgq:x:1000:1000:lgq:/home/lgq:/bin/bash
nginx:x:989:985:Nginx web server:/var/lib/nginx:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
pcp:x:988:984:Performance Co-Pilot:/var/lib/pcp:/sbin/nologin
##是不是很惊喜,这样设置的权限的话是有安全风险的,改正的措施就是:
[21:03:28 root@rocky ~]# visudo /etc/sudoers
...
lgq ALL=(ALL) /bin/cat /var/log/messages* !/bin/cat /var/log/messages* * # !表示排除这种情况
...
[21:06:45 lgq@rocky ~]$ sudo cat /var/log/messages-20220813 /etc/passwd|tail
Sorry, user lgq is not allowed to execute '/bin/cat /var/log/messages-20220813 /etc/passwd' as root on rocky.lgq.com.
1.2 PAM配置规范
PAM
:Pluggable Authrntication Modules
,插件式的验证模块,PAM只关注如何为服务验真用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,是系统管理员可以灵活的根据需要给不同的服务盘配置不同的认证方式且不需要更改服务程序的一种认证框架,自身不做认证。
模块文件目录:/lib64/security/*.so
特定模块相关的设置文件:/etc/security/
应用程序调用PAM模块的配置文件:
- 主配置文件:
/etc/pam.conf
,默认不存在,一般不使用主配置 - 为每种应用模块提供一个专用的配置文件:
/etc/pam.d/APP_NAME
- 注意:如
/etc/pam.d
存在,/etc/pam.conf
将失效
工作原理:
- PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于
/etc/pam.d
下),最后调用认证文件(位于/lib64/security
下)进行安全认证。
认证过程:
- 1.使用者执行
/usr/bin/passwd
程序,并输入密码 - 2.
passwd
开始调用PAM
模块,PAM
模块会搜寻passwd
程序的PAM
相关设置文件,这个设置文件一般是在/etc/pam.d/
里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd
此设置文件 - 3.经由
/etc/pam.d/passwd
设定文件的数据,取用PAM
所提供的相关模块来进行验证 - 4.将验证结果回传给
passwd
这个程序,而passwd
这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
通用配置文件/etc/pam.conf
格式
application type control module-path arguments
专用配置文件/etc/pam.d
格式:
type control module-path arguments
application: 指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
type: 指模块类型,即功能
control : PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数
模块类型:
Auth
账号的认证和授权Account
帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)Password
用户修改密码时密码复杂度检查机制等功能Session
用户会话期间的控制,如:最多打开的文件数,最多的进程数等-type
表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
Control:
required
:一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件requisite
:一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件sufficient
:一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的required和requisiteoptional
:表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include
: 调用其他的配置文件中定义的配置信息
module-path:
- 模块文件所在绝对路径:
- 模块文件所在相对路径:
/lib64/security
目录下的模块可使用相对路径,如:pam_shells.so
、pam_limits.so
- 有些模块有自已的专有配置文件,在
/etc/security/*.conf
目 录下
Arguments:
debug
:该模块应当用syslog( )
将调试信息写入到系统日志文件中no_warn
:表明该模块不应把警告信息发送给应用程序use_first_pass
:该模块不能提示用户输入密码,只能从前一个模块得到输入密码try_first_pass
:该模块首先用前一个模块从用户得到密码,如果该密码验证不通过,再提示用户输入新密码use_mapped_pass
该模块不能提示用户输入密码,而是使用映射过的密码expose_account
允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁
示例1、查看某些服务的PAM配置文件格式
[22:50:54 root@rocky8 ~]$ cat /etc/pam.d/sshd
#%PAM-1.0
auth substack password-auth
auth include postlogin
account required pam_sepermit.so
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session optional pam_motd.so
session include password-auth
session include postlogin
[22:51:14 root@rocky8 ~]$ cat /etc/pam.d/passwd
#%PAM-1.0
# This tool only uses the password stack.
password substack system-auth
-password optional pam_gnome_keyring.so use_authtok
password substack postlogin
示例:例如设置pam_limits.so
模块配置文件
#配置格式
<domian> <type> <item> <value>
##1、限制用户lgq的进程数最大为5
[12:23:03 root@rocky ~]$ vi /etc/security/limits.conf
...
# End of file
lgq - nproc 5
[11:55:06 root@rocky ~]# su lgq
[11:59:15 lgq@rocky /root]$ bash
[11:59:21 lgq@rocky /root]$ bahs
bash: bahs: command not found
[11:59:22 lgq@rocky /root]$ bash
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
bash: fork: retry: Resource temporarily unavailable
###发现已经不能开启进程了
##2、systemd的service资源设置单独配置。假设设置所有的进程数为66666,然后查看postfix服务的进程数限制是否被修改
[12:28:47 root@rocky ~]$ vi /etc/security/limits.conf
# End of file
* - nproc 66666
#查看lgq用户的默认限制数
[12:45:31 lgq@rocky /root]$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7011
max locked memory (kbytes, -l) 32000
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 8192000
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 66666 #发现已经生效了
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#接下来观察postfix服务的限制数
##查看该服务的进程号
[12:47:26 root@rocky ~]$ ps xf|grep postfix|grep -v grep
1507 ? Ss 0:00 /usr/libexec/postfix/master -w
##查看限制数
[12:48:30 root@rocky ~]$ cat /proc/1507/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 7011 7011 processes #发现进程的限制数还是7011,没有变化,这说明systemd服务的限制需要单独配置
Max open files 262144 262144 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 7011 7011 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
#这种情况的解决办法,是修改service文件/lib/systemd/system/postfix.service中的限制数
## 查看这个服务中进程限制数的默认值
[12:57:00 root@rocky ~]$ systemctl show postfix.service |grep -i proc
LimitNPROC=7011
LimitNPROCSoft=7011
SameProcessGroup=no
## 修改
[12:57:06 root@rocky ~]$ vi /lib/systemd/system/postfix.service
...
ExecReload=/usr/sbin/postfix reload
ExecStop=/usr/sbin/postfix stop
LimitNPROC=66666
...
[12:59:17 root@rocky ~]$ systemctl daemon-reload
[13:00:42 root@rocky ~]$ systemctl restart postfix.service
[13:00:52 root@rocky ~]$ ps xf|grep postfix|grep -v grep
2535 ? Ss 0:00 /usr/libexec/postfix/master -w
[13:01:18 root@rocky ~]$ cat /proc/2535/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 66666 66666 processes #发现已经修改了
Max open files 262144 262144 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 7011 7011 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
2、chrony搭建私有ntp服务
搭建环境:服务端:10.0.0.3
客户端:10.0.0.4
服务器端配置:
#1、首先查看是或否有chrony软件,没有的话安装 [17:36:27 root@rocky8 ~]$ rpm -q chrony &> /dev/null || yum -y install chrony #2、编辑配置文件 [17:58:19 root@rocky ~]$ vi /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #pool 2.pool.ntp.org iburst #将自带的时间服务器注释掉,加上几个国内的 server ntp.aliyun.com iburst server time1.cloud.tencent.com iburst server ntp1.aliyun.com iburst ... # Allow NTP client access from local network. #allow 192.168.0.0/16 allow 0.0.0.0/0 #加上这一行,指定允许同步的网段 # Serve time even if not synchronized to a time source. local stratum 10 #将这一行的注释去掉。表示互联网无法连接时,仍然可以为客户端提供时间同步 #3、重启chronyd服务 [18:03:58 root@rocky ~]$ systemctl restart chronyd #4、查看服务端的监听端口123是否开启 [18:04:34 root@rocky ~]# ss -ntlu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
客户端配置:
[18:06:30 root@rocky8 ~]$ vi /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #pool 2.pool.ntp.org iburst #注释掉默认服务器,添加上自己搭建的时间服务器地址 server 10.0.0.3 iburst #重启服务 [18:07:53 root@rocky8 ~]$ systemctl restart chronyd #查看连接状态 [18:10:38 root@rocky8 ~]$ chronyc sources -nv MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 10.0.0.3 3 6 37 51 -1278ns[ -127us] +/- 28ms #*表示连接成功
3、CDN原理
- 用户在浏览器输入
www.a.com
这个域名,浏览器第一次发现本地没有DNS缓存
,则向网站的DNS服务器发起请求。 - 网站的DNS域名解析器设置了
CNAME
,指向了www.a.tbcdn.com
,请求指向了CDN网络中的智能DNS负载均衡系统。 - 智能负载均衡系统解析域名,把对用户响应速度最快的IP节点
2.2.2.2
返回给用户。 - 用户向该IP节点(CDN服务器)发出请求。
- 由于是第一次访问,CDN服务器会通过
cache
内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容。 - 请求结果发给用户。
4. 搭建智能DNS,实现不同地域客户端解析到不同主机
实验环境:
DNS主服务器:10.0.0.3/24, 192.168.10.130/24
web服务器bj:10.0.0.4/24
web服务器sh:192.168.10.132/24
DNS客户端: 10.0.0.8/24, 192.168.10.131/24
4.1 主DNS服务器10.0.0.3配置
4.1.1 配置网卡
[17:50:58 root@rocky ~]$ ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:b9:2b:b4 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.3/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb9:2bb4/64 scope link
valid_lft forever preferred_lft forever
[17:51:03 root@rocky ~]$ ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:b9:2b:be brd ff:ff:ff:ff:ff:ff
inet 192.168.10.130/24 brd 192.168.10.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
4.1.2 配置文件实现view
#1 安装软件bind
[17:51:14 root@rocky ~]$ yum -y install bind
#2 修改配置文件/etc/named.conf
[17:54:29 root@rocky ~]$ vi /etc/named.conf
acl beijingnet { #在文件最前面加上两个地区的acl
10.0.0.0/24;
};
acl shanghainet {
192.168.10.0/24;
};
options {
// listen-on port 53 { 127.0.0.1; }; #注释掉这一行
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 { localhost; }; #注释掉这一行
...
view beijingview { #添加两个地区的view
match-clients { beijingnet; };
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview { #添加view
match-clients { shanghainet; };
include "/etc/named.rfc1912.zones.sh";
};
zone "." IN { #将该zone拷贝至区域配置文件/etc/named.rfc1912.zones
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones"; #将配置文件的只一行删除
#3 配置区域配置文件
##3.1 配置北京地区配置文件
[18:00:42 root@rocky ~]$ cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
[18:05:10 root@rocky ~]$ vi /etc/named.rfc1912.zones.bj
...省略
zone "." IN { #将主配置文件/etc/named.conf中的该zone配置信息粘贴过来
type hint;
file "named.ca";
};
zone "yanlinux.org" IN { #配置网站zone信息
type master;
file "yanlinux.org.zone.bj";
};
...省略
##3.2 配置上海地区配置文件
[18:08:09 root@rocky ~]$ cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh
[18:08:36 root@rocky ~]$ vi /etc/named.rfc1912.zones.sh
...省略
zone "." IN { #将主配置文件/etc/named.conf中的该zone配置信息粘贴过来
type hint;
file "named.ca";
};
zone "yanlinux.org" IN { #配置上海地区网站zone信息
type master;
file "yanlinux.org.zone.sh";
};
...省略
#4 创建两个地区的区域数据库文件
##4.1 创建北京地区区域数据库文件
[18:10:52 root@rocky named]$ vi yanlinux.org.zone.bj
$TTL 1D
@ IN SOA master admin.yanlinux.org. ( 1 1H 10M 1D 2H )
NS master
master A 10.0.0.3
www A 10.0.0.4
[18:14:54 root@rocky named]$ chmod 640 yanlinux.org.zone.bj;chgrp named yanlinux.org.zone.bj
[18:15:29 root@rocky named]$ ll yanlinux.org.zone.bj
-rw-r----- 1 root named 165 Sep 3 18:12 yanlinux.org.zone.bj
##4.2 创建上海地区区域数据库文件
[18:16:31 root@rocky named]$ vi yanlinux.org.zone.sh
$TTL 1D
@ IN SOA master admin.yanlinux.org. ( 1 1H 10M 1D 2H )
NS master
master A 10.0.0.3
www A 192.168.10.132
[18:16:56 root@rocky named]$ chmod 640 yanlinux.org.zone.sh;chgrp named yanlinux.org.zone.sh
[18:17:31 root@rocky named]$ ll yanlinux.org.zone.sh
-rw-r----- 1 root named 159 Sep 3 18:16 yanlinux.org.zone.sh
#5 重载配置文件
[18:18:33 root@rocky named]$ rndc reload
server reload successful
4.2 搭建两个不同区域的WEB服务器
4.2.1 北京地区的
[18:25:33 root@rocky8 ~]$ yum -y install httpd
[18:28:30 root@rocky8 ~]$ systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[18:28:45 root@rocky8 ~]$ echo www.yanlinux.org in beijing > /var/www/html/index.html
4.2.2 上海地区
[18:29:53 root@rocky8 ~]$ yum -y install httpd
[18:30:15 root@rocky8 ~]$ systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[18:30:32 root@rocky8 ~]$ echo www.yanlinux.org in shanghai > /var/www/html/index.html
4.3 客户端测试
#网卡eth0(10.0.0.8)测试
[18:39:09 root@centos7 ~]$ curl www.yanlinux.org
www.yanlinux.org in beijing
#关闭网卡eth0
[18:40:08 root@centos7 ~]$ nmcli connection down eth0
#网卡eth1(192.168.10.131)测试
[18:41:31 root@centos7 ~]$ curl www.yanlinux.org
www.yanlinux.org in shanghai
5、解释DNS解析流程
DNS解析流程:
- 用户端在浏览器中输入
www.yanlinux.com
的网址,浏览器发起DNS解析请求,若在本地缓存服务器中有对应结果,则解析结束;反之,DNS解析服务器会询问根域名服务器。 - 根域名服务器存放了各个顶级域所在的服务器位置,根域名服务器收到
www.yanlinux.com
解析请求时,其会返回.com
服务器所在位置信息。 - 递归服务器拿到
.com
服务器地址后,向其发起解析请求,.com
域名服务器返回yanlinux.com
域名服务器的地址。 - 根据
yanlinux.com
域名服务器的地址,发起解析请求,它会根据本地的yanlinux.com
对应的配置文件返回对应的IP地址6.6.6.6 - DNS代理解析服务器拿到解析记录后,会立即进行本地缓存,以备下次解析使用。另外将解析后的IP地址返回客户端进行网页访问。
6、iptables 5表5链解释
五个内置链chain:
PREROUTING
:数据包在进行路由决策前的规则,一般用于改变数据包的目标地址INPUT
:数据包经由路由决策后,进入本机处理之前应用的规则,一般用于本机进程处理的数据包(数据包本机处理)OUTPUT
:从本机输出时应用的规则,一般用于本机处理后的数据包(数据包本机发出)FORWARD
:数据包经由路由决策后,本机不做处理,仅仅是转发数据包时应用的规则(数据包本机转发)POSTROUTING
:数据包从本机出去前,对数据包应用的规则,一般用于更改数据包的原地址信息
五个表table:
filter
:过滤规则表,根据与定义的规则过滤符合条件的数据包,默认表。nat
:地址转换规则表。主要实现网络地址转换的表。可以自由转换数据报文中的ip
和port
mangle
:修改数据标记位规则表,主要实现数据包的而拆分-修改-封装raw
:通过关闭nat
表的追踪功能,从而实现加速防火墙过滤的表security
:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现。主要针对的是数据链路层的管理规则组合
7、iptables/firewalld/nftable 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问
7.1 iptables实现
[22:56:52 root@rocky ~]$ iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 5000:6000 -j ACCEPT
[23:01:13 root@rocky ~]$ iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 192.168.0.0/24 0.0.0.0/0 tcp dpts:5000:6000
7.2 firewalld实现
[23:04:09 root@rocky ~]$ firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 port protocol=tcp port=5000-6000 accept'
success
[23:16:12 root@rocky ~]$ firewall-cmd --reload
success
7.3 nftable实现
#创建表
[16:02:59 root@rocky ~]$ nft add table inet test_table
#创建链
[16:04:12 root@rocky ~]$ nft add chain inet test_table test_filter_input_chain { type filter hook input priority 0 \; }
#添加规则
[16:07:10 root@rocky ~]$ nft add rule inet test_table test_filter_input_chain ip saddr 192.168.0.0/24 tcp dport {5000-6000} accept
8、mysql的各发行版有哪些 ?
MySQL
官方版本:社区版和企业版Percona MySQL
:是基于官方社区版本二次开发的,在MySQL官方社区版基础上增加了一些企业版才有的功能,同时对官方社区进行了优化。MariaDB
:由MySQL初始创建者在MySQL被Oracle收购之后,又独立成立了一家公司,来开发的数据库。以MySQL5.5源代码为基础,发展起来的,大多数功能都是兼容的
9、mysql索引的作用
索引提供了指向存储在表的指定列中的数据值的指针,按照指定的排序顺序排序指针。数据库使用索引找到特定值,然后根据指针找到包含该值的行,这样使SQL语句执行结果可以更快得到,快速访问数据表中的数据。
作用就是:
- 可以快速的查询到数据,降低服务需要扫描的数据量,减少了IO次数
- 保证数据记录的唯一性
- 实现表与表之间的参照完整性
- 在使用分组和排序子句进行检索的时候,利用索引可以减少排序和分组的时间。
10、mysql btree索引的原理
B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。为了描述B-Tree,首先定义一条记录为一个二元组[key, data] ,key为记录的键值,对应表中的主键值,data为一行记录中除主键外的数据。对于不同的记录,key值互不相同。
检索原理:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或未找到节点返回null指针。
11、mysql安全加固?
- 安装完后运行
mysql_secure_installation
脚本,设置数据库管理员root口令;禁止root远程登录;删除anonymous
用户账号;删除test数据库。 - 根据性能和业务需求,设置最大、最小连接数。
- 开启二进制日志,并将二进制日志文件与数据库文件分开存放
- 在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限。
- 配置防火墙策略,更改默认端口
- 定时备份数据库