Linux基础服务(6.8-6.12)学习内容
SSH 安全的远程访问服务;替代telnet(早期远程服务)
NTP 网络时间协议;
FTP 文件传输协议;
NFS 网络文件系统,Linux中目录共享的的服务;
Samba 跨系统文件共享,Windows与Linux之间文件共享;
Rsync 网络文件同步;
DNS 域名解析服务;
DHCP 动态主机地址服务;
HTTP 超文本传输协议;
SSH:介绍
安全的远程访问链接服务;
使用混合加密技术,对数据进行加密;
对称加密:加密解密使用相同的密钥;
非对称加密:使用公钥和私钥;公钥只负责加密,私钥负责解密;
混合加密:使用非对称加密方式,加密对称加密的密码;
防止中间人攻击;
SSH用于对Linux/Unix服务器的远程管理;
软件安装
# Server上安装ssh-server(被连接的机器)
yum install -y openssh-server
# Client上安装ssh(发起连接的机器)
yum install -y openssh-clients模拟创建双端操作
SSH服务端配置文件设置
修改之前为了安全先备份一次文件
cp /etc/ssh/sshd_config{,.bak}
编辑 SSH服务器配置文件
vim /etc/ssh/sshd_config
#修改端口
Port 端口号 # sshd默认端口22,用于修改端口(注意防火墙是否放行)
#是否允许root登录
PermitRootLogin yes
#公钥认证,客户端公钥存放位置(默认文件位置)
AuthorizedKeysFile .ssh/authorized_keys
#是否允许空密码登录,默认不允许
PermitEmptyPasswords no
#是否允许密码登录,默认允许
PasswordAuthentication yes
#是否使用DNS验证,默认不允许
UseDNS No # 如果开启,会导致登录认证变慢
#黑名单
DenyUsers 用户名
DenyUsers 用户名@192.168.8.17
DenyUsers 用户名@192.168.8.0/24 # 必须指定用户名或用户名加IP,不能只有IP
#白名单(优先级高于黑名单)
AllowUsers 用户名
AllowUsers 192.168.8.17
AllowUsers 用户名@192.168.8.17 # 可以选择用户名或者IP,或双重认证
AllowUsers 用户名@192.168.8.0/24 # 允许某个网段登录
#重启服务端
systemctl restart sshd
#客户端登陆服务端
ssh -p 端口 root@192.168.8.18 # -p 是默认端口被修改需要输入修改后的端口登录SSH服务端公钥及私钥设置
#创建公钥及私钥
ssh-keygen
#发送公钥给服务端指令
ssh-copy-id 用户名@IP地址
#密钥路径位置
cd ~/.shh
#密钥文件名
id_rsa # 私钥
id_rsa.pub # 公钥免密码登录
在客户端生成一对密钥(公钥+私钥);
将公钥发给服务端;
客户端登录服务器时,服务端使用公钥(客户端发给服务端的),加密一串随机数;
客户端通过私钥解密随机数,将随机数返回给服务端。服务端验证成功后建立连接;
注意事项
第一次发送公钥的时候需要经过密码验证,之后登录就不需要密码;
在服务器场景中公钥只能加密,不能解密,私钥用来解密,不能加密;
一对密钥可以对(无数台)服务器使用,私钥不能丢失;
命令
scp # 使用ssh协议进行文件内容远程传输
-r # 上传、下载目录时使用
-p # 设置端口号
scp 本地文件路径 用户名@IP:远程服务器文件路径 # upload上传
scp 用户名@IP:远程服务器文件路径 本地文件路径 # download下载NTP:网络时间协议
专门用于网络中各种设备进行时间同步;
NTP是应用层协议,底层基于UDP协议,使用123端口;
准备工作
#关闭客户端与服务端防火墙
1.关闭防火墙
systemctl stop firewalld # 关闭
systemctl disable firewalld # 开机不启动
2.关闭SELinux(沙盒)
setenforce 0 # 临时关闭
永久关闭配置文件
vim /etc/selinux/config # 配置文件路径
修改为:SELINUX=disabled # 修改配置内容,永久关闭
虚拟机重启
init 6 # 永久关闭需要重启服务器安装NTP
#安装时间同步工具【客户端】
yum install -y chrony
#修改配置文件(时间中继服务器)
1.配置上级时间同步服务器,用于同步网络时间;
2.设置局域网子网,允许主机同步时间;
#为了防止出现问题优先备份一下
cp /etc/chrony.conf{,.bak} # 备份
cp /etc/chrony.conf{,.`date +"%Y%m%d%H%M%S"`.bak} # 备份一个带具体时间的
#修改配置文件
vim /etc/chrony.conf # 配置文件
server ntp.aliyun.com iburst # 访问外网服务器时间地址
server ntp.ntsc.ac.cn iburst # 访问外网服务器时间地址
allow 192.168.8.0/24 # 允许这个网段的可以跟我同步时间
#删除其中的空白行
grep -Ev "^$|^#" chrony.conf # 查看几行有用的内容打印到屏幕
#重启
systemctl restart chrony # 重新启动
systemctl enable chrony # 开机启动
#验证时间同步
chronyc sources -v # 查看时间源服务器
chronyc tracking # 查看时间同步详情
#单次强制同步时间工具
ntpdate
#显示当前日期和时间
date
#以指定格式显示日期和时间
date +"%Y-%m-%d %H:%M:%S"
#设置系统时间为指定时间
date -s “指定日期和时间”FTP/SFTP/FTPS:文件传输协议
FTP基于TCP协议的文件传输协议,使用21端口传输控制命令,使用20端口传输数据
SFTP使用SSH协议传输文件,使用22端口
FTPS使用SSL加密层
FTP命令行客户端(Linux/Windows/MacOS)
图形化客户端(FileZilla/Xftp/Winscp)
三种认证模式
本地用户模式:基于 Linux 本地账号密码进行认证,配置简单,但是一旦被破解,服务器信息就很危险
匿名用户模式:任何人无需密码直接登录
虚拟用户模式:单独为 FTP 创建用户数据库,基于口令验证账户信息,只适用于 FTP 服务,不会影响其他用户信息,最为安全。
准备工作
#关闭客户端与服务端防火墙
1.关闭防火墙
systemctl stop firewalld # 关闭
systemctl disable firewalld # 开机不启动
2.关闭SELinux(沙盒)
setenforce 0 # 临时关闭
永久关闭配置文件
vim /etc/selinux/config # 配置文件路径
修改为:SELINUX=disabled # 修改配置内容,永久关闭
虚拟机重启
init 6 # 永久关闭需要重启服务器安装及配置文件
# 0.安装ftp客户端(Linux)
yum install -y ftp
# 1.安装ftp服务端(linux)
yum install -y vsftpd
# 2.备份文件保证安全
cp /etc/vsftpd/vsftpd.conf{,.bak}
# 3.修改配置
vim /etc/vsftpd/vsftpd.conf
# 4.重新启动服务,开机启动
systemctl start vsftpd
systemctl enable vsftpd
#配置文件注释翻译
#过滤出非注释行, 非空行
[root@ftp-server ~] grep -vE '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES # 是否开启匿名用户允许访问(安全考虑建议修改NO)
local_enable=YES # 是否允许本地用户登录FTP
write_enable=YES # 全局设置, 是否容许写入, 开启允许上传的权限
local_umask=022 # 本地用户上传文件的 umask
dirmessage_enable=YES # 允许为目录配置显示信息, 显示每个目录下面的 message_file 文件的内容
xferlog_enable=YES # 开启日志功能, 以及存放路径
xferlog_file=/var/log/vsftpd.log # 日志路径
connect_from_port_20=YES # 使用 20 端口进行连接
xferlog_std_format=YES # 标准日志格式
listen=YES # 绑定到监听端口
listen_ipv6=YES # 开启 ipv6(这里NO,否则跟监听端口冲突)
pam_service_name=vsftpd # 设置 PAM 的名称
userlist_enable=YES # 设置用户已列表, 允许或是禁止
tcp_wrappers=YES # 控制主机访问, 检查 /etc/hosts.allow hosts.deny 的配置达到防火墙作用
分解:
grep -Ev "^#|^$" vsftpd.conf.bak > vsftpd.conf
grep文本搜索 -E正则表达式 -v排除所有 ^#开头#和^$所有空行 >重定向将结果覆盖目标文件
作用:把不必要的注释和空行去除,只保留精简的配置文件远程连接及指令操作
# 客户端远程连接服务端使用ftp指令
ftp IP # 连接之后需要输入用户名(普通用户、root禁止访问)及密码
# 登录成功会提示
230 Login successful.
# 服务器文件下载到本地(默认下载位置为服务器用户家的目录)
get 文件名 # 下载后文件存放位置在windows的家目录里
# 本地上传文件到服务器(默认上传位置为windows的家目录)
put 文件名 # 上传后文件存放位置在服务器用户家目录里(登录的用户家目录)
注:ftp登录模式下可以使用一些基础命令来查看文件
例:ls # 查看文件有哪些
delete 文件名 # 删除文件
quit # 退出ftp模式用户登录模式
匿名登陆
#修改配置文件:定义匿名用户的权限,如下
修改配置如下:
[root@ftp-server ~] vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES # 允许匿名访问
anon_upload_enable=YES # 允许匿名用户上传
anon_mkdir_write_enable=YES # 允许匿名用户创建目录
anon_other_write_enable=YES # 允许匿名用户修改目录
匿名用户目录:
/var/ftp (FTP 匿名用户的默认根目录)
重启服务,且加载开机自启
systemctl restart vsftpd # 重启服务
systemctl enable --now vsftpd # 开启自启本地用户模式
使用 Linux 本地用户模式(基于系统层面的用户),比匿名用户模式更安全
修改配置文件:关闭匿名模式,开启本地用户模式
[root@ftp-server pub] vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO # 关闭匿名用户模式
local_enable=YES # 开启本地用户模式
write_enable=YES # 设置可写权限
local_umask=022 # 文件 umask 值
userlist_enable=YES # 启用用户列表功能
userlist_deny=YES # 将列表中的用户设为禁止登录
配置文件介绍
vim /etc/vsftpd/ftpusers # 这个文件里面写入的名字, 都是禁止登录的
vim /etc/vsftpd/user_list # 行为可以配置,可作为黑名单,也能作为白名单
特别注意:
/etc/vsftpd/ftpusers 是一个优先级更高的“硬”黑名单。如果一个用户出现在 ftpusers 文件中,无论 user_list 如何设置,他都绝对无法登录
配置项 设置值 user_list 的角色效果说明
userlist_enable=YES
userlist_deny=YES 黑名单 禁止文件中列出的用户登录(这是常见默认配置)
userlist_enable=YES
userlist_deny=NO 白名单 只允许文件中列出的用户登录,其他所有用户均被拒绝
userlist_enable=NO (无效) vsftpd 会忽略 user_list 文件,不做额外检查
重启服务,且加载开机自启
systemctl restart vsftpd # 重启服务
systemctl enable --now vsftpd # 开启自启虚拟用户模式
#首先安装工具
yum install -y libdb libdb-utils
#创建用于进行 FTP 认证的用户数据库,奇数行:账户名 偶数行:密码
[root@ftp-server vsftpd] vim /etc/vsftpd/ftp_user.txt
wangj # 奇数 用户名
123456 # 偶数 密码
由于这样的明文信息很不安全,且 vsftpd 也无法加载该格式的数据
因此我们还需要用 db_load 命令对 ftp_user.txt 文件数据加密,并设置权限使得普通用户无权限查阅。
# 创建加密文件 -T 和 -t 参数必须加上
# 用于转化普通文本为 vsftpd 识别的数据库文件
db_load -T -t hash -f /etc/vsftpd/ftp_user.txt /etc/vsftpd/ftp_user.db
拆解:db_load 命令本身;-T 允许非标准格式:-t hash 指定数据存储算法;
-f /etc/vsftpd/ftp_user.txt 指定输入文件;/etc/vsftpd/ftp_user.db 指定输出文件
# 检查文件属性
[root@ftp-server vsftpd] file ftp_user.db
ftp_user.db: Berkeley DB (Hash, version 9, native byte-order)
# 查看文件权限
[root@ftp-server vsftpd] ll ftp_user.db
-rw-r--r-- 1 root root 12288 Apr 8 19:10 ftp_user.db
# 修改文件权限规避安全风险
[root@ftp-server vsftpd] chmod 600 ftp_user.*
[root@ftp-server vsftpd] ll ftp_user.*
-rw------- 1 root root 12288 Apr 8 19:10 ftp_user.db
-rw------- 1 root root 28 Apr 8 19:10 ftp_user.txt
# 新建一个用户, 指定用户家目录, 且禁止登录
[root@ftp-server vsftpd] useradd -d /var/ftpdir -s /sbin/nologin vuser
拆解:useradd 创建新用户的命令;-d /var/ftpdir 指定用户的家目录;
-s /sbin/nologin 指定用户的登录 Shell为 /sbin/nologin(禁止登录);
vuser 要创建的用户名
注:创建用户是为了默认访问的文件夹路径且和 Linux 中的一个本地用户做一个映射关系,防止匿名用户登录后访问到该文件夹,但是系统没有此用户,报错目录权限问题;
# 授权此 ftpdir 的属性
[root@ftp-server vsftpd] setfacl -m u:vuser:rwx /var/ftpdir
拆解:setfacl 设置文件ACL权限;-m 修改 ACL 规则;
u:vuser:rwx 为用户 vuser 设置权限:读(r)+写(w)+执行(x)
/var/ftpdir 目标目录
# 添加 vuser 用户至 ftpusers 禁止用户登录文件
# 增大系统安全, 但是不会影响虚拟用户的登录
[root@ftp-server vsftpd] echo 'vuser' >> ftpusers
拆解:重定向 vuser 追加到 ftpusers 禁止用户登录文件
# 此时需要创建支持虚拟用户的PAM文件,PAM是一组安全机制的模块,编辑认证文件 /etc/pam.d/vsftpd
## 备份原有的 PAM 配置文件
[root@ftp-server pam.d] mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd_bak
# 编写新的 PAM 配置文件
# 注意 db 参数指定的是 db_load 生成的文件路径,无需添加后缀
[root@ftp-server pam.d] vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/ftp_user
account required pam_userdb.so db=/etc/vsftpd/ftp_user
# 最后修改 vsftpd 配置文件
vim /etc/vsftpd/vsftpd.conf # vim编辑修改
anonymous_enable=NO # 禁止匿名模式
local_enable=YES # 允许本地用户
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd # 指定 PAM 认证文件
userlist_enable=YES
userlist_deny=YES
tcp_wrappers=YES
guest_enable=YES # 开启虚拟用户
guest_username=vuser # 指定虚拟用户账号
allow_writeable_chroot=YES # 如果用户被限制只能在其家目录,允许用户可以对家目录写入数据
# 重启 FTP 服务
[root@ftp-server pub] systemctl restart vsftpd
NFS
Network File System 网络文件系统;
C/S架构 客户端和服务端架构 Client/Server,网络分布式文件系统;
服务端将磁盘上的目录进行共享,客户端可以像挂载本地磁盘一样使用服务端的共享目录;
共享目录中的文件数据还是存放在服务端,通过RPC(远程调用)协议实现数据共享;
安装及修改配置挂载文件
# 1.安装服务端与客户端
## 服务端
yum install -y nfs-utils rpcbind
## 客户端
yum install -y nfs-utils
## 服务端创建共享文件
mkdir -p /data/文件名{1..3} # 创建的文件名自定义
# 2.修改服务端的配置
vim /etc/exports [默认是空的文件]
#客户端挂载前验证挂载权限
showmount -e 服务端ip
#配置文件内容 目录路径 主机网段(权限)
例:/data/文件1 *(rw,async,no_root_squash) # 所有IP地址,无网段限制
/data/文件2 192.168.7.10(rw,sync,root_squash) # 服务器单个IP地址
/data/文件3 192.168.7.0/24(ro,async,root_squash) # 服务器网段IP地址
#nfs常用权限设置介绍
#二选一
rw # 可读可写
ro # 只读(只能查看,不能修改)
#二选一
sync # 同步模式(安全性高,I/O性能低)
async # 异步模式(安全性低,处理速度快,磁盘空闲时写入)
#二选一
no_root_squash # 允许客户端以root身份编辑服务端文件
root_squash # 不允许客户端使用root身份编辑
# 3.重启服务
systemctl restart rpcbind nfs-server # 重启服务(修改配置后执行)
systemctl enable --now rpcbind nfs-server # 开机自启 --now立刻执行 服务
# 4.测试结果是否正常
exportfs -avr
#客户端操作
##创建挂载位置及文件
mkdir -p /mnt/文件名{1..3}
#客户端挂载网络文件系统NFS
## 临时挂载
mount -t nfs IP地址:/文件路径 /挂载路径 # -t 指定文件系统类型
## 永久挂载
vim /etc/fstab # 编辑配置文件,在最下面添加
服务端IP:/服务端路径 /客户端路径 nfs defaults 0 0
## 永久挂载后检查是否成功
mount -a # 检查配置文件挂载其中所有未被挂载的设备Autofs工具
# 挂载本地磁盘、U盘、光盘、NFS,使用时才去动态挂载。节约资源。空闲时(5分钟),自动卸载。
# 在客户端安装Autofs
yum install -y autofs
# 配置文件介绍
主配置文件/etc/auto.master # 设置挂载点及空闲时间自动卸载
子配置文件/etc/auto.nfs # 设置nfs服务链接信息
# 修改autofs主配置文件,添加挂载点设置及时间设置
vim /etc/auto.master
/挂载点 /etc/auto.nfs --timeout=60 # 挂载点是客户端
# 子配置文件,具体的nfs服务链接信息
vim /etc/auto.nfs
文件名 -fstype=nfs 服务器IP地址:/文件位置 # 文件名是客户端 文件位置是服务端
# 修改好配置重启服务
systemctl restart autofsSAMBA
SMB协议,Windows专属私有的目录共享、共享打印机、网络邻居协议;
一个局域网Windows与Linux系统之间跨系统共享文件;
# NAS 网络文件共享服务器
# 安装服务端
# 安装客户端(windows自带)
yum install -y samba samba-client
# 新建一个用户,用于文件共享
useradd -s /sbin/nologin 用户名 # -s 用户无法登录系统,只能用于SMB共享访问
# 创建smb共享密码
smbpasswd -a 用户名 # -a 添加一个新的SMB用户(同时设置密码)
# 修改配置文件
# 为了安全优先备份
cp /etc/samba/smb.conf{,.bak}
vim /etc/samba/smb.conf
# 配置文件类似如下
[用户文件名] # 共享名
comment = "samba test" # 描述信息
path = /home/文件名 # 共享目录
browseable = yes # 所有人可见
public = yes # 是否公开
writable = yes # 是否允许修改
create mask =0644 # 文件权限
directory mask =0755 # 目录权限
# 重启服务
systemctl restart smb nmb
# 连接本地Windows方法
打开我的电脑,右键[添加一个网络位置],指定网络位置[\\IP地址\共享名],输入用户及密码。rsync:数据同步
cp+scp(全量复制)
全量复制:将目录中所有文件全部复制同步一遍,存在的文件会被覆盖;不智能,重复复制,浪费资源和时间;
增量复制(差异复制):仅拷贝新文件或修改过的文件,相同文件不会重复复制;
rsync可以增量复制;
rsync两种模式:命令模式与服务模式(backup备份服务器;用于定时或实时备份重要数据)
服务模式与命令模式的区别:
服务模式需要运行rsyncd后台守护进程
服务模式可以自定义用户(虚拟用户),安全性更高;
服务模式可以定义权限更加灵活;
# 命令模式使用方法和scp类似
#下载安装rsync
yum install -y rsync
# 上传模式,将本地文件上传到远程服务器
rsync [选项] /本地文件路径 用户名@IP:/路径/ # 上传包括文件夹及里面的内容
rsync [选项] /本地文件路径/ 用户名@IP:/路径/ # 上传文件夹里的内容不包括文件夹
例:rsync -avzP /etc root@192.168.7.21:/opt/
# 下载模式
rsync [选项] 用户名@IP:/路径 /本地文件路径/ # 下载包括文件夹及里面的内容
rsync [选项] 用户名@IP:/路径/ /本地文件路径/ # 下载文件夹里的内容不包括文件夹
例:rsync -avzP root@192.168.7.10:/etc /tmp/
# 本地模式类似cp命令
rsync [选项] /文件或目录 /本地路径
# 选项
-a 归档模式(递归+保留属性,等价于 -rlptgoD)
-v 显示详细过程(-vv 更详细)
-z 传输时压缩数据(节省带宽)
--delete 删除目标中源不存在的文件(镜像同步)
--exclude 排除文件/目录(如 --exclude="*.log")
-e ssh 通过 SSH 加密传输(可指定端口 -e "ssh -p 2222")
-P 显示进度+断点续传(等价于 --partial --progress)定时同步:使用 crontab 计划任务
# 准备好免密登录创建密钥,避免无法连接
# 创建定时任务
crontab -e
# 每天凌晨2:00进行数据备份
0 2 * * * /usr/bin/rsync -azP --delete /文件路径 用户名@IP地址:/文件路径
# 加时间戳
$(date +\%Y\%m\%d) # 20260611
$(date +\%Y-\%m-\%d) # 2026-06-11
$(date +\%Y\%m\%d_\%H\%M\%S) # 20260611_020000
$(date +\%s) # 1749600000 (Unix时间戳)
$(date +\%u) # 星期几(1-7)实时备份:安装inotify工具
监控目录变更,目录中文件发生:create、update、delete等操作时,自动执行rsync命令实现实时数据同步
# 准备好免密登录创建密钥,避免无法连接
# 安装扩展源
yum install -y epel-release
# 安装文件监控工具
yum install -y inotify-tools
#下载安装rsync
yum install -y rsync
# 如果镜像里面没有可以挂载阿里云镜像
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 编写实时同步脚本
vim sync.sh
# 脚本内容
#!/bin/bash
while inotifywait -r -e modify,create,delete,move /data/;do
rsync -avz --delete /data/ root@192.168.7.10:/opt/data/
done
# 在后台运行脚本
bash sync.sh &>/dev/null &
# 验证同步效果
可以在文件里添加或者删除来试试DNS
DNS:介绍
域名系统,是互联网的“电话簿”,所有网络的应用基础,同时承载服务发现,安全验证等关键功能;
是一个分布式、层次化的数据库系统,其核⼼作⽤是:
正向解析:将域名(如 www.baidu.com )转换为IP地址(如 110.242.68.3 )
反向解析:将IP地址转换为对应的域名(⽤于邮件服务器⾝份验证、⽇志溯源等)
服务定位:通过SRV记录指定特定服务的服务器地址和端⼝
安全验证:通过TXT、CAA等记录实现邮件反垃圾、SSL证书验证等功能
默认端⼝:UDP 53(⽤于常规查询,速度快)、TCP 53(⽤于区域传输和⼤于512字节的查询,如DNSSEC)
分布式架构:没有任何⼀台服务器存储全球所有域名信息,数据分散在全球各级服务器中
缓存机制:各级节点都会缓存查询结果,⼤幅提升解析速度并减轻根服务器压⼒
层次化命名空间:
DNS采⽤树状层次结构,从根到叶依次为:根域 → 顶级域→ ⼆级域 → ⼦域 → 主机名。
DNS层次化命名
. (根域) ├── com. (通用顶级域) │ ├── baidu.com. (二级域) │ │ ├── www.baidu.com. (主机名/三级域) │ │ └── mail.baidu.com. │ └── zuolaoshi.cn. ├── cn. (国家顶级域) │ ├── edu.cn. (二级域) │ │ └── tsinghua.edu.cn. │ └── gov.cn. └── org. (通用顶级域)
各层级详解
根域(Root Domain)
⽤ . 表⽰,是整个DNS体系的最顶层
全球共有13组根服务器(编号A-M),由不同机构运营,实际有数百台镜像分布在全球
根服务器只存储顶级域服务器的地址信息
顶级域(TLD, Top-Level Domain)
根域的直接⼦域,分为三类:
通⽤顶级域(gTLD):.com(商业)、 .org(⾮盈利)、 .net (⽹络)、.gov (政府)、.edu (教育)等
国家/地区顶级域(ccTLD):.cn (中国)、.us (美国)、.jp (⽇本)、.uk (英国)等
新通⽤顶级域(New gTLD): .app 、 .dev、 .xyz 、.shop 等
⼆级域(Second-Level Domain)
由个⼈或组织申请注册的域名,如 baidu.com 、zuolaoshi.cn 是域名管理的基本单元,注册者拥有该域下所有⼦域的管理权
⼦域(Subdomain)
⼆级域下创建的域名,⽤于划分不同的业务或部⻔
如 www.baidu.com 中的 www 、 mail.qq.com 中的mail
完全限定域名(FQDN, Fully Qualified DomainName)
从主机名到根域的完整路径,末尾必须以 . 结尾
⽰例: www.zuolaoshi.cn. (完整),⽽www.zuolaoshi.cn 是相对域名
13台根DNS服务器
DNS服务时最常用的分类方式:
主服务器:储存区域数据的原始副本,所有修改都在此进行;
数据权威,可读写,一个区域只能有一个主服务器;
从服务器:从主服务器同步区域数据,提供冗余和负载均衡;
数据只读,自动同步,一个区域可以有多个从服务器 ;
缓存服务器:仅缓存查询结果,不储存任何权威区域数据;
不负责解析,只加速访问,常用于企业内网;
转发器:将无法解析的请求转发给上游DNS服务器;
简化内网DNS配置,统一出口;
从全球DNS体系的角度看,服务器分为:
根域名服务器:管理顶级域服务器地址;
顶级域服务器:管理对应顶级域下的二级域服务器地址;
权威域名服务器:管理特定域名的所有记录,是该域名的最终权威来源
递归解析器:替客户端完成整个递归查询过程,返回最终结果(我们常用的8.8.8.8、114.114.114.114都是递归解析器);
DNS查询类型
递归查询(Recursive Query)【一般使用】
特点:客⼾端只发送⼀次请求,服务器替客⼾端完成所有查询⼯作,最终返回完整的结果或失败信息
应⽤场景:客⼾端 → 本地DNS服务器(递归解析器)
类⽐:你问同学"北京在哪⾥?",同学帮你查地图,然后直接告诉你答案
迭代查询(Iterative Query)
特点:服务器返回下⼀个应该查询的服务器地址,客⼾端需要⾃⼰向这个新服务器发送请求,直到得到结果
应⽤场景:本地DNS服务器 → 根服务器 → 顶级域服务器 → 权威服务器
类⽐:你问同学"北京在哪⾥?",同学说"我不知道,但地理⽼师知道",你再去问地理⽼师,地理⽼师说"我不知道,但地图册上有",你再去查地图册
查询流程案例
⽤⼾在浏览器输⼊ www.zuolaoshi.cn ,完整解析过程:
浏览器检查⾃⾝缓存,有则直接使⽤
浏览器查询操作系统缓存(如Windows的hosts⽂件{具体在:C:\Windows\System32\drivers\etc}、Linux的 /etc/hosts )
操作系统向本地DNS服务器发送递归查询请求
本地DNS服务器检查⾃⾝缓存,有则直接返回
本地DNS服务器向根服务器发送迭代查询请求
根服务器返回 .com 顶级域服务器的地址
本地DNS服务器向 .com 顶级域服务器发送迭代查询请求
.com 服务器返回 zuolaoshi.cn 权威服务器的地址
本地DNS服务器向 zuolaoshi.cn 权威服务器发送迭代查询请求
权威服务器返回 www.zuolaoshi.cn 的IP地址
本地DNS服务器将结果返回给操作系统,同时缓存结果
操作系统将结果返回给浏览器
浏览器使⽤该IP地址访问服务器
DNS:域名解析
# 前期准备工作
## 关防火墙及关SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
# CentOS7需要安装bind-utils(域名信息探查器)
yum install bind-utils
# dig 命令查看 dns设置
dig或dig @IP地址 域名
# 安装软件包
yum -y install bind*
# 启动服务
systemctl restart named
systemctl enable named
# 配置文件位于/etc/bind/目录下
主要包括named.conf.options和named.conf.local两个文件
# 查看named的主配置文件
## 修改文件前优先备份保证安全
cp /etc/named.conf{,.bak}
## 编辑配置文件
vim /etc/named.conf
修改内容:
listen-on port 53 { any; }; # 绑定的地址需要修改(any是所有)
allow-query { any; }; # 允许查询的服务地址(any是所有)
# 修改辅助域配置文件
# 确定“域”名 --> test.com(可以自己起)
/etc/named.conf 或 /etc/named.rfc1912.zones # 一般用rfc1912修改
vim /etc/named.rfc1912.zones # 编辑辅助域配置文件
添加内容:
# 定义正向解析域
zone "test.com" IN { # test.com (自己起的域名)
type master;
file "test.com.zone"; # test.com.zone (解析文件名)文件位于 /var/named/ 下
# 正向解析是设定好域名,通过域名从正向解析文件中找响应的IP地址。
allow-update { none; }; # 默认不允许slave从服务器同步
};
# 定义反向解析域
zone "7.168.192.in-addr.arpa" IN {
type master;
file "7.168.192.zone"; # 7.168.192.zone(解析文件名)文件位于 /var/named/ 下
allow-update { none; }; # 默认不允许slave从服务器同步
};
# 到/var/named 下创建并修改zone文件
cd /var/named/
# 创建两个配置文件
touch test.com.zone 7.168.192.zone
## 编辑配置文件test.com.zone
vim test.com.zone
编辑内容:
$TTL 1D
@ IN SOA test.com. root.test.com. ( # test.com 自己写的 如需修改两个一起
2026061201 ; serial 版本号
1D ; refresh 更新时间
1H ; retry 重试时间
1W ; expire 终止时间
3H ) ; minimum 默认DNS缓存时间
IN NS dns.test.com.
www IN A 192.168.7.21 # 正向解析IP为域名
dns IN A 192.168.7.21 # 正向解析IP为域名
## 编辑配置文件7.168.192.zone
vim 7.168.192.zone
编辑内容:
$TTL 1D
@ IN SOA test.com. root.test.com. ( # test.com 自己写的 如需修改两个一起
2026061201 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.test.com.
21 PTR www.test.com. # 反向解析域名为IP
21 PTR dns.test.com. # 反向解析域名为IP
# 重启服务,检查dns是否生效
systemctl restart named
# 客户端DNS修改
## 修改网卡的dns设置为dns服务器:192.168.7.21或半图形化nmtui修改
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.7.21
# 重启网卡
systemctl restart network
# 查看成功与否(客户端)
nslookup 域名DNS:从服务器设置
yum -y install bind*
systemctl restart named
systemctl enable named
# 查看named的主配置文件
vim /etc/named.conf
###############################################
listen-on port 53 { any; }; # 绑定的地址需要修改
allow-query { any; }; # 允许查询的服务地址
##############################################
vim /etc/named.rfc1912.zones
##################################################################
zone "test.com" IN {
type slave; #服务类型为从服务器
masterfile-format text; #主服务器同步过来的数据配置文件的格式为文本,不然会乱码
masters { 192.168.8.133; }; #主服务器的IP地址是192.168.8.133
file "slaves/test.com.zone"; #同步过来的数据配置文件放在/var/named/slaves文件夹下,并调用
}; # 别忘记加 ;
# 定义反向解析域
zone "8.168.192.in-addr.arpa" IN {
type slave;
masterfile-format text; #主服务器同步过来的数据配置文件的格式为文本,不然会乱码
masters { 192.168.8.133; }; #主服务器的IP地址是192.168.8.133
file "slaves/8.168.192.zone"; #同步过来的数据配置文件放在/var/named/slaves文件夹下,并调用
};
##################################################################
# 主服务器需要更改的地方
vim /etc/named.rfc1912.zones
# 定义正向解析域
zone "test.com" IN {
type master;
file "test.com.zone";
allow-update { 192.168.8.140; }; # 允许的同步的从服务IP
also-notify { 192.168.8.140; }; # 动态通知从DNS更新
notify yes; # 有更新会告知从服务器
};
# 定义反向解析域
zone "8.168.192.in-addr.arpa" IN {
type master;
file "8.168.192.zone"; # 设定好ip的网络段,通过ip找域名
allow-update { 192.168.8.140; }; # 允许的同步的从服务IP
also-notify { 192.168.8.140; }; # 动态通知从DNS更新
notify yes; # 有更新会告知从服务器
};
# 分别重启主从的DNS服务器
systemctl restart named
# 同步成功时从服务器的/var/named/slaves/目录下会同步生成zone文件。
cd /var/named/slaves/
ls
# 修改网卡的dns设置为dns服务器:192.168.8.140
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.8.140
# 重启网卡
systemctl restart network
# 从服务器测试,然后停掉主服务器再测试。
nslookup 域名
> www.test.com
Server: 192.168.8.140
Address: 192.168.8.140#53
Name: www.test.com
Address: 192.168.8.22DHCP:动态主机配置协议
服务端给客户端自动分配IP地址、子网掩码、网关、DNS等内容;
# 搭建DHCP(服务端)
yum -y install dhcp # 安装dhcp服务
# 设置dhcp配置文件(设置的dhcp网段需要和自己网卡在一个网段)
默认配置文件为空需要cp一份模板操作
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 编辑配置文件
vim /etc/dhcp/dhcpd.conf
# 内容修改
#第47行
#设置dhcp网段和子网掩码,注意必须和本机IP的网段保持一致
subnet 192.168.7.0 netmask 255.255.255.0 {
#设置dhcp地址池范围
range 192.168.7.100 192.168.7.200;
#dns服务器IP地址
option domain-name-servers 114.114.114.114;
#设置网关
option routers 192.168.7.2;
#广播地址
option broadcast-address 192.168.8.255;
#设置默认租约时间:4小时
default-lease-time 14400;
#设置最大租约时间:8小时
max-lease-time 28800;
}
# 固定IP方法
## 获取mac
host prtsvr { # prtsvr 起的主机名
hardware ethernet # 客户机的mac地址;
fixed-address # 固定IP地址;
}
# 启动dhcp服务
systemctl start dhcpd
# 查看启动进程
netstat -anptu|grep dhcpdHTTP/HTTPS
介绍
HTTP:超文本传输协议;
HTTPS:安全的超文本超传输协议,在http基础上增加了SSL/TLS加密层;使用CA证书,进行网站安全验证与数据加密;
HTTP特点:
无状态 每次发送http请求都是独立的,没有关联,服务器不保留每次请求的状态;但是Session和Cookie基础可以实现保持用户的登录状态;
Session是服务器端的记录,Session_id,会话编号,会返回给客户端;
Cookie客户端将Session_id缓存在本地的Cookie中,再一次向服务端发送请求时会携带Session_id;
文本协议:请求和响应使用文本形式;
灵活性:支持不同的请求方式;
请求方式:
GET:仅查询服务端的内容,不对服务端数据做任何修改;
POST:修改服务端内容时使用,例如注册、发表内容、上传文件等;
PUT:主要用于对已有数据的更新操作;
DELETE:删除服务端的数据;
OPTIONS:查询服务器支持的HTTP方法;
HEAD:仅查询HTTP响应头信息;
响应的状态码
1xx(信息性状态码):
100:继续(Continue)
101:切换协议(Switching Protocols)
102:处理中(Processing)
2xx(成功状态码):
200:成功(OK)
201:已创建(Created)
202:已接受(Accepted)
204:无内容(No Content)
206:部分内容(Partial Content)
3xx(重定向状态码):
301:永久重定向(Moved Permanently)
302:临时重定向(Found)
303:参见其他(See Other)
304:未修改(Not Modified)
307:临时重定向(保持方法不变)(Temporary Redirect)
308:永久重定向(保持方法不变)(Permanent Redirect)
4xx(客户端错误状态码):
400:错误请求(Bad Request)
401:未授权(Unauthorized)
403:禁止访问(Forbidden)
404:未找到(Not Found)
405:方法不允许(Method Not Allowed)
408:请求超时(Request Timeout)
409:冲突(Conflict)
410:已消失(Gone)
413:请求体过大(Payload Too Large)
414:URI 过长(URI Too Long)
415:不支持的媒体类型(Unsupported Media Type)
429:请求过多(Too Many Requests)
5xx(服务器错误状态码):
500:内部服务器错误(Internal Server Error)
502:错误网关(Bad Gateway)
503:服务不可用(Service Unavailable)
504:网关超时(Gateway Timeout)
505:HTTP 版本不支持(HTTP Version Not Supported)
记忆口诀(可选参考)
1xx:收到了,继续
2xx:成功了
3xx:去别处找
4xx:你错了
5xx:我错了
静态网站与动态网站
静态网站:由html、css、js、图片、视频构成的网站,修改网页内容时,需要修改源代码;
优点:性能高,占用的资源少,访问速度快;
缺点:不灵活,不适合变更频繁的网站;
动态网站:服务端返回的响应信息是由后端程序动态生成的;浏览器上显示的内容是由前端程序+后端返回的数据组合生成;
优点:灵活,快速更新,内容可以通过后台频繁更新;
缺点:数据库容易成为性能瓶颈,架构更复杂,维护复杂;
简单静态网站
Apache (httpd):最经典的Web服务器,开源免费,兼容性好;
Nginx:高性能的Web服务器、反向代理、七层负载均衡服务器;
IIS(微软):Windows Server上自带的Web服务器;
Tomcat (java war包):主要用于Java Web项目的动态解析;
搭建局域网yum源
# CentOS7
yum install -y httpd
# Ubuntu
sudo apt install -y apache2
# web源码默认路径
/var/www/html # html放进去可以在网页显示
# 重启服务
systemctl restart httpd
# http配置文件的路径
/etc/httpd/conf/
# http主配置文件
/etc/httpd/conf/httpd.conf
## 修改文件为了安全备份一下
cp /etc/httpd/conf/httpd.conf{,.bak}
# 把注释和空行清除,只保留配置内容,追加到配置文件
grep -Ev "^$|.*#" httpd.conf.bak > httpd.conf
# 配置文件
ServerRoot "/etc/httpd" # 服务器根目录(存放配置、日志、模块等文件的基准路径)
Listen 80 # 监听 80 端口(HTTP 默认端口)
ServerAdmin root@localhost # 管理员邮箱地址(出现在错误页面等地方)
DocumentRoot "/var/www/html" # 网站文档根目录(默认访问的网页文件存放位置)
<Directory "/var/www"> # 针对 /var/www 目录的访问控制配置
AllowOverride None # 禁止使用 .htaccess 覆盖配置
Require all granted # 允许所有客户端访问该目录
</Directory> # 结束 /var/www 目录配置
<Directory "/var/www/html"> # 针对 /var/www/html 目录(实际网站根目录)的访问控制配置
Options Indexes FollowSymLinks # Indexes:当目录下没有 index.html 时显示文件列表
# FollowSymLinks:允许使用符号链接
AllowOverride None # 禁止使用 .htaccess 覆盖配置
Require all granted # 允许所有客户端访问
</Directory> # 结束 /var/www/html 目录配置
注:常用修改:
1.端口修改
2.默认访问的网页文件存放位置
3.目录的访问控制配置
4.目录(实际网站根目录)的访问控制配置
例:局域网挂载yum光盘
1. Listen 80 # 修改端口
2. DocumentRoot "/media/cdrom" # 修改访问的网页文件存放位置
3. <Directory "/media"> # 修改目录的访问控制配置
4. <Directory "/media/cdrom"> # 实际网站根目录的访问控制配置
注:文件存放位置、目录访问控制、实际目录访问控制,统一修改路径
# 重启服务
systemctl restart httpd
# 网页不生效操作
## 进入目录
cd /etc/httpd/conf.d/
## welcome.conf这个文件改名,停止生效
mv welcome.conf{,.bak}
# 去客户端配置yum
cd /etc/yum.repos.d/
# 把原有的配置文件改名,停止生效
mv CentOS-Media.repo{,.bak} # 本地配置文件
mv CentOS-xxxx.repo{,.bak} # xxxx其他yum
# 新建yum配置文件
## 自定义一个yum配置文件名
vim jywyum.repo # jywyum.repo (自己起的)
## 配置文件内容
[local]
name = "local" # 仓库介绍
baseurl = http://192.168.7.21 # 服务端IP地址
enabled = 1 # 开启
# 建立/更新缓存
yum makecache
# 测试的时候请卸掉已挂载YUM源
umount /dev/sr0 Linux基础服务回顾
SSH:安全远程登陆,混合加密(对称、非对称加密),SFTP;
默认端口:22
安全设置:白名单、黑名单、密钥登陆;
scp:安全远程复制(全量复制)少量文件,同步频率较低使用;
FTP:文件传输协议,文件批量的上传、下载、删除、移动、改名;
默认端口:21(传输命令) 20(传输数据)
服务模式:主动(服务器连接客户端);
被动模式:默认模式,客户端连接服务端;
登录模式:
匿名模式(共享模式,不安全不推荐);
本地模式(使用Linux内部用户和密码登录,运维人员内部使用)SFTP(22);
虚拟用户模式(自定义FTP使用的用户名、密码,只能上传、下载文件不能登录系统);
NTP:网络时间协议,互联网的基石;
NTP公共服务器、NTP中继服务器、NTP硬件服务器;
建议使用计划任务(crontab)周期性同步时间;
设置好上游时间服务器、局域网权限;
端口 123/udp
NFS:网络文件系统(Linux之间共享目录);
C/S架构,一个服务端可以共享目录给多个客户端;
目录、主机地址范围(*、子网、IP)、权限
ro、rw
sync、async
root_squash(客户端不允许使用root操作)、no_root_squash(允许root)
端口:
rpcbind端口:111/tcp、111/udp
nfs端口:2049/tcp、2049/udp
SAMBA:使用SMB协议,实现Linux与Windows之间共享目录,NAS
设置用户与权限
性能不如NFS
端口:139/tpc、445/tcp
Raync:命令模式、服务模式
特点:增量备份,适合大量文件,频繁同步,速度快、自动压缩节省带宽;
常用选项:-a(目录、保留权限、软连接等)、-v(显示详细信息)、-z(压缩传输)、-e(使用ssh端口加密传输)—delete(镜像同步、同步删除);
手动同步:偶尔同步
定时同步:规律同步,不是特别重要,但是每天更新的数据;
实时同步:数据变更立即同步,对于重要数据使用;
DNS:域名解析服务,分布式的域名存储数据库;
端口:53/udp
软件包:bind-9,服务名:named
正向解析(域名 -> IP)、反向解析(IP -> 域名)
递归查询(客户端 -> 服务端)服务端如果没有数据回去其他服务端查询,最终返回结果;
迭代查询(服务端 -> 服务端)服务端返回其他服务器的地址,不返回结果;
域名解析记录类型:
A 域名 -> IPv4
AAAA 域名 -> IPv6
CNAME 域名 -> 域名
NS 返回DNS服务的域名
PTR 反向解析
TXT 返回文本内容
Linux基础服务(6.8-6.12)学习内容
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法