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的关键技术主要有内容存储和分发技术。
加速原理:
- 当终端用户向
www.aliyundoc.com
下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com
对应的IP。 - Local DNS检查缓存中是否有
www.aliyundoc.com
的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com
的解析记录。 - 当网站授权DNS解析
www.aliyundoc.com
后,返回域名的CNAMEwww.aliyundoc.com.example.com
。 - Local DNS向阿里云CDN的DNS调度系统请求域名
www.aliyundoc.com.example.com
的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。 - Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
- Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
- 用户向最佳节点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服务后即可生效。