第五周

内容纲要

1、SUDO,PAM配置规范说明

sudo:
1)配置文件格式说明:/etc/sudoers,/etc/sudoeds.d/ 。
2)配置文件中支持使用通配符glob:
? 任意单一字符
*  匹配任意长度字符
[wac] 匹配其中任意一个字符
[!wac] 除了这三个字符外的其他字符
\x 转义
[[alpha]] 字母
3)配置文件规则有两类:定义别名(不是必须的)、授权规则(必须有)
sudoers格式:
用户 登入主机=(代表用户) 命令
user host=(zhang) command
例如root: root ALL=(ALL) ALL
user:用户身份
host:通过哪些主机
(zhang):以哪个用户的身份
command: 运行哪些命令
例:
zhang ALL=(root) /sbin/ss, /usr/sbin/ifconfig
%ftp ALL=(ALL) NOPASSWD: ALL
注意:Ubuntu默认具有sudo权限

Ubuntu中visudo的默认编辑器是nano不是vim,需要修改环境变量。
export EDITOR=vim #也课将其添加到文件中,永久修改。
PAM:
    PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so。PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。

pam相关文件:
包名:pam
模块文件目录:/lib64/security/*.so
特定模块的相关设置文件:/etc/security/
应用程序调用的pam模块配置文件:
  1)主配置文件/etc/pam.conf,默认不存在,一般不使用主配置文件
  2)每个模块提供一个专用的配置文件:/etc/pam.d/service_name
  3)注意:如果/etc/pam.d/存在,/etc/pam.conf将失效
范例:查看程序是否支持PAM


一个服务进程name使用pam鉴权功能需要做两步:
第一步:修改/etc/pam.d/name 文件,指定AA服务需要加载一个libpam_XXXX.so动态库。
第二步:修改/etc/security/XXXX.conf,指定XXXX操作需要满足哪些鉴权规则。
通过配置文件增改删进程的鉴权规则,下面介绍两个常用的pam模块

pam_access.so模块的使用―――控制访问sshd服务的主机和用户
1.修改需使用这个模块的服务文件/etc/pam.d/sshd
   添加 account required pam_access.so
2.修改模块的配置文件 /etc/security/access.conf
  - : redhat : ALL EXCEPT 192.168.0. (ip为192.168.0.X的redhat机器无权访问)
  结果:ip为192.168.0.X的redhat机器执行ssh时,无法登录该机器。

pam_limits.so 模式使用
1.模块应用到sshd服务,修改服务文件
#vi /etc/pam.d/sshd 添加:

session required pam_limits.so
session控制用户进程的登录次数,文件大小,通过控制用户的会话进程来限制用户使用的资源。

2.编缉pam_limits.so的配置文件/etc/security/limits.conf
*                hard    nofile          65536
*                soft    nofile          65535

任意用户进程的句柄上限都是65535。

2、chronyd搭建私有时间服务器

服务端centos7:ip--192.168.234.144
yum -y install chrony
vim /etc/chrony.conf
修改:
server ntp.aliyun.com iburst   #同步互联网时间服务器1
server ntp1.aliyun.com iburst  #同步互联网时间服务器2
server ntp2.aliyun.com iburst  #同步互联网时间服务器3

allow 0.0.0.0/0                #允许同步的网段
local stratum 10               #去掉此行注释,没有互联网连接的时候也可被客户端同步时间
systemctl restart chrinyd      #重启服务
ss -ntlu                       #查看端口是否开启,默认开启UDP:123端口
客户端centos7:
vim /etc/chrony.conf
server 192.168.234.144 iburst  #只需修改此行,IP地址为服务端地址
vim /etc/hosts
192.168.234.144  chronyd       #添加此行,主机和名称
systemctl restart chrony       #重启服务
结果:
[root@centos ~ 12:04:53 8062]#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
===============================================================================
^* chronyd                       3   6    37     2  +2082ns[ +248us] +/-   23ms
注:如果不加hosts的内容,最后一行同步服务器不会显示chronyd这个名字;会一直显示localhost。

3、CDN原理

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

加速原理:

  1. 当终端用户向www.aliyundoc.com下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com对应的IP。
  2. Local DNS检查缓存中是否有www.aliyundoc.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com的解析记录。
  3. 当网站授权DNS解析www.aliyundoc.com后,返回域名的CNAME www.aliyundoc.com.example.com
  4. Local DNS向阿里云CDN的DNS调度系统请求域名www.aliyundoc.com.example.com的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。
  5. Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
  6. Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
  7. 用户向最佳节点IP地址发起对该资源的访问请求。
    • 如果该最佳节点已缓存该资源,则会将请求的资源直接返回给用户(步骤8),此时请求结束。
    • 如果该最佳节点未缓存该资源或者缓存的资源已经失效,则节点将会向源站发起对该资源的请求。获取源站资源后结合用户自定义配置的缓存策略,将资源缓存到CDN节点并返回给用户(步骤8),此时请求结束。

4、搭建智能DNS,实现不同地域客户端解析到不同主机

环境:
DNS:双网卡:LAN1--10.0.0.132(NAT模式)  LAN2--192.168.234.130(仅主机)
Client1:10.0.0.130
Client2: 192.168.234.129

主要操作都在DNS服务器上,最终实现client1访问www.ztunan.io域名时得到的是返回的主机记录是1.1.1.1,client2访问www.ztunan.io时返回的主机记录是2.2.2.2

DNS服务器操作:
1、yum -y install bind bind-utils #安装域名服务和域名服务工具

2、修改主配置文件
vim /etc/named.conf

acl beijingnet {

        10.0.0.0/24;
};

acl shanghainet {

        192.168.234.0/24;
};
#在options上添加acl模块,指定访问的网段。

options {
       // listen-on port 53 { localhost; }; #options里这两行要么注释掉,要么改成这里写的样子。
       // allow-query     { any; }

}

#文件尾部添加view,
view    beijingview {
        match-clients { beijingnet; };
        include "/etc/named.rfc1912.zones.bj";
};

view    shanghaiview {
        match-clients { shanghainet; };
        include "/etc/named.rfc1912.zones.sh";
};

// include "/etc/named.rfc1912.zones"; #这行需注释掉,因为指定了view,zones文件在named.conf里就不生效了
include "/etc/named.root.key";

3、修改主域的关联数据库文件
cat /etc/named.rfc1912.zones

zone "." IN {                                                                                                                       
        type hint;
        file "named.ca";
};
#这四行从named.conf剪切过来复制到这
...
zone "ztunan.io" IN {
    type master;
    file  "ztunan.io.zone";
};
#这四行是指定域名的数据文件

4、创建来自不同网段关联数据文件的配置
(1)cat /etc/named.rfc1912.zones.bj
zone "." IN {
   type hint;
   file "named.ca";
};
zone "ztunan.io" {
   type master;
   file "ztunan.io.zone.bj";
};
(2)cat /etc/named.rfc1912.zones.sh
zone "." IN {
   type hint;
   file "named.ca";
};
zone "ztunan.io" {
   type master;
   file "ztunan.io.zone.sh";
};

5、创建/var/named/下的关联数据库文件
(1)主域文件
cat ztunan.io.zone
$TTL 1D
@       IN SOA  master admin (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS       master
master      A    10.0.0.132          
www             A    10.0.0.132
(2)来自10.0.0.0/24网段的地址访问到的关联数据文件
cat ztunan.io.zone.bj 
$TTL 1D
@       IN SOA  master admin.ztunan.io. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS       master
master          A    10.0.0.132
www             A    1.1.1.1
(3)来自192.168.234.0/24网段的地址访问到的关联数据文件
$TTL 1D
@       IN SOA  master admin.ztunan.io. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS       master
master          A    10.0.0.132
www             A    2.2.2.2

6、上述配置已完成,systemctl enable --now named ,或者rndc reload 载入配置文件即可。
7、client1IP为10.0.0.0/24段的,yum -y install bind-utils 安装工具检测即可。
   client2IP为192.168.234.0/24段的,yum -y install bind-utils 安装工具检测即可。
client1结果:

client2结果:


#到此:针对不同网段来的不同IP解析出不同的DNS和主机记录。智能DNS配置完毕。
######注意######
client1和client2两台客户端需修改默认网卡的DNS。
例:
clent1:
vim /etc/sysconfig/network-scripts/ifcfg-eth0 
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=eth0
UUID=2937d090-1fe4-40e5-8e9b-d83bc821def9
DEVICE=eth0
ONBOOT=yes
DNS1=10.0.0.132

#查看主机默认DNS:cat /etc/resolv.conf
[root@rocky4 named]#cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain com
nameserver 10.0.0.132

5、DNS解析流程

第一步:客户端提出域名解析请求,并将请求发送给本地域名服务器。

第二步:本地域名服务器收到请求后,首先查询本地缓存。如果有这条记录,则本地域名服务器直接返回查询结果。

第三步:如果本地缓存没有记录,则本地域名服务器直接向根域名服务器发送请求,然后根域名服务器返回域的主域名(根的子域) ) 的本地域名服务器。服务器的地址。

第四步:本地服务器向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存。如果没有该记录,则返回相关下级域名服务器的地址。

第五步:重复第四步,直到找到正确的记录。

第六步:本地域名服务器将返回的结果保存到缓存中以备下次使用,并将结果返回给客户端。

1. 客户端提出域名解析请求,并将请求发送到本地域名服务器。
2、本地域名服务器收到请求后,首先查询本地缓存。如果有这条记录,则本地域名服务器直接返回查询结果。
3.如果本地缓存中没有这条记录,本地域名服务器会直接向根域名服务器发送请求,然后根域名服务器会返回给本地域名服务器为主域名服务器查询域(根的子域)。地址。
4、本地服务器向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存。如果没有该记录,则返回相关下级域名服务器的地址。
5. 重复步骤 4,直到找到正确的记录。
6、本地域名服务器将返回的结果保存到缓存中以备下次使用,并将结果返回给客户端。

6、iptables 5表5链解释

IPTABLES由五表五链以及一些规则组成:
五表:filter nat mangle raw security #filter最常用,第二是nat,security最不常用
五链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING
security作为最不常用的表,有时也称四表五链。
五表控制优先级:security--->raw--->mangle--->nat--->filter
filter:过滤规则表
nat:地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于访问控制网络规则,由linux安全模块实现(selinux)

7、iptables/firewalld/nftable 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问

iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 5000:6000 -j ACCEPT

8、mysql的各发行版

1、MySQL官方版本(分为社区版和企业版)
企业版性能略强,提供了更多的功能和工具
2、Percona MySQL
Percona是由MySQL最初开发者组成的一个社区,Percona MySQL是基于官方社区版本二次开发的,在MySQL官方社区版的基础上增加了一些MySQL官方企业版才有的功能,同时对官方社区版进行了一些优化,从目前公布的数据来看,Percona MySQL 性能是要优于MySQL官方社区版的。
Percona MySQL 下载地址:https://www.percona.com/downloads/Percona-Server-LATEST/
3、MariaDB
MariaDB是由MySQL初始创建者在MySQL被Oracle收购之后,又独立成立了一家公司,来开发的数据库。
其以MySQL5.5源代码为基础,发展起来。MariaDB并不能完全和MySQL官方版完全兼容,但大多数功能是兼容的。我们可以很容易的将数据从MySQL迁移到MariaDB上。
MariaDB 下载地址:https://downloads.mariadb.org/

9、mysql索引的作用

索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称weikey键,索引通过存储引擎实现。
优点:
1)索引可以降低服务需要扫描的数据量,减少了IO次数
2)索引可以帮助服务器避免排序和使用临时表
3)索引可以帮助将随机IO转化为顺序IO
缺点:
占用额外空间,影响插入速度。
索引类型:
B+tree、HASH、R tree、Full text

10、mysql btree索引的原理

二叉树导致树高度非常高,逻辑上很近的节点,物理上非常远,无法利用局部性,IO 次数多,查找效率低
Btree是一种平衡的m-way查找树,它可以利用多个分支节点(子树节点)来减少查询数据时所经历的节点数,从而达到节省存取时间的目的。m称为B-Tree的度。
B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。

特点

有一个根节点,根节点只有一个记录和两个孩子或者根节点为空;
每个节点记录中的key和指针相互间隔,指针指向孩子节点;
d是表示树的宽度,除叶子节点之外,其它每个节点有[d/2,d-1]条记录,并且些记录中的key都是从左到右按大小排列的,有[d/2+1,d]个孩子;
在一个节点中,第n个子树中的所有key,小于这个节点中第n个key,大于第n-1个key;
所有的叶子节点必须在同一层次,也就是它们具有相同的深度;
由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败。

11、mysql安全加固

1)账号安全

禁止MySQL以管理员账号权限运行

以普通账户安全运行MySQL,禁止以管理员账号权限运行MySQL服务。在/etc/my.cnf配置文件中进行以下设置。

 [mysql.server]
 user=mysql

避免不同用户间共享账号

 1.创建用户
 ```
 mysql> mysql> insert into
 mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub 
 ject) values("localhost","pppadmin",password("passwd"),'','',''); 
 ```
 执行以上命令可以创建一个phplamp用户。
 2. 使用该用户登录MySQL服务。
 ```
 mysql>exit; 
 @>mysql -u phplamp -p 
 @>输入密码 
 mysql>登录成功
 ```

删除无关账号

DROP USER语句可用于删除一个或多个MySQL账户。使用DROP USER命令时,必须确保当前账号拥有MySQL数据库的全局CREATE USER权限或DELETE权限。账户名称的用户和主机部分分别与用户表记录的User和Host列值相对应。
执行DROP USER user;语句,您可以取消一个账户和其权限,并删除来自所有授权表的账户权限记录。

2)口令

检查账户默认密码和弱密码。口令长度需要至少八位,并包括数字、小写字母、大写字母和特殊符号四类中的至少两种类型,且五次以内不得设置相同的口令。密码应至少每90天进行一次更换。
mysql> update user set password=password('test!p3') where user='root';
mysql> flush privileges;

3)授权

在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限。
使用 select * from user_name; #查看数据库授权情况
使用 revoke delete on *.* from 'user'@'10.0.0.%'; #revoke回收不必要或危险的授权

4)开启日志审计功能

数据库应配置日志功能,便于记录运行状况和操作行为。

MySQL服务有以下几种日志类型:

错误日志: -log-err

查询日志: -log(可选)

慢查询日志: -log-slow-queries(可选)

更新日志: -log-update

二进制日志: -log-bin

找到MySQL的安装目录,在my.ini配置文件中增加上述所需的日志类型参数,保存配置文件后,重启 MySQL服务即可启用日志功能。

5)安装最新补丁

确保系统安装了最新的安全补丁。

注意:在保证业务及网络安全的前提下,并经过兼容性测试后,安装更新补丁。

6)如果不需要,应禁止远程访问

禁止网络连接,防止猜解密码攻击、溢出攻击、和嗅探攻击。
注意:仅限于应用和数据库在同一台主机的情况。
如果数据库不需要远程访问,可以禁止远程TCP/IP连接,通过在MySQL服务器的启动参数中添加--skip-networking参数使MySQL服务不监听任何TCP/IP连接,增加安全性。
可以使用 安全组 进行内外网访问控制,建议不要将数据库高危服务对互联网开放。

7)设置可信IP访问控制

通过数据库所在操作系统的防火墙限制,实现只有信任的IP才能通过监听器访问数据库。

mysql> GRANT ALL PRIVILEGES ON db.*
 -> -> TO 用户名@'IP子网/掩码';

8)连接数设置

根据机器性能和业务需求,设置最大、最小连接数。
在MySQL配置文件(my.conf 或 my.ini)的[mysqld]配置段中添加max_connections = 1000,保存配置文件,重启MySQL服务后即可生效。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注