SUDO,PAM,chrony,智能DNS,防火墙,Mysql简介
sudo配置规范
包sudo
[root@rocky ~]# rpm -ql sudo
...........
/etc/sudoers
/etc/sudoers.d
...........
有两个文件都可以配置
[root@rocky ~]# vim /etc/sudoers
[root@rocky ~]# vim /etc/sudoers.d/
配置文件支持通配符
? * [abc] [!abc] \x [[alpha]]
-
? 匹配任意一个字符
-
*匹配一个或多个字符
-
[abc]匹配a,b,c其中的一个
-
[!abc]匹配除了a,b,c以外的字符
-
\x 转义
-
[[alpha]]字母
配置文件规则有两类:
- 别名定义:非必须
- 授权规则:必须
sudoers授权规则:
用户 登入主机=(代表用户)命令
user hosts=(runas) command
[root@rocky ~]# sed '/^#/d;/^$/d' /etc/sudoers
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
sudoers别名
User和runas:
username
#uid
%#gid
user_alias|runas_alias
host:
ip或hostname
network
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo别名
- User_Alias
- Runas_Alias
- Host_Alias
- Cmnd_Alias
PAM配置规范
首先确认是否支持PAM
[root@rocky ~]# ldd `which sshd` | grep libpam
libpam.so.0 => /lib64/libpam.so.0 (0x00007fb64975d000)
[root@rocky ~]# ldd `which passwd` | grep pam
libpam.so.0 => /lib64/libpam.so.0 (0x00007ff47199b000)
libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007ff471797000)
是支持的
修改PAM配置会立即生效
通用配置文件/etc/pam.conf,此格式不使用
application type control module-path arguments
专用配置文件/etc/pam.d/格式
type control module-path arguments
[root@rocky pam.d]# ls
atd crond gdm-launch-environment other remote smtp.postfix sudo-i vmtoolsd
chfn cups gdm-password passwd runuser sshd su-l xserver
chsh fingerprint-auth gdm-pin password-auth runuser-l sssd-shadowutils system-auth
cockpit gdm-autologin gdm-smartcard polkit-1 smartcard-auth su systemd-user
config-util gdm-fingerprint login postlogin smtp sudo vlock
[root@rocky pam.d]# cat atd
# The PAM configuration file for the at daemon
#
#
auth required pam_env.so
auth include password-auth
account required pam_access.so
account include password-auth
session required pam_loginuid.so
session include password-auth
module-type
Auth:账号的认证和授权
Account:账号的有效性,如:用来限制或者允许用户对某个服务的访问时间,位置(root用户只能从控制台登录)
Password:用户修改密码时密码复杂度检查功能
Session:用户会话的控制,如:最多打开的文件数...
-type:表示因为缺少而不能加载的模块将不记录到系统日志
Control
required:一票否决,本模块必须返回成功才能通过认证,失败的话就要等到同一type中的所有模块执行完毕,再将失败结果返回应用程序。
requisite:一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,直接将控制权返回给应用程序。
sufficient:一票通过,本模块返回成功即通过身份认证要求。不再执行同一type的其他模块。如果本模块返回失败可忽略。
optional:本模块非必须。结果如何不会对身份认证起关键作用。
include:调用其他配置文件中定义的配置信息。
module-path
所在的绝对路径:
所在的相对路径:/lib64/security
[root@rocky ~]# cd /lib64/security/
[root@rocky security]# ls
pam_access.so pam_filter pam_loginuid.so pam_securetty.so pam_tty_audit.so
pam_cap.so pam_filter.so pam_mail.so pam_selinux_permit.so pam_umask.so
pam_chroot.so pam_fprintd.so pam_mkhomedir.so pam_selinux.so pam_unix_acct.so
pam_cockpit_cert.so pam_ftp.so pam_motd.so pam_sepermit.so pam_unix_auth.so
pam_console.so pam_gdm.so pam_namespace.so pam_shells.so pam_unix_passwd.so
pam_cracklib.so pam_gnome_keyring.so pam_nologin.so pam_ssh_add.so pam_unix_session.so
pam_debug.so pam_group.so pam_oddjob_mkhomedir.so pam_sss_gss.so pam_unix.so
pam_deny.so pam_issue.so pam_permit.so pam_sss.so pam_userdb.so
pam_echo.so pam_keyinit.so pam_postgresok.so pam_stress.so pam_usertype.so
pam_env.so pam_lastlog.so pam_pwhistory.so pam_succeed_if.so pam_warn.so
pam_exec.so pam_limits.so pam_pwquality.so pam_systemd.so pam_wheel.so
pam_faildelay.so pam_listfile.so pam_rhosts.so pam_time.so pam_xauth.so
pam_faillock.so pam_localuser.so pam_rootok.so pam_timestamp.so
有些模块有专有配置文件,在/etc/security/*.conf
[root@rocky security]# cd /etc/security/
[root@rocky security]# ls
access.conf console.handlers faillock.conf limits.d namespace.init pwquality.conf time.conf
chroot.conf console.perms group.conf namespace.conf opasswd pwquality.conf.d
console.apps console.perms.d limits.conf namespace.d pam_env.conf sepermit.conf
Arguments
debug:该模块把调试信息写入系统日志文件中
no_warn:该模块不应把警告信息发送到应用程序中
use_first_pass:不能提示用户输入密码,只能从前一个模块得到输入密码
try_first_pass:该模块首先用前一个模块从用户得到密码,如果不通过,则提示用户输入密码
use_mapped_pass:不能提示用户输入密码,使用映射过的密码
expose_account:允许该模块显示用户的账号名等信息。用一定的安全风险。
常见PAM模块
pam_limits.so
实现对可使用资源的限制
[root@rocky ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 6903
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6903
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
要对其永久保存必须写入配置文件
/etc/security/limits.conf
/etc/security/limits.d/
配置文件格式
<domain> <type> <item> <value>
domain
- Username 单个用户
- @group组内所有用户
- *所有用户
- %仅用于限制maxlogins limit,可以使用%group语法
type
- Soft 软限制,普通用户可自行修改
- Hard 硬限制,由root用户设定,且通过kernel强制生效
- -二者同时限定
item
- nofile 同时打开的最大文件数量,默认为1024
- nproc同时打开的最大进程数量,默认为1024
chrony搭建私有ntp服务
准备一台可以连接外网的服务器作为NTP服务器,为企业内部提供NTP
服务器端配置
[root@rocky ~]# yum install chrony
[root@rocky ~]# vim /etc/chrony.conf
#pool 2.rhel.pool.ntp.org iburst 自身带有的注释掉
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
allow 0.0.0.0/0 加上就是允许所有网段同步
local stratum 10 去掉注释#,当互联网无法连接时,仍然可以为客户端同步
[root@rocky ~]# systemctl restart chronyd
[root@rocky ~]# hostname -I
192.168.3.130
客户端配置
[root@centos7 ~]# vi /etc/chrony.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 192.168.3.130 iburst 把原有的注释掉,加上此行
[root@centos7 ~]# systemctl restart chronyd.service
CDN原理
CDN的基本原理是在用户访问相对集中的地区和网络设置一些缓存服务器。当用户访问网站时,利用全局的负载均衡技术将用户的访问指向距离最近的缓存服务器,由缓存服务器代替源站响应用户的访问请求。
搭建智能DNS
实现不同地域客户端解析到不同主机
准备5台主机
DNS主服务器和web服务器:10.0.0.8/24,192.168.3.140/24
web服务器:10.0.0.7
web服务器:192.168.3.130
客户端服务器:192.168.3.141
客户端服务器:10.0.0.6
DNS主服务器配置
安装bind,bind-utils,之后进入该配置文件
[root@rocky ~]# yum install bind -y ;yum install bind-utils -y
Last metadata expiration check: 1:23:05 ago on Sat 05 Aug 2023 01:57:18 PM CST.
Package bind-32:9.11.36-5.el8_7.2.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Last metadata expiration check: 1:23:06 ago on Sat 05 Aug 2023 01:57:18 PM CST.
Package bind-utils-32:9.11.36-5.el8_7.2.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@rocky ~]# cat /etc/named.conf
..............................................
acl beijingnet{
192.168.3.0/24;
};
acl shengzhengnet{
10.0.0.0/24;
};
acl othernet {
any;
};
options {
// listen-on port 53 { 127.0.0.1; };
...............................................
// allow-query { localhost; };
...............................................
//zone "." IN {
// type hint;
// file "named.ca";
// };
view beijingview {
match-clients { beijingnet; };
include "/etc/named.rfc1912.zones.bj";
};
view shengzhengview {
match-clients { shengzhengnet; };
include "/etc/named.rfc1912.zones.sz";
};
view otherview {
match-clients { othernet; };
include "/etc/named.rfc1912.zones.other";
};
//include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
配置区域文件
[root@rocky ~]# cat /etc/named.rfc1912.zones.bj
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.bj";
};
[root@rocky ~]# cat /etc/named.rfc1912.zones.sz
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.sz";
};
[root@rocky ~]# cat /etc/named.rfc1912.zones.other
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.org" {
type master;
file "magedu.org.zone.other";
};
配置数据库文件
[root@rocky ~]# cat /var/named/magedu.org.zone.bj
$TTL 1D
@ IN SOA master admin.magedu.org. (
20230804 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 192.168.3.130
www CNAME websrv
[root@rocky ~]# cat /var/named/magedu.org.zone.sz
$TTL 1D
@ IN SOA master admin.magedu.org. (
20230804 ; 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
[root@rocky ~]# cat /var/named/magedu.org.zone.other
$TTL 1D
@ IN SOA master admin.magedu.org. (
20230804 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.8
websrv A 157.0.0.1
www CNAME websrv
[root@rocky ~]# rndc reload //已开启named服务使用这个
[root@rocky ~]# systemctl start named
所有web服务器安装httpd
yum install httpd -y
web服务器:192.168.3.140
[root@rocky ~]# echo GG Bond in other > /var/www/html/index.html
web服务器:192.168.3.130
[root@rocky ~]# echo GG Bond in beijing > /var/www/html/index.html
web服务器:10.0.0.7
[root@rocky ~]# echo GG Bond in shengzheng > /var/www/html/index.html
所有web服务器
systemctl start httpd
主机192.168.3.141,DNS要指向192.168.3.130
[root@centos7 ~]# dig A www.magedu.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> A www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24072
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.magedu.org. IN A
;; ANSWER SECTION:
www.magedu.org. 86400 IN CNAME websrv.magedu.org.
websrv.magedu.org. 86400 IN A 192.168.3.130
;; AUTHORITY SECTION:
magedu.org. 86400 IN NS master.magedu.org.
;; ADDITIONAL SECTION:
master.magedu.org. 86400 IN A 10.0.0.8
;; Query time: 0 msec
;; SERVER: 192.168.3.140#53(192.168.3.140)
;; WHEN: Sat Aug 05 17:15:03 CST 2023
;; MSG SIZE rcvd: 117
[root@centos7 ~]# curl www.magedu.org
GG Bond in beijing
主机10.0.0.6,DNS要指向10.0.0.8
[root@localhost ~]# curl www.magedu.org
GG Bond in shengzheng
主机192.168.3.140,DNS要指向157.0.0.1
[root@rocky ~]# curl www.magedu.org
GG Bond in other
DNS解析流程
客户端发起网址链接,通过DNS代理服务器询问,如果不知道,代理服务器向根域名服务器询问(它说:不知道,.com或许知道),向.com服务器发起询问(它说:不知道,GGbond.com或许知道),向GG bond.com域名服务器发起询问(它说:知道)得到对应的IP地址,返回给DNS代理服务器,DNS读取缓存。最后返回给用户。
iptables
iptables 实现主机防火墙。5000-6000端口仅192.168.0.0/24网段内的主机访问
使用iptables前提需要关闭firewalld
[root@rocky conf]# systemctl disable --now firewalld
查看iptables的策略
[root@rocky conf]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
指定端口时,要调用 -m multiport 模块
[root@rocky conf]# iptables -AINPUT -s 192.168.0.0/24 -p tcp -m multiport ! --dport 5000:6000 -j REJECT
[root@rocky conf]# 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 0.0.0.0/0 multiport dports !5000:6000
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
安装httpd,修改端口为5001
[root@rocky conf]# yum install -y httpd; echo GG bond in Beijing > /var/www/html/index.html
[root@rocky conf]# sed -i '/^Listen 80/c Listen 5001' /etc/httpd/conf/httpd.conf
[root@rocky conf]# systemctl enabeld --now httpd
用另外一台192.168.3.140测试一下
[root@rocky ~]# hostname -I
192.168.3.140
[root@rocky ~]# curl 192.168.3.130
curl: (7) Failed to connect to 192.168.3.130 port 80: Connection refused
[root@rocky ~]# curl 192.168.3.130:5001
GG Bond in beijing
firewalld
centos7推出的防火墙管理工具firewalld,默认是已安装的。
启动服务
[root@rocky ~]# systemctl start firewalld
设置5000-6000端口仅192.168.3.0/24网段内的主机访问
[root@rocky ~]# 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'
success
[root@rocky ~]# firewall-cmd --reload
success
[root@rocky ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.3.0/24" port port="5000-6000" protocol="tcp" accept
开启httpd服务,修改端口为5000
[root@rocky conf]# yum install -y httpd; echo GG bond in Beijing > /var/www/html/index.html
[root@rocky conf]# sed -i '/^Listen 80/c Listen 5001' /etc/httpd/conf/httpd.conf
[root@rocky conf]# systemctl enabeld --now httpd
用另外192.168.3.140的机器测试一下
[root@rocky .ssh]# hostname -I
192.168.3.140
[root@rocky .ssh]# curl 192.168.3.130:5000
GG Bond in beijing
nftable
实现主机防火墙。5000-6000端口仅192.168.3.0/24网段内的主机访问
添加表,链
[root@rocky ~]# nft add table inet test_table
[root@rocky ~]# nft add chain inet test_table test_filter_input_chain { type filter hook input priority 0 \; }
[root@rocky ~]# nft add chain inet test_table test_chain
在里面添加规则
[root@rocky ~]# nft add rule inet test_table test_filter_input_chain ip saddr 192.168.3.0/24 tcp dport {5000-6000} accept
输入下面的命令完成。注意:至少要添加一个规则确保远程连接不会断开。
[root@rocky ~]# nft add rule inet test_table test_filter_input_chain reject with icmp type port-unreachable
MySQL的发行版本
MySQL Community Server
这是MySQL的免费版本,可在GPL下使用和分发。
MySQL Enterprise Server
这是MySQL的商业版本,可以获得更好的支持和功能,还有附加的企业级功能。
Percona MySQL
是MySQL 重要的分支之一,它基于InnoDB 存储引擎的基础上,提升了性能和易管理性,最后形成了增强版的XtraDB 引擎,可以用来更好地发挥服务器硬件上的性能。
MariaDB
由MySQL初始创建者在MySQL被Oracle收购之后,又独立成立了一家公司,来开发的数据库。其以MySQL5.5源代码为基础,发展起来。MariaDB并不能完全和MySQL官方版完全兼容,但大多数功能是兼容的。
Mysql索引的作用
排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引擎实现
优点:
索引可以降低服务需要扫描的数据量,减少了10次数
索引可以帮助服务器避免排序和使用临时表
索引可以帮助将随机I/O转为顺序I/0
缺点:
占用额外空间,影响插入速度
Mysql btree索引的原理
btree是一种平衡的查找树,它可以利用多个分支节点来减少查询数据时所经历的节点树,这样可以节省存取时间,提高效率。
Mysql安全加固
Mysql 版本8.0
- 设置数据库管理员root口令
- 删除anonymous用户帐号
- 禁止root远程登录
- 删除test数据库
- 是否立即重新加载特权表
[root@rocky ~]# mysql_secure_installation
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)