Linux网络服务
DHCP: 动态IP分配协议
HTTP/HTTPS: 超文本传输协议
DNS:域名解析服务
FTP/SFTP: 文本传输服务
SSH:安全的远程连接服务
NTP:时间同步服务
NFS:网络文件服务
RSYNC:数据同步服务
SAMBA:多操作系统文件共享
- 1.安装服务
- 2.配置服务(注意,要细心)
- 3.启动服务
服务管理
systemctl : 对服务实现,查看状态、启动、关闭、重启、重新加载配置、开启和关闭开机启动等。
systemctl 参数 服务名
# 参数:
start 开启服务
stop 停止服务
restart 重启服务
try-restart 只重启正在运行的服务(不启动停止的服务)
reload 重新加载配置文件
status 服务状态
is-active 是否启动
enable 开机自启动
disable 关闭开机启动
is-enabled 是否开机启动
mask 屏蔽服务
unmask 取消屏蔽
# 以firewalld防火墙为例
[root@server-01 ~]# systemctl start firewalld
[root@server-01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since 三 2024-07-24 11:02:40 CST; 1s ago
Docs: man:firewalld(1)
Main PID: 1941 (firewalld)
CGroup: /system.slice/firewalld.service
└─1941 /usr/bin/python2 -Es /usr/sbin/firewalld --n...
7月 24 11:02:39 server-01 systemd[1]: Starting firewalld - dy...
7月 24 11:02:40 server-01 systemd[1]: Started firewalld - dyn...
7月 24 11:02:40 server-01 firewalld[1941]: WARNING: AllowZone...
Hint: Some lines were ellipsized, use -l to show in full.
[root@server-01 ~]# systemctl is-enabled firewalld
disabled
[root@server-01 ~]# systemctl enable firewalld
[root@server-01 ~]# systemctl is-enabled firewalld
enabled
[root@server-01 ~]# systemctl restart firewalld
[root@server-01 ~]# systemctl stop firewalld
[root@server-01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 三 2024-07-24 11:05:32 CST; 5s ago
Docs: man:firewalld(1)
Process: 2153 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 2153 (code=exited, status=0/SUCCESS)
7月 24 11:05:26 server-01 systemd[1]: Stopped firewalld - dyn...
7月 24 11:05:26 server-01 systemd[1]: Starting firewalld - dy...
7月 24 11:05:26 server-01 systemd[1]: Started firewalld - dyn...
7月 24 11:05:26 server-01 firewalld[2153]: WARNING: AllowZone...
7月 24 11:05:31 server-01 systemd[1]: Stopping firewalld - dy...
7月 24 11:05:32 server-01 systemd[1]: Stopped firewalld - dyn...
Hint: Some lines were ellipsized, use -l to show in full.
[root@server-01 ~]# systemctl disable firewalld
service 服务启动、关闭、重启、重新加载
service 服务 参数
# 参数
start 开启服务
stop 停止服务
restart 重启服务
# 服务启动脚本
/etc/init.d/服务 start
/etc/init.d/network start
/etc/init.d/network stop
/etc/init.d/network restart
重启网卡的三种方法
# CentOS8及之后的版本,重启网卡命令
nmcli c reload # 重新加载网络设置
nmcli c up ens160 # 重启ens160网卡
# Ubuntu Server
sudo netplan apply # 重新加载网络配置
sudo systemctl restart NetworkManager.service # 重启网络服务
进程管理
yum -y install psmisc
pstree 查看进程的树状结构
-p 查看子进程
ps -l 查看当前终端中运行的进程的详情
ps -aux 查看所有进程
# 杀死进程
kill -9 pid # 强制杀死进程
pkill 程序名 杀死进程
killall 程序名 # 杀死所有同名的进程
pgrep 查询pid
# 查询root用户启动的所有python命令的pid
pgrep -u root python
kill -9 `pgrep -u root python` # pkill -9 python
killall -9 python
# 将 & 写在命令最后,作用是将命令放到后台执行。
和Ctrl + z功能类似
tar -czf usr.tar.gz /usr/ &> /dev/null &
屏幕输出的内容(正确、错误)重定向到黑洞
&> /dev/null
SELinux
安全增强子系统。会导致部分服务无法访问,建议关掉。
# 永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# reboot 需要重启
# 临时关闭
setenforce 0
# 显示SELinux的状态
getenforce
# 显示Disabled表示关闭成功。
Disabled
防火墙
云服务自带==安全组==,可以不用防火墙。
iptables -F # 清空iptables的规则
# firewall用于替代iptables的新一代防火墙
可以使用:
firewall-cmd 管理防火墙
[root@server-01 ~]# firewall-cmd --state
not running
[root@server-01 ~]# systemctl start firewalld
[root@server-01 ~]# firewall-cmd --state
running
yum install -y httpd
systemctl start httpd
# 允许访问http服务
firewall-cmd --add-service=http
# 或者
firewall-cmd --add-port=80/tcp
# 移除服务(禁止访问)
firewall-cmd --remove-port=80/tcp
# 或者
firewall-cmd --remove-port=80/tcp
# 允许服务时,直接配置持久化
firewall-cmd --add-port=22/tcp --permanent
# 显示防火墙信息
firewall-cmd --list-all:列出防火墙规则
firewall-cmd --list-services:列出当前启用的服务。
firewall-cmd --list-ports:列出当前允许的端口。
ssh服务
安全的远程连接服务,替代了telnet服务。
ssh 的数据传输是经过加密的。
ssh服务默认端口:22
ip 确定数据发送给哪台主机。
ip+port 确定数据发送给哪个服务。
# 安装与启动
yum install -y openssh-server
systemctl start sshd
systemctl enable sshd
# Debin/Ubuntu 配置apt源
sudo apt install openssh-server
sudo /etc/init.d/sshd start
服务端配置:/etc/ssh/sshd_config
# 修改端口号 p17
Port 9122
# 修改之后要重启服务
systemctl restart sshd
# 修改端口后,登陆
ssh root@192.168.8.10:9122
# 只允许某个用户和唯一IP访问
AllowUsers tom@192.168.8.1
# 只允许某个用户和网段访问
AllowUsers tom@192.168.8.*
# 禁用密码登陆
PasswordAuthentication no
# 禁用root登陆
PermitRootLogin no
# 局域网内部的SSH不进行DNS验证,加快ssh连接速度。
UseDNS no
# 查看端口是否被占用
netstat -lnutp|grep 22
客户端 -> 服务端
ssh命令(远程工具xshell) 运行 openssh-server sshd
1.客户端连接服务端
ssh root@192.168.8.10:9122
# 第一登录时,保存临时秘钥 yes
# :密码
服务端(临时秘钥) -> 客户端 (加密、解密)
客户端(加密命令) -> 服务端 (解密命令并执行)
服务端(加密执行结果) -> 客户端 (解密执行结果,并显示)
# 对称加密、非对称加密
对称加密:加密和解密用的是同一个秘钥。
ssh 使用非对称加密算法。RSA算法(质数)
非对称加密:公钥和私钥。
私钥:保存在本地。可以解密公钥加密的数据。
公钥:发送给其他主机,用于加密数据,也可以解密私钥加密的数据。
使用非对称加密通信时,需要有对方的公钥。
命令:
ssh : 远程登录
ssh user@ip:port
ssh-keygen : 创建非对称秘钥(公钥+私钥)
免密码登录
主机IP | 角色 | 颜色 |
---|---|---|
192.168.8.11 | Client(客户端) | 橘红 |
192.168.8.12 | Server(服务端) | 黄色 |
# 修改主机名
nmtui
# 修改终端提示信息显示颜色
vim ~/.bashrc
export PS1="\[\e[34;1m\][\u@\h \W]#\[\e[0m\]"
# 在Client中创建密码对(非对称加密)
[root@Clinet ~]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ek8VwqsSvaKcopkKB9LemMA66mhn3Pl/n90HUq1rm10 root@Clinet
The key's randomart image is:
+---[RSA 2048]----+
| .. o. |
| .o |
| .. .. . |
|.. . .+. . .|
|+.. ..oS . . |
|o+ +o o. . o |
|+.*ooo. . oE|
|=*++ o . =o+|
|%oo ..... .+oo+|
+----[SHA256]-----+
[root@Clinet ~]#cd ~/.ssh/
[root@Clinet .ssh]#ls
id_rsa id_rsa.pub known_hosts
私钥 公钥 远程登录主机的临时秘钥
# 将公钥发送给服务端
[root@Clinet .ssh]#ssh-copy-id root@192.168.8.12
# 服务端自动生成 ~/.ssh/authorized_keys
[root@Server .ssh]#ls
authorized_keys known_hosts
存储客户端公钥
# 当服务端中有客户端的公钥时,客户端不需要密码就可以登录服务端。
[root@Clinet ~]#ssh root@192.168.8.12
ssh-copy-id : 发送公钥到服务端。 私钥留给客户端。
scp : 文件远程复制。
- -r 复制目录
- -v 显示完整过程
- -P 指定端口号,默认22时不用指定
scp 本地文件 用户@ip:/远程路径
scp 用户@ip:/远程路径 本地路径
-r 复制目录
echo "hello" > test.txt
# 从本地 -> 远程服务器
scp test.txt root@192.168.8.12:/root/
# 远程服务器 -> 本地
scp root@192.168.8.12:/root/anaconda-ks.cfg ./
# 拷贝目录
mkdir dir1
mv test.txt dir1/
scp -r dir1 root@192.168.8.12:/root/
# 指定端口号
# 修改服务端的端口号
[root@Server ~]#vim /etc/ssh/sshd_config
Port 9022
[root@Server ~]#systemctl restart sshd
# 在客户端指定端口
[root@Clinet ~]# scp -P 9022 -r dir1 root@192.168.8.12:/root/
# 让远程服务器,执行本地命令
ssh root@192.168.8.12 "ls /root"
NTP
时间同步服务器。端口:udp 123
NTP(Network Time Protocol)有助于确保计算机系统和设备的时间同步,并可确保网络中各个设备的时间保持一致。
高可用、主从同步、集群、分布式、K8S
C/S 架构,Client / Server
# 安装ntp的客户端和服务端
# 1.准备工作
# 关闭SELinux临时生效
[root@server01 ~]# setenforce 0
# 永久关闭SELinux(需重启生效)
[root@server01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 停止Firewall服务
[root@server01 ~]# systemctl stop firewalld
# 禁止Firewall服务开机启动
[root@server01 ~]# systemctl disable firewalld
# 2.安装ntp服务(先配置好yum源)
[root@server-01 ~]# yum install ntp ntpdate -y
IP | 角色 |
---|---|
192.168.8.12 | Server |
192.168.8.11 | Client |
192.168.8.10 | Client |
# NTP Server 必须要联网
# 在NTP Server 中服务器中修改配置文件
# 只修改服务端的。
vim /etc/ntp.conf
# 设置让本网段的所有服务,都可以同步时间。
restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap
# 时间同步服务器
# 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 ntp.aliyun.com
数据共享服务
网络服务都是数据、文件、资源共享。
http/https: 共享网页(文本、视频、音频、游戏、软件)
nfs :共享文件
mysql : 共享数据
dns : 域名数据库服务,实现域名解析功能
nfs :(network file system)网络文件系统,将服务端的目录和文件共享出来,客户端可以像挂载本地磁盘挂载使用nfs文件系统。
存储的方式:
-
连接方式分类
- 直连存储 DAS(Direct Attach STorage):SATA、USB、PCIE等接口直接连接硬盘、U盘、光盘、磁带等存储设备。RAID\LVM
- 网络存储SAN(Storage Area Network):通过光纤连接存储设备
- 网络文件共享 NAS(Network Attached Storage)
- 串行存储(一次只能和一台服务器通信):nfs
- 并行存储(同一时刻和多台服务器通信): caph 分布式存储
-
文件数据类型:
- 块存储: block 硬盘格式化建立文件系统,可以进行块存储。
- 块存储是一种将数据分割成固定大小的块并逐个存储的存储方式,块大小通常为几KB或几MB。每个块都有地址和偏移量,可以独立读取和写入。块存储通常具有以下特点: 1. 高性能:块存储可以提供低延迟的读写操作,适用于需要快速访问数据的应用场景。 2. 灵活的存储容量:块存储可以按需分配存储空间,支持动态扩容和缩减容量。例如:LVM 3. 数据保护和恢复:块存储通常支持数据的快照和复制功能,可以进行数据保护和恢复。例如:RAID
- 文件存储NAS(Apsara File Storage): nfs\samba ,文件和目录组成的树状结构。
- 文件存储是一种以文件为基本单位的存储方式,文件存储通常采用标准的文件系统协议,如NFS或CIFS,可以提供共享文件系统的功能。文件存储通常具有以下特点: 1. 简单易用:文件存储可以像本地文件系统一样访问和管理文件,具有良好的用户体验。 2. 共享访问:文件存储可以同时被多个用户或应用程序访问,适用于需要文件共享和协作的应用场景。 3. 符合传统应用需求:文件存储可以适应传统的应用需求,如文件编辑、文件传输等。
- 对象存储OSS:存储的也是文件,例如网盘;文件不会重复,方便共享文件。
- id:UUID 每个文件在对象存储中都有一个UUID。
- 内容:文件的数据。
- 元数据:文件的描述信息。标签。
- 块存储: block 硬盘格式化建立文件系统,可以进行块存储。
-
架构:
- 单体存储
- 分布式存储
-
AI、大数据、云计算都使用混合存储,并行分布式存储解决方案。
NFS简单实验
端口号:tcp/udp 111
IP | 角色 |
---|---|
192.168.8.10 | 服务器 |
192.168.8.11 | 客户端1 |
192.168.8.12 | 客户端2 |
# 所有机器
# 关闭防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
iptables -F
# 临时关闭
setenforce 0
# 永久关闭
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
安装nfs
# 所有服务端和客户端都要安装
yum install -y nfs-utils rpcbind
服务端配置
# 创建一个共享目录
mkdir /data
#vim /etc/exports
/data *(rw,sync,no_root_squash)
## 解释
# /data 共享本机一个目录
# *() 所有主机都可以共享使用该目录。
# rw 可读写。
# sync 数据同步存储,将修改数据立即写入磁盘。
# async 数据异步存储,先缓存,等到磁盘空闲时在写入数据。
# no_root_squash 允许root用户访问
# fsid=0 文件系统的标志位
# 让服务重启生效
exportfs -r
-r 重新共享所有目录。
# 重启rpcbiand和nfs
systemctl enable rpcbind
systemctl restart rpcbind
systemctl enable nfs
systemctl restart nfs
# rpc 是一种网络协议,可以远程调用服务上的进程。
# nfs依赖于rpc服务,实现网络共享效果。
# 3.服务器注册端口:111
rpcinfo -p
# 4.查看是否成功
showmount -e localhost
客户端挂载nfs
# 1.创建挂载目录
mkdir /data
# 2.查看挂载ip
showmount -e 192.168.8.32
# 3.挂载
mount -t nfs 192.168.8.32:/data /data
# 4.查看磁盘
df -h
# 5.配置启动挂载
vim /etc/fstab
192.168.8.32:/data /data nfs defaults 0 0
autofs
自动按需挂载nfs、光盘、磁盘。
nfs客户端安装配置。
主配置文件/etc/auto.master
子配置文件/etc/auto.nfs
(autofs默认自动卸载时间为300s即5分钟)
# 查看当前服务开发的端口号
status -lnutp
ss -lnutp
[root@Clinet ~]#mkdir -p /data/nfs1
[root@Clinet ~]#yum install autofs -y
[root@Clinet ~]#systemctl start autofs
[root@Clinet ~]#grep -Ev "^$|^#" /etc/auto.master
/misc /etc/auto.misc
# 添加配置,nfs挂载的所有父目录
/data /etc/auto.nfs --timeout=60
#####################################
/net -hosts
+dir:/etc/auto.master.d
+auto.master
# 子配置文件,具体的nfs服务链接信息
[root@Clinet ~]#vim /etc/auto.nfs
nfs1 -fstype=nfs 192.168.8.12:/data
[root@Clinet ~]#systemctl restart autofs
# 触发自动挂载
[root@Clinet ~]#cd /data/nfs1
使用autofs自动挂载光盘
vim /etc/auto.master
重启服务后生效
systemctl restart autofs
samba
- smb 协议,DOS系统默认的网络共享协议,之后被Windows继承用于网络邻居和打印机共享服务。
- samba: 使用smb协议,实现跨Windows和Linux文件共享的一个服务。
yum -y install samba samba-client
systemctl start smb nmb
useradd -s /sbin/nologin test
smbpasswd -a test
-a:向smbpasswd文件中添加用户;
chmod -R 755 /home/test/
vim /etc/samba/smb.conf
[test]
comment = "samba test"
path = /home/test
browseable = yes
public = yes
writable = yes
### 解释
[test] # 共享名
comment = "samba test" # 描述信息
path = /home/test # 共享目录
browseable = yes # 所有人可见
public = yes # 是否公开
writable = yes # 是否允许修改
systemctl restart smb nmb
点击test文件输入
用户名:test 密码:xxx(你自己的密码)
注意权限问题!!!
rsync 数据增量同步
cp : 本地复制文件。
scp:远程复制文件。
scp a.txt root@192.168.8.12:/root/
scp root@192.168.8.12:/root/b.txt ./
rsync:既可以本地、也可以远程复制,远程有push模式(推送模式)、pull模式(拉取模式),数据增量同步。
- 全量备份: cp和scp都是全量备份,将所有数据重新全部备份一次。
- 增量备份: 只备份修改过的文件和新增的文件,也可以在备份中同步删除。
rsync [选项] 源文件 目标文件
-a 保留源文件的权限
-v 显示过程
-r 递归复制
-z 压缩传输,减少数据量
--delete 同步删除,源文件删除的内容,目标文件中也会删除(保持数据一致)
--exclude 用于排除特定文件或目录等。
# 本地同步,使用方法和cp命令类似
rsync anaconda-ks.cfg /opt/
# --delete同步删除
rsync -avrz --delete dirA/ /opt/
# --exclude排除同步某个文件。
rsync -avrz --delete --exclude 1.txt dirA/ /opt/
注意结尾加"/"表示目录中的内容同步,不加"/"表示同步这个目录本身。
远程同步
# 类似于scp命令
# push 推送(上传):将本地的文件同步到服务上。
rsync [选项] 本地文件 用户@IP地址:路径
rsync -avz dirA root@192.168.8.11:/opt
# pull 拉取(下载):将服务上的文件同步到本地。
rsync [选项] 用户@IP地址:路径 本地目录
rsync -avz root@192.168.8.11:/opt /root
rsync同步服务器
# 准本两台机器
master 192.168.8.12
slave 192.168.8.11
# 修改master(192.168.8.50)的配置文件
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y httpd rsync
#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
mkdir -p /var/www/html #创建共享文件目录
chmod +r /var/www/html #给共享目录加上读的权限
# 编辑rsync配置文件
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.8.12
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.8.0/24
[myhtml]
path = /var/www/html
comment = this is rsync
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = tom
secrets file = /etc/rsyncd_users.db
# 主服务器创建用户账号和密码
vim /etc/rsyncd_users.db
tom:123123
#编辑用户账号文件,固定格式为[名称:密码],一行一个
#官方要求,最好只是赋权600!
chmod 600 /etc/rsyncd_users.db
# 重启服务
systemctl restart rsyncd
#检测端口号,确认服务是否成功开启
netstat -natp | grep rsync
cd /var/www/html
#切换至共享目录下
echo "zuolaoshi 666" > index.html
#给共享文件夹下创建一个index.html文件输入内容
mkdir -p /opt/abc
rsync -avz tom@192.168.8.50::myhtml /opt/abc #用rsync登录
echo "123123"> /etc/server.pass # 输入密码实现免交互
chmod 600 /etc/server.pass # 给密钥文件赋权600
rsync -avz --delete --password-file=/etc/server.pass tom@192.168.8.12::myhtml /opt/abc/
# rsync,使用密钥文件/etc/server.pass对应tom用户,IP地址为192.168.8.50的共享模块文件进行压缩
# 并归档同步至当前服务器的/opt/abc目录下,同时删除差异内容,保持一致性
使用rsync+inotify实现触发式实时文件同步
wget http://192.168.3.200/mirrors/local.repo -O /etc/yum.repos.d/local.repo
yum install -y epel-release && yum -y update
yum install -y inotify-tools
# 需要实现客户端与服务端之间免密码登录。
# 客户端和服务端都执行:
ssh-keygen
# 服务端免密登录客户端
ssh-copy-id root@192.168.8.11
# 客户端免密登录服务端
ssh-copy-id root@192.168.8.12
# 服务端创建sync.sh脚本,监控需要同步的目录。
# 当该目录发生变化时,执行rsync命令实现文件的同步。
#!/bin/bash
while inotifywait -r -e modify,create,delete,move /var/www/html ;do
rsync -avz --delete /var/www/html root@192.168.8.11:/opt/data/
done
chmod +x sync.sh
./sync.sh
作业:安装Ubuntu22.04 Server 和 Ubuntu22.04 桌面版
# 启用root用户
sudo passwd
# 切换root用户
su -
1.配置IP地址
# ubuntu22.04 server网卡默认配置文件
sudo vim /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens33:
addresses:
- 192.168.8.30/24 # ip 地址
nameservers:
addresses: # DNS
- 8.8.8.8
search: []
routes:
- to: default
via: 192.168.8.2 # 网关
version: 2
# 重启网卡
sudo netplan apply
2.修改apt源,学会apt安装 wget \vim \lrzsz 等软件
3.更改时区和设置中文字符集
4.设置自动时间同步 (ntp)
FTP
文件传输服务。
端口:21 传输ftp命令
20 传输数据
sftp: ssh自带ftp功能。22端口。
# 更新apt源缓存
sudo apt update
# 安装vsftpd软件
sudo apt install -y vsftpd
# (如果删除) sudo apt remove vsftpd
# 配置文件
# /etc/vsftpd.conf
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
grep -v "^#" /etc/vsftpd.conf.bak >/etc/vsftpd.conf
listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES # 允许本地用户使用ftp
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
write_enable=YES # 允许删除和上传操作
# 修改完成重启服务
systemctl restart vsftpd
预习:DNS域名解析服务。