SUDO介绍
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt, reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性 在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先 告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得 权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信 息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为 “sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自 己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运 行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。 由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如 Ubuntu、Mac OS X等。
1, sudo配置文件
1. /etc/sudoers
2,安全编辑授权规则文件和语法检查工具
2 /usr/sbin/visudo
3,SUDO命令
3,sudo命令
ls -l /usr/bin/sudo
sudo -i -u wang 切换身份功能和 su 相似,但不一样,sudo必须提前授权,而且要输入自已的密码
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p "password on %h for user %p: "
PAM认证机制
1,pam介绍
PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证 相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的 API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配 置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证
2,pam架构
3.pam的工作原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证 文件(位于/lib64/security下)进行安全认证
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: 用来传递给该模块的参数
模块类型
[09:37:39 root@rocky8_12 ~]#vim /etc/pam.d/sshd
#type #Control #path
1 #%PAM-1.0
2 auth substack password-auth
3 auth include postlogin
4 account required pam_sepermit.so
5 account required pam_nologin.so
6 account include password-auth
7 password include password-auth
8 # pam_selinux.so close should be the first session rule
9 session required pam_selinux.so close
10 session required pam_loginuid.so
11 # pam_selinux.so open should only be followed by sessions to be executed in the user context
12 session required pam_selinux.so open env_params
13 session required pam_namespace.so
14 session optional pam_keyinit.so force revoke
15 session optional pam_motd.so
16 session include password-auth
17 session include postlogin
常用PAM模块
1 pam_nologin.so 模块
2 pam_limits.so 模块
3 pam_google_authenticator 模块
具体的模块使用参考官方文档
2,chrony搭建ntp服务
包:chrony
两个主要程序:chronyd和chronyc
chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算 机增减时间的比率,并对此进行补偿
chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计 算机上工作,也可在一台不同的远程计算机上工作
服务unit 文件: /usr/lib/systemd/system/chronyd.service
监听端口: 服务端: 123/udp,客户端: 323/udp
配置文件: /etc/chrony.conf
服务器端的配置,这里用阿里云的公共ntp服务器
#服务器端配置
[root@centos8 ~]#hostname -I
10.0.0.8
[root@centos8 ~]#yum -y install chrony
#安装服务器端软件
[root@centos8 ~]#vim /etc/chrony.conf
#进入配置文件添加一下目录
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
#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 #删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务
[root@centos8 ~]#systemctl restart chronyd
#重新启动服务 ,服务启动后会打开端口123/udp
客户端配置
#客户端配置
[root@centos8 ~]#vim /etc/chrony.conf #打开配置文件
server 10.0.0.8 iburst #添加这一行,这是将服务器配置的地址作为ntp服务器
[root@centos8 ~]#systemctl restart chronyd.service
#确认同步成功,重启服务
[root@centos8 ~]#chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.0.0.8 3 6 77 29 -229us[-1154us] +/- 17m
3,CDN的原理
1. 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服 务器请求
2. 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能 DNS负载均衡系统
3. 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
4. 用户向该IP节点(CDN服务器)发出请求
5. 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原 站点服务器发起请求,并在CDN服务器上缓存内容
6. 请求结果发给用户
4,搭建智能DNS,实现不同地域客户端解析到不同主机
5台主机
DNS主服务器和web服务器1:10.0.0.8/24,172.16.0.8/16
web服务器2:10.0.0.7/24
web服务器3:172.16.0.7/16
DNS客户端1:10.0.0.6/24
DNS客户端2:172.16.0.6/16
1在主服务器中加入一个网卡,配置两个ip地址
#配置两个IP地址
#eth0:10.0.0.8/24
#eth1: 172.16.0.8/16
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:f9:8d:90 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fef9:8d90/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group
default qlen 1000
link/ether 00:0c:29:f9:8d:11 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.8/16 brd 172.16.0.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe11:8d90/64 scope link
valid_lft forever preferred_lft forever
2主DNS服务端配置文件实现 view
yum install bind -y
vim /etc/named.conf
#在文件最前面加下面行
acl beijingnet {
10.0.0.0/24;
};
acl shanghainet {
172.16.0.0/16;
};
acl othernet {
any;
};
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
# 创建view
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
view otherview {
match-clients { othernet;};
include "/etc/named.rfc1912.zones.other";
};
include "/etc/named.root.key";
3 实现区域配置文件,不同区域三个配置文件
vim /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "wangshiping.org" {
type master;
file "wangshiping.org.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "." IN {
type hint;
file "named.ca";
};
zone "wangshiping.org" {
type master;
file "wangshiping.org.zone.sh";
};
vim /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "wangshiping.org" {
type master;
file "wangshiping.org.zone.other";
};
chgrp named /etc/named.rfc1912.zones.bj
chgrp named /etc/named.rfc1912.zones.sh
chgrp named /etc/named.rfc1912.zones.other
4 创建区域数据库文件,也是三个文件
vim /var/named/wangshiping.org.zone.bj
$TTL 1D
@ IN SOA master admin.wangshiping.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 10.0.0.7
www CNAME websrv
vim /var/named/wangshiping.org.zone.sh
$TTL 1D
@ IN SOA master admin.magedu.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 172.16.0.7
www CNAME websrv
vim /var/named/wangshiping.org.zone.other
$TTL 1D
@ IN SOA master admin.wangshiping.org. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 127.0.0.1
www CNAME websrv
chgrp named /var/named/wangshiping.org.zone.bj
chgrp named /var/named/wangshiping.org.zone.sh
chgrp named /var/named/wangshiping.org.zone.other
systemctl start named #如果是第一次启动服务
rndc reload #如果不是第一次重启服务
5 实现位于不同区域的三个WEB服务器
#分别在三台主机上安装http服务
#在web服务器1:10.0.0.8/24实现
yum install httpd
echo www.wangshiping.org in Other > /var/www/html/index.html
systemctl start httpd
#在web服务器2:10.0.0.7/16
echo www.wangshiping.org in Beijing > /var/www/html/index.html
systemctl start httpd
#在web服务器3:172.16.0.7/16
yum install httpd
echo www.wangshiping.org in Shanghai > /var/www/html/index.html
systemctl start httpd
6客户端测试,这样就成功了
#分别在三台主机上访问
#DNS客户端1:10.0.0.6/24 实现,确保DNS指向10.0.0.8
curl www.wangshiping.org
www.wangshiping.org in Beijing
#DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8
curl www.wangshiping.org
www.wangshiping.org in Shanghai
#DNS客户端3:10.0.0.8 实现,,确保DNS指向127.0.0.1
curl www.wangshiping.org
www.wangshiping.org in Other
5. 解释DNS解析流程
客户端 -->本机的hosts文件 --> (本地的DNS的缓存中) --> 如果本地缓存中没有,则去根DNS Server (recursion递 归) --> 根DNS服务器返回查询结果 (此种方式为递归查询)
DNS Server (DNS服务器缓存)--> 如果缓存中没有则去根服务器 DNS iteration(迭代) --> 根(服务器)--> 顶级域名DNS(例如.com .net)-->二级域名DNS…(例如 baudi,) -->返回DNS查询结果
(此方式为递归查询)
两种查询方式的区别在于本地缓存没有结果,需要去根服务器查询过程中,得到的结果是根服务器直接告诉结果 还是根服务器告诉你顶级域名让你自己去查询
6.iptables 5表5链解释
5表
filter:过滤规则表
nat:地址规则转换表
mangle:修改数据标记位规则表
raw: 关闭启动用的连接追踪机制,加快封包穿越速度
security:用于强制访问mac网络规则,有selinux实现
五链
pre_routing:在对数据包做路由选择之前,将应用此链中的规则
input:当收到访问防火墙本机地址的数据包时,将应用此链中的规则
output:当防火墙本机向外发送数据包时,将应用此链中的规则
forward:当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则,注意如果需要实现forward转发需要开启Linux内核中的ip_forward功能
post_routing:在对数据包做路由选择之后,将应用此链中的规则
iptables firewalld nftable
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息 -vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:显示规则的序号 -S selected,以iptables-save 命令格式显示链上规则
常见组合
-vnL -vvnxL --line-numbers
规则管理:
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除 (1) 指明规则序号
(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零 iptables的每条规则都有两个计数器 (1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和
iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 5000:6000 -j ACCEPT
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.0./24 port port=5000-6000 protocol=tcp accept
通过iptables 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问
7,MySQL的发行版本
一、常见发行版本:
1、MySQL官方版本(分为社区版和企业版)
企业版性能略强,提供了更多的功能和工具
2、Percona MySQL
Percona是由MySQL最初开发者组成的一个社区,Percona MySQL是基于官方社区版本二次开发的,在MySQL官方社区版的基础上增加了一些MySQL官方企业版才有的功能,同时对官方社区版进行了一些优化,从目前公布的数据来看,Percona MySQL 性能是要优于MySQL官方社区版的。
Percona MySQL 下载地址:Percona Server for MySQL - Open Source MySQL Server Alternative
3、MariaDB
MariaDB是由MySQL初始创建者在MySQL被Oracle收购之后,又独立成立了一家公司,来开发的数据库。
其以MySQL5.5源代码为基础,发展起来。
MariaDB并不能完全和MySQL官方版完全兼容,但大多数功能是兼容的。
我们可以很容易的将数据从MySQL迁移到MariaDB上。
MariaDB 下载地址:Download MariaDB Server - MariaDB.org
8,mysql索引的作用
索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引 擎实现
优点: 索引可以降低服务需要扫描的数据量,减少了IO次数
索引可以帮助服务器避免排序和使用临时表
索引可以帮助将随机I/O转为顺序 I/O
缺点: 占用额外空间,影响插入速度
索引类型: B+ TREE、HASH、R TREE、FULL TEXT
聚簇(集)索引、非聚簇索引:数据和索引是否存储在一起
主键索引、二级(辅助)索引 稠密索引、
稀疏索引:是否索引了每一个数据项 简单索引、
组合索引: 是否是多个字段的索引
左前缀索引:取前面的字符做索引
覆盖索引:从索引中即可取出要查询的数据,性能高
9,mysql btree索引的原理
蓝色代表磁盘块,黄色代表指针
磁盘块包含数据项17,35,指针p1、p2、p3
p1表示小于17的磁盘块,p2表示17-35之间的磁盘块,p3代表大于35的磁盘块
真实的数据存放在叶子节点
查找数据10的过程如下:将磁盘1加载到内存,发生一次i/o,利用二分查找确定10在<17,锁定磁盘块1,p1指针;将磁盘2加载到内存,发生第二次i/o,锁定到p2指针;将磁盘6加载到内存,第三次i/o。通过二分查找找到10
10,MYSQL安全加固
-
禁止MySQL以管理员账号权限运
-
开启日志审计功能
-
连接数设置
-
设置可信IP访问控制
-
安装最新补丁
-
如果不需要,应禁止远程访问