Linux OS
2025-12-18 16:09:01 0 举报
AI智能生成
LINUX OS基础课程,包含各方面实操,如DHCP,DNS,FTP,WEB(apache+nginx),samba,RAID10
作者其他创作
大纲/内容
Linux系统安装
1.镜像下载
centos stream 9 官方
https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso
https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-latest-x86_64-dvd1.iso
2.VMware安装
VMware-workstation-full-17.6.3-24583834.exe
3.安装Linux系统
I/O控制器类型选择
Bus Logic
DOS,WIN95/98/NT/XP/Server2003-,CentOS6-, RedHat6-
LSI Logic
Win Vista/7/Server2003-2008,RedHat, CentOs,快照,挂起,克隆
LSI Logic SAS
首选 ,CentOS7+,Ubuntu 18+,Win7+/Server 2012+
VMwareParavirtual
现代高性能要求,VMwareTools支持
磁盘类型选择
IDE
老式IDE硬盘,DOS,WIN95/98/NT/XP/Server2003-,CentOS6-, RedHat6-
SCSI
首选,服务器级SCSI硬盘,现代WIN&Linux
SATA
台式机SATA硬盘,WIN7+/Linux
NVME
现代高性能要求,VMwareTools支持
单/多个文件选择
单个
首选,性能最佳,支持更大容量,WIN(NTFS)/Linux(ext4/XFS)
厚置备延迟置零
多个
文件系统是FAT32,经常将虚拟机拷贝至U盘或移动硬盘
精简置备
磁盘分区自定义
MBR,BIOS
/
根分区
ext4/xfs
swap
交换分区,内存的2倍,4-16GB
swap
/boot
启动,1GB
ext4
/var
动态数据(日志、缓存)
ext4/xfs
/data
用户数据
ext4/xfs
WINXP-32/Server2008-/Ubuntu18.04-/CentOS8-
GPT,UEFI
/boot/efi
100MB
ext4
WIN10+64/Sever2008+/Ubuntu18.04+/CentOS8+ 或 >2TB
GUI选择
GNOME
默认桌面
KDE
网络模式选择
Bridged
默认使用(连接)VMnet0,物理网卡传输,直连物理网络;
独占IP,直接访问外网,暴露IP;
物理网络IP资源紧张,不建议使用
NAT
默认使用(连接)VMnet8,共享IP上外网,外部无法直接访问,除非配置端口转发
子主题
Host-Only
默认使用(连接)VMnet1,封闭的私有网络,无法访问外网,
虚拟机只能与虚拟机、主机互连,与网络上的其他工作站不能访问
虚拟机只能与虚拟机、主机互连,与网络上的其他工作站不能访问
4.拷贝已安装镜像
打开另一台机器已安装的虚拟机文件(vmdk)
5.克隆
重复内容
SID+MAC+主机名
Windows
MAC+主机名
Linux
6.快照
系统备份
保存虚拟机某一时刻的状态(如刚安装完系统时),避免操作失误导致系统崩溃。
快速恢复
若系统出现问题(如配置错误),可一键回滚到快照点,无需重装系统。
7.软件安装/升级YUM源
1. vi /etc/yum.repos.d/centos.repo
2. vi /etc/yum.repos.d/centos-addons.repo
3. dnf install epel-release
4. dnf makecache && dnf update
系统
uname
查看系统版本信息
uname -a
nproc/lscpu
查cpu几核
uptime
clear
清屏
windows: cls
shutdown
关机
reboot
重启
logout
注销
man
帮助命令
当遇到不会使用的命令时,可以man一下,看看它的文档信息
man ls 按下q退出当前的文件
cmd --help
history
历史命令
可以查看你输入过的命令,默认的是3000条
history -c
清空历史记录
history 数字
查看后面几行
history -w
将当前执行完的命令写入到~/.bash_history 文件中
history -r
从文件.bash_history中恢复至缓存
!数字
再次执行此命令
!!
再次执行上次命令
hash
管理命令路径缓存(记录最近执行过的命令的绝对路径)
缓存该命令名与绝对路径的映射(称为“哈希表”)
缓存该命令名与绝对路径的映射(称为“哈希表”)
hash 查看当前缓存
hash -r:重置缓存(清除所有缓存)
环境变量
/etc/profile
系统级配置
~/.bash_profile
个人用户配置
~/.bashrc
非登录shell配置
运行脚本
./script.sh
chmod +x script.sh
bash/sh script.sh
source script.sh
程序自动断开或访问慢
核心问题
核心问题
1、内存不够
2、cpu不够
3、硬盘资源不够
4、os 文件句柄资源不够
5、网络慢
6、数据库连不上
(密码过期失效、占用资源过多、连接数不够、表死锁、sql执行慢)
7、缓存连不上
8、外部直接中断
9、程序内部bug异常
10、nginx 配置负载出错
11、中间件连不上
12、SSL证书过期
13、程序配置路径或端口出错。
2、cpu不够
3、硬盘资源不够
4、os 文件句柄资源不够
5、网络慢
6、数据库连不上
(密码过期失效、占用资源过多、连接数不够、表死锁、sql执行慢)
7、缓存连不上
8、外部直接中断
9、程序内部bug异常
10、nginx 配置负载出错
11、中间件连不上
12、SSL证书过期
13、程序配置路径或端口出错。
• 查问题始终抓住一个点就是:数据流,经过了哪里出现了什么问题。
• 做任何操作(更新、修改、删除等)之前先备份「镜像、快照、文件、命令、SQL备份等」,避免无法恢复。
• 避免使用rm命令,尤其是强制删除。
• 找不到原因时,重启是万能的,先恢复系统运行,再去找原因。
• 会查看历史操作命令,history , ! 命令ID 执行。
• 会查看配置文件及日志文件找错误、账号、路径等。
• 会deepseek, 百度、google 搜索关键词,重点在关键词一定要准确,否则找不到想要的答案。
• 做任何操作(更新、修改、删除等)之前先备份「镜像、快照、文件、命令、SQL备份等」,避免无法恢复。
• 避免使用rm命令,尤其是强制删除。
• 找不到原因时,重启是万能的,先恢复系统运行,再去找原因。
• 会查看历史操作命令,history , ! 命令ID 执行。
• 会查看配置文件及日志文件找错误、账号、路径等。
• 会deepseek, 百度、google 搜索关键词,重点在关键词一定要准确,否则找不到想要的答案。
WEB(Apache+Nginx)双机双服务
192.168.125.44/45
firewall设置
允许ping、web服务端口8888/9999、反向代理访问8888/9999且其它禁止
firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" accept'
firewall-cmd --permanent --add-port=8888/tcp
firewall-cmd --permanent --add-rich-rule='rule protocol value="icmp" accept'
firewall-cmd --permanent --add-port=8888/tcp
允许反向代理服务器Nginx 访问端口
firewall-cmd --permanent --add-rich-rule="
rule family=\"ipv4\"
source address=\"192.168.125.66\"
port protocol=\"tcp\" port=\"80\" accept "
rule family=\"ipv4\"
source address=\"192.168.125.66\"
port protocol=\"tcp\" port=\"80\" accept "
重载生效
sudo firewall-cmd --reload
检查
sudo firewall-cme --list-ports
sudo firewall-cme --list-services
sudo firewall-cme --list-services
安装httpd,启动并设置开机自启
sudo dnf install httpd -y
systemctl start httpd && systemctl enable httpd
systemctl start httpd && systemctl enable httpd
网站根目录创建测试页
HostA
echo "HostA: 192.168.125.44:8888" | tee /var/www/html/index.html
HostB
echo "HostB: 192.168.125.45:9999" | tee /var/www/html/index.html
配置虚拟主机
vi /etc/httpd/conf/httpd.conf
Listen 80 改成 Listen 8888
增加
<VirtualHost *:8888>
DocumentRoot /var/www/html
ServerName web.zoujiangping.com
</VirtualHost>
DocumentRoot /var/www/html
ServerName web.zoujiangping.com
</VirtualHost>
检查
grep -A4 "Listen 8888" /etc/httpd/conf/httpd.conf
grep -A0 "localhost:8888" /etc/httpd/conf/httpd.conf
grep -A0 "localhost:8888" /etc/httpd/conf/httpd.conf
检查配置文件语法是否有错,并重载
httpd -t
systemctl reload httpd
systemctl reload httpd
设置安全上下文
vi /etc/selinux/config
SELINUX=enforcing
getenforce
semanage port -a -t http_port_t -p tcp 8888
semanage fcontext -a -t httpd_sys_content_t /var/www/html/*
restorecon -Rv /var/www/html
sudo chown -R apache:apache /var/www/html/
sudo chown -R apache:apache /var/log/httpd
sudo chmod -R 755 /var/www/html/
sudo chmod -R 755 /var/log/httpd
semanage fcontext -a -t httpd_sys_content_t /var/www/html/*
restorecon -Rv /var/www/html
sudo chown -R apache:apache /var/www/html/
sudo chown -R apache:apache /var/log/httpd
sudo chmod -R 755 /var/www/html/
sudo chmod -R 755 /var/log/httpd
检查端口
semanage port -l | grep http_port_t
检查文件安全上下文类型:httpd_sys_content_t
ls -Zd /var/www/html
本机测试
检查端口监听状态
lsof -i:8888
检查网站访问详情
curl -sv http://192.168.125.44:8888
检查日志
journalctl -u httpd -n 10 --no-pager
192.168.125.66
设置firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-icmp-block-inversion
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-icmp-block-inversion
重载生效
sudo firewall-cmd --reload
检查
sudo firewall-cme --list-ports
sudo firewall-cme --list-services
sudo firewall-cme --list-services
安装nginx
dnf install nginx -y
检查
dnf list installed | grep nginx
设置日志文件权限
touch /var/log/nginx/access.log /var/log/nginx/error.log
chown -R nginx:nginx /var/log/nginx/
sudo chmod 755 /var/log/nginx/
sudo chmod 644 /var/log/nginx/*.log
sudo chmod 644 /var/log/nginx/*.log
设置安全上下文
vi /etc/selinux/config
SELINUX=enforcing
getenforce
允许 Nginx 监听 80 端口(TCP)
semanage port -a -t http_port_t -p tcp 80 2>/dev/null || \
semanage port -m -t http_port_t -p tcp 80
semanage port -m -t http_port_t -p tcp 80
检查
semanage port -l | grep http_port_t
允许 Nginx 进行网络连接
setsebool -P httpd_can_network_connect on
配置文件,安全上下文 类型异常修复
semanage fcontext -a -t httpd_config_t "/etc/nginx/nginx.conf"
restorecon -v /etc/nginx/nginx.conf
restorecon -v /etc/nginx/nginx.conf
检查
ls -Z /etc/nginx/nginx.conf
日志文件,类型异常修复
semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
restorecon -Rv /var/log/nginx
restorecon -Rv /var/log/nginx
检查
ls -Zd /var/log/nginx/
配置负载均衡
vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto; # 自动根据CPU核心数启动worker数量
worker_cpu_affinity auto; #开启亲和性
pid /run/nginx.pid; # PID文件路径
events {
use epoll;
worker_connections 1024; # 每个进程最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log ;
error_log /var/log/nginx/error.log warn;
upstream backend {
server 192.168.125.44:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.125.45:9999 weight=2 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name web.zoujiangping.com;
location / {
proxy_pass http://backend;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
#传递真实IP链
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
}
worker_processes auto; # 自动根据CPU核心数启动worker数量
worker_cpu_affinity auto; #开启亲和性
pid /run/nginx.pid; # PID文件路径
events {
use epoll;
worker_connections 1024; # 每个进程最大连接数
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log ;
error_log /var/log/nginx/error.log warn;
upstream backend {
server 192.168.125.44:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.125.45:9999 weight=2 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name web.zoujiangping.com;
location / {
proxy_pass http://backend;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
#传递真实IP链
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
}
检查语法(无报错则继续),启动并设置开机自启
rm -rf /run/nginx.pid
nginx -t && systemctl start nginx && sudo systemctl enable nginx
nginx -t && systemctl start nginx && sudo systemctl enable nginx
journalctl -u nginx -n 5 --no-pager --output short-precise
重载配置
nginx -s reload
检查
tail -fn200 /var/log/nginx/error.log
tail -fn200 /var/log/nginx/access.log
查本机访问
curl -sv http://localhost
查域名访问
curl -sv http://web.zoujiangping.com
查域名解析
nslookup web.zoujiangping.com
基础部署方式
IP虚拟主机, 单机单网卡, 一台主机一个网卡,绑定两个IP
IP虚拟主机,单机双网卡,一台主机两个网卡,每个网卡分别对应一个IP
域名虚拟主机,单机单网卡, 一台主机一个网卡,绑定同一个IP,192.168.125.31,不同域名
端口虚拟主机,单机单网卡, 一台主机一个网卡,绑定同一个IP,192.168.125.31,同一个域名,不同端口
双机单服务,两台主机(如 HostA和 HostB),各有一个网卡,
每个网卡分别对应一IP, 分别为 192.168.125.31和 192.168.125.32,
但仅在一台主机 HostA上安装 Apache 服务。
每个网卡分别对应一IP, 分别为 192.168.125.31和 192.168.125.32,
但仅在一台主机 HostA上安装 Apache 服务。
双机双服务,负载均衡
两台主机(HostA:192.168.125.44、HostB:192.168.125.45)各一个网卡,
每个网卡分别对应一IP,两台主机都安装httpd服务,
负载均衡服务器HostC:192.168.125.66反向代理
每个网卡分别对应一IP,两台主机都安装httpd服务,
负载均衡服务器HostC:192.168.125.66反向代理
apache负载均衡器分发流量
Nginx负载均衡器分发流量
SAMBA
基础知识
软件名
samba
服务名
smb nmb
默认端口
445/TCP
配置文件
/etc/samba/smb.conf
日志文件
sudo journalctl -u smb --no-pager | tail -n 20
tail -fn200 /var/log/messages | grep smb
tail -fn200 /var/log/samba/log.smbd
安装及配置
配置firewall
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
firewall-cmd --reload
安装samba
sudo dnf install samba samba-client samba-common python3-samba -y
确认:rpm -qa | grep samba
创建共享目录
mkdir -p /var/samba/share
chmod -R 755 /var/samba/share
chown -R evian:evian /var/samba/share
chmod -R 755 /var/samba/share
chown -R evian:evian /var/samba/share
配置SELINUX
vi /etc/selinux/config
SELINUX=enforcing
ls -aZ /var/samba/share
semanage fcontext -a -t samba_share_t '/var/samba/share(/.*)?' #定义规则
restorecon -RFvv /var/samba/share #恢复规则
setsebool -P samba_enable_home_dirs on #允许共享用户主目录
setsebool -P samba_export_all_rw on #允许共享目录可读写
semanage fcontext -a -t samba_share_t '/var/samba/share(/.*)?' #定义规则
restorecon -RFvv /var/samba/share #恢复规则
setsebool -P samba_enable_home_dirs on #允许共享用户主目录
setsebool -P samba_export_all_rw on #允许共享目录可读写
主核心配置
vi /etc/samba/smb.conf
[public]
comment = Shared Directory
path = /var/samba/share
public = yes
writable = yes
browseable = yes
readonly = no
create mask = 0664
directory mask = 0775
valid users = evian
comment = Shared Directory
path = /var/samba/share
public = yes
writable = yes
browseable = yes
readonly = no
create mask = 0664
directory mask = 0775
valid users = evian
检查 testparm
生效参数 testparm -sv
启动和管理
启动
systemctl start smb nmb
重载
systemctl reload smb nmb
smbcontrol smbd reload-config
开机启动
systemctl enable smb nmb
查状态
systemctl status smb
设置登录用户及密码
useradd evian
smbpasswd -a evian
smbpasswd -a evian
测试
Windows
Linux
smbclient //localhost/share -m SMB2 -U evian
支持命令
samba、vsftp区别
• Samba 是“网络共享”:让不同系统的计算机像访问本地硬盘一样共享文件,核心是跨系统无缝协作。
• FTP 是“文件传输”:专注客户端与服务器之间的文件上传下载,核心是高效传输。
• FTP 是“文件传输”:专注客户端与服务器之间的文件上传下载,核心是高效传输。
FTP
基础知识
软件名
vsftp
服务名
vsftpd
开放端口
控制21+数据40000-40001
默认 21& 20/TCP
配置文件
/etc/vsftpd/vsftpd.conf
日志文件
sudo journalctl -u vsftpd --no-pager | tail -n 20
tail -fn200 /var/log/messages | grep vsftpd
tail -fn200 /var/log/vsftp/vsftpd.log
tail -f /var/log/secure | grep -i "vsftpd\|pam
认证日志
安装及配置
安装vsftpd
sudo dnf install -y vsftpd
配置firewall
firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --add-port=40000-40001/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --add-port=40000-40001/tcp --permanent
firewall-cmd --reload
设置共享目录(自定义目录)权限
mkdir -p /opt/software/vsftpd-3.0.5/run/shared_dir
chmod -R 755 /opt/software/vsftpd-3.0.5/run/shared_dir/
chown -R evian:evian /opt/software/vsftpd-3.0.5/run/shared_dir/
chmod -R 755 /opt/software/vsftpd-3.0.5/run/shared_dir/
chown -R evian:evian /opt/software/vsftpd-3.0.5/run/shared_dir/
配置SELinux
vi /etc/selinux/config
SELINUX=enforcing
setsebool -P ftpd_full_access on # 允许 vsftpd 访问目录
semanage fcontext -a -t public_content_t "/opt/software/vsftpd-3.0.5/run/shared_dir(/.*)?"
restorecon -Rv /opt/software/vsftpd-3.0.5/run/shared_dir
semanage fcontext -a -t public_content_t "/opt/software/vsftpd-3.0.5/run/shared_dir(/.*)?"
restorecon -Rv /opt/software/vsftpd-3.0.5/run/shared_dir
核心主配置
vi /etc/vsftpd/vsftpd.conf
基础配置
# === 基础设置 ===
listen=YES #监听IPV4 注意格式,前后不能有空格,且不能拼写错误,且单独成行
listen_ipv6=NO # 禁用IPv6(避免冲突)
anonymous_enable=YES # 允许匿名登录(核心)
local_enable=NO # 禁用本地用户登录(避免混淆,若需本地用户则设为YES)
write_enable=YES # 全局允许写操作(匿名写权限依赖此参数)
local_umask=022 # 本地用户文件掩码(匿名用户用anon_umask)
# === 网络与日志 ===
connect_from_port_20=YES # 主动模式使用20端口
pasv_enable=YES # 启用被动模式
pasv_min_port=40000 # 被动模式最小端口
pasv_max_port=40001 # 被动模式最大端口
xferlog_enable=YES # 启用日志
xferlog_file=/var/log/vsftp/vsftpd.log # 日志路径
xferlog_std_format=YES # 标准日志格式
dual_log_enable=YES # 同时记录传输日志和系统日志
# === 安全设置 ===
dirmessage_enable=YES # 进入目录显示消息
listen=YES #监听IPV4 注意格式,前后不能有空格,且不能拼写错误,且单独成行
listen_ipv6=NO # 禁用IPv6(避免冲突)
anonymous_enable=YES # 允许匿名登录(核心)
local_enable=NO # 禁用本地用户登录(避免混淆,若需本地用户则设为YES)
write_enable=YES # 全局允许写操作(匿名写权限依赖此参数)
local_umask=022 # 本地用户文件掩码(匿名用户用anon_umask)
# === 网络与日志 ===
connect_from_port_20=YES # 主动模式使用20端口
pasv_enable=YES # 启用被动模式
pasv_min_port=40000 # 被动模式最小端口
pasv_max_port=40001 # 被动模式最大端口
xferlog_enable=YES # 启用日志
xferlog_file=/var/log/vsftp/vsftpd.log # 日志路径
xferlog_std_format=YES # 标准日志格式
dual_log_enable=YES # 同时记录传输日志和系统日志
# === 安全设置 ===
dirmessage_enable=YES # 进入目录显示消息
匿名配置
no_anon_password=YES # 匿名用户免密登录(关键)
ftp_username=ftp # 匿名用户映射系统用户(需确保ftp用户存在且无密码)
anon_root=/opt/software/vsftpd-3.0.5/run/shared_dir # 匿名用户根目录
anon_world_readable_only=YES # 仅允许下载可读文件
anon_upload_enable=NO # 禁止匿名上传
anon_mkdir_write_enable=NO # 禁止匿名建目录
anon_other_write_enable=YES # 允许匿名删除/重命名(需write_enable=YES)
anon_umask=022 # 匿名用户文件权限掩码(文件644,目录755)
ftp_username=ftp # 匿名用户映射系统用户(需确保ftp用户存在且无密码)
anon_root=/opt/software/vsftpd-3.0.5/run/shared_dir # 匿名用户根目录
anon_world_readable_only=YES # 仅允许下载可读文件
anon_upload_enable=NO # 禁止匿名上传
anon_mkdir_write_enable=NO # 禁止匿名建目录
anon_other_write_enable=YES # 允许匿名删除/重命名(需write_enable=YES)
anon_umask=022 # 匿名用户文件权限掩码(文件644,目录755)
配置日志切片
创建日志目录
touch /var/log/vsftp/vsftpd.log
chown -R root:root /var/log/vsftp/
chmod -R 755 /var/log/vsftp/vsftpd.log
chown -R root:root /var/log/vsftp/
chmod -R 755 /var/log/vsftp/vsftpd.log
vi /etc/logrotate.d/vsftpd
/var/log/vsftp/vsftpd.log
{
#注意日志必须单独成行
# 每天轮转
daily
# 忽略文件缺失错误
missingok
# 保留7份旧日志
rotate 7
# 压缩旧日志
compress
# 空文件不轮转
notifempty
# 新日志权限及属主
create 640 root adm
}
{
#注意日志必须单独成行
# 每天轮转
daily
# 忽略文件缺失错误
missingok
# 保留7份旧日志
rotate 7
# 压缩旧日志
compress
# 空文件不轮转
notifempty
# 新日志权限及属主
create 640 root adm
}
检查语法
logrotate -d /etc/logrotate.d/vsftpd
手动执行
logrotate -f /etc/logrotate.d/vsftpd
启动vsftpd
systemctl start vsftpd
设置开机启机
systemctl enable vsftpd
创建测试用户及测试文件
sudo useradd -d /var/ftp -s /sbin/nologin ftp # 家目录设为/var/ftp
sudo passwd -d ftp # 清除密码(输出 "password expiry information changed" 表示成功)
sudo passwd -l ftp # 锁定账户(禁止SSH登录)
sudo passwd -S ftp # 输出 "ftp NP 05/20/2024 0 99999 7 -1"(NP表示无密码,L表示锁定)
sudo passwd -d ftp # 清除密码(输出 "password expiry information changed" 表示成功)
sudo passwd -l ftp # 锁定账户(禁止SSH登录)
sudo passwd -S ftp # 输出 "ftp NP 05/20/2024 0 99999 7 -1"(NP表示无密码,L表示锁定)
echo "hello anonymous ftp" | sudo tee -a /opt/software/vsftpd-3.0.5/run/shared_dir/1.txt
测试
wget ftp://192.168.125.32/1.txt
ftp 192.168.125.32
虚拟用户安装及配置
安装db_load
sudo dnf install db_load
db_load -V
db_load -V
修改密码策略
vi /etc/security/pwquality.conf
minlen = 6 # 最小长度
dictcheck = 0 # 禁用字典检查
dictcheck = 0 # 禁用字典检查
创建共享系统用户
sudo useradd -d /opt/software/vsftpd-3.0.5/run/shared_dir -s /sbin/nologin ftpuser
sudo chmod -Rf 755 /opt/software/vsftpd-3.0.5/run/shared_dir #至少+x,否则报500
sudo passwd ftpuser
sudo chmod -Rf 755 /opt/software/vsftpd-3.0.5/run/shared_dir #至少+x,否则报500
sudo passwd ftpuser
基于系统用户创建虚拟用户
sudo mkdir /etc/vsftpd
sudo vi /etc/vsftpd/ftpuser.txt
user1 #不能有多余字符,如空格,空行等
123$%^
user2
123456
123$%^
user2
123456
生成db文件
sudo db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/ftpuser.db
sudo chmod 600 /etc/vsftpd/ftpuser.db
sudo chmod 600 /etc/vsftpd/ftpuser.db
db_dump -p /etc/vsftpd/ftpuser.db
配置PAM文件
清空配置文件
sudo echo "" > /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/ftpuser
account required pam_userdb.so db=/etc/vsftpd/ftpuser
account required pam_userdb.so db=/etc/vsftpd/ftpuser
修改核心主配置
vi /etc/vsftpd/vsftpd.conf
#允许本地用户登录
local_enable=YES
#取消群组(g)和其他用户(o)的写权限
#目录:777 - 022 = 755(rwxr-xr-x)
#文件:666 - 022 = 644(rw-r--r--)
local_umask=022
#虚拟用户配置
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #虚拟用户映射的系统用户为ftpuser
#必须加,YES 表示虚拟用户使用与本地用户相同的权限,NO 表示则与匿名用户相同的权限
virtual_use_local_privs=YES
pam_service_name=vsftpd # PAM配置文件名(对应/etc/pam.d/vsftpd)
user_config_dir=/etc/vsftpd/ftpusers # 虚拟用户独立配置目录
# Chroot控制(全局锁定,通过chroot_list放通例外)
chroot_local_user=YES # 默认锁定所有用户到主目录
chroot_list_enable=YES # 启用chroot_list
chroot_list_deny=YES # chroot_list是黑名单(列表用户不锁定)
chroot_list_file=/etc/vsftpd/chroot_list # 黑名单文件路径
allow_writeable_chroot=YES # 允许锁定目录可写(避免vsftpd安全报错)
local_enable=YES
#取消群组(g)和其他用户(o)的写权限
#目录:777 - 022 = 755(rwxr-xr-x)
#文件:666 - 022 = 644(rw-r--r--)
local_umask=022
#虚拟用户配置
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #虚拟用户映射的系统用户为ftpuser
#必须加,YES 表示虚拟用户使用与本地用户相同的权限,NO 表示则与匿名用户相同的权限
virtual_use_local_privs=YES
pam_service_name=vsftpd # PAM配置文件名(对应/etc/pam.d/vsftpd)
user_config_dir=/etc/vsftpd/ftpusers # 虚拟用户独立配置目录
# Chroot控制(全局锁定,通过chroot_list放通例外)
chroot_local_user=YES # 默认锁定所有用户到主目录
chroot_list_enable=YES # 启用chroot_list
chroot_list_deny=YES # chroot_list是黑名单(列表用户不锁定)
chroot_list_file=/etc/vsftpd/chroot_list # 黑名单文件路径
allow_writeable_chroot=YES # 允许锁定目录可写(避免vsftpd安全报错)
配置独立虚拟用户权限
sudo mkdir -p /etc/vsftpd/ftpusers
设置本地用户根目录
vi /etc/vsftpd/ftpusers/user1
local_root=/opt/software/vsftpd-3.0.5/run/shared_dir/user1
allow_writeable_chroot=YES
allow_writeable_chroot=YES
vi /etc/vsftpd/ftpusers/user2
local_root=/opt/software/vsftpd-3.0.5/run/shared_dir/user2
allow_writeable_chroot=YES
allow_writeable_chroot=YES
touch /etc/vsftpd/chroot_list && chmod 600 /etc/vsftpd/chroot_list
设置user2不锁定
vi /etc/vsftpd/chroot_list
user2 # user2不锁定(允许访问其他目录),其他用户默认锁定
设置user1&user2共享目录权限
mkdir -p /opt/software/vsftpd-3.0.5/run/shared_dir/{user1,user2}
chmod 755 /opt/software/vsftpd-3.0.5/run/shared_dir/{user1,user2}
chown ftpuser:ftpuser /opt/software/vsftpd-3.0.5/run/shared_dir/{user1,user2}
chmod 755 /opt/software/vsftpd-3.0.5/run/shared_dir/{user1,user2}
chown ftpuser:ftpuser /opt/software/vsftpd-3.0.5/run/shared_dir/{user1,user2}
检查
namei -l /opt/software/vsftpd-3.0.5/run/shared_dir
测试
创建测试文件
su - ftpuser -s /bin/bash -c "echo 'user1 file' > /opt/software/vsftpd-3.0.5/run/shared_dir/user1/user1.txt"
su - ftpuser -s /bin/bash -c "echo 'user2 file' > /opt/software/vsftpd-3.0.5/run/shared_dir/user2/user2.txt"
su - ftpuser -s /bin/bash -c "echo 'user2 file' > /opt/software/vsftpd-3.0.5/run/shared_dir/user2/user2.txt"
清空认证日志
echo "" > /var/log/secure
tail -f /var/log/secure | grep -i "vsftpd\|pam
journalctl -u vsftpd -n 10 --no-pager
重启服务
systemctl restart vsftpd
测试用例
echo "---人工确认:user1访问 user1.txt?--->/shared_dir/user1/user1.txt"
curl -u 'user1:123$%^' ftp://localhost/user1.txt -o user1_user1.txt
echo "---人工确认:user1访问 /user1/user1.txt?(应失败),--->/shared_dir/user1/user1/user1.txt,不存在(无 user1 子目录)"
curl -u 'user1:123$%^' ftp://localhost/user1/user1.txt -o user1_user1.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问 user2.txt?(应失败),--->/shared_dir/user2.txt, 不存在(在 user2 子目录)"
curl -u 'user2:123456' ftp://localhost/user2.txt -o user2_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user1访问 user2.txt?(应失败),--->/shared_dir/user2.txt,被锁定,chroot 限制,无权限且不存在"
curl -u 'user1:123$%^' ftp://localhost/user2.txt -o user1_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user1访问 /user2/user2.txt?(应失败),--->/shared_dir/user2/user2.txt,被锁定,chroot 限制,无权限"
curl -u 'user1:123$%^' ftp://localhost/user2/user2.txt -o user1_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问 user1.txt?--->/shared_dir/user1.txt, 不存在(在 user1 子目录)"
curl -u 'user2:123456' ftp://localhost/user1.txt -o user2_user1.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问/user1/user1.txt?--->/shared_dir/user1/user1.txt"
curl -u 'user2:123456' ftp://localhost/user1/user1.txt -o user2_user1.txt
echo "---人工确认:user2访问/user2/user2.txt?--->/shared_dir/user2/user2.txt"
curl -u 'user2:123456' ftp://localhost/user2/user2.txt -o user2_user2.txt
curl -u 'user1:123$%^' ftp://localhost/user1.txt -o user1_user1.txt
echo "---人工确认:user1访问 /user1/user1.txt?(应失败),--->/shared_dir/user1/user1/user1.txt,不存在(无 user1 子目录)"
curl -u 'user1:123$%^' ftp://localhost/user1/user1.txt -o user1_user1.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问 user2.txt?(应失败),--->/shared_dir/user2.txt, 不存在(在 user2 子目录)"
curl -u 'user2:123456' ftp://localhost/user2.txt -o user2_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user1访问 user2.txt?(应失败),--->/shared_dir/user2.txt,被锁定,chroot 限制,无权限且不存在"
curl -u 'user1:123$%^' ftp://localhost/user2.txt -o user1_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user1访问 /user2/user2.txt?(应失败),--->/shared_dir/user2/user2.txt,被锁定,chroot 限制,无权限"
curl -u 'user1:123$%^' ftp://localhost/user2/user2.txt -o user1_user2.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问 user1.txt?--->/shared_dir/user1.txt, 不存在(在 user1 子目录)"
curl -u 'user2:123456' ftp://localhost/user1.txt -o user2_user1.txt || echo "访问失败(符合预期)"
echo "---人工确认:user2访问/user1/user1.txt?--->/shared_dir/user1/user1.txt"
curl -u 'user2:123456' ftp://localhost/user1/user1.txt -o user2_user1.txt
echo "---人工确认:user2访问/user2/user2.txt?--->/shared_dir/user2/user2.txt"
curl -u 'user2:123456' ftp://localhost/user2/user2.txt -o user2_user2.txt
原理
chroot_local_user=YES(全局锁定)+ chroot_list_enable=YES+ chroot_list_file=/etc/vsftpd/chroot_list(列表中用户不锁定)
user1 被锁定在 user1自己的目录(看不到 user2),user2 不锁定(能看到 user1 和 user2 目录)
user1 被锁定在 user1自己的目录(看不到 user2),user2 不锁定(能看到 user1 和 user2 目录)
DNS
基础知识
软件名
bind9.18 & bin9.18-chroot
服务名
named
默认端口
53/TCP & 53/UDP
配置文件
/etc/named.conf
程序核心主配置文件
/etc/named.rfc1912.zones
区域配置文件
/var/named/named.localhost
数据配置模板文件
日志文件
sudo journalctl -u named --no-pager | tail -n 20
tail -fn200 /var/log/messages | grep named
单DNS安装及配置
安装配置firewall
• dnf install -y firewalld
• systemctl start firewalld
• systemctl start firewalld
• firewall-cmd --permanent --zone=public --add-service=dns
• firewall-cmd --reload
• firewall-cmd --reload
安装DNS并启动
sudo dnf install -y bind9.18 bin9.18-chroot
systemctl start named && systemctl enable named
配置文件权限配置
• sudo chown -R named:named /var/named
• sudo chown root:named /etc/named.conf
• sudo chown root:named /etc/named.conf
配置主核心全局配置
vi /etc/named.conf
options{
listen-on port 53 { any; }; // 127.0.0.1 改any
allow-query { any; }; // localhost 改any
}
listen-on port 53 { any; }; // 127.0.0.1 改any
allow-query { any; }; // localhost 改any
}
检查
sudo named-checkconf /etc/named.conf
配置区域 文件
正向区域
www.zoujiangping.com--->192.168.125.32
www.zoujiangping.com--->192.168.125.32
zone "zoujiangping.com" IN { // 修改域名为zoujiangping.com
type primary;
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
allow-update { none; };
};
type primary;
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
allow-update { none; };
};
反向区域
192.168.125.32--->www.zoujiangping.com
192.168.125.32--->www.zoujiangping.com
zone "125.168.192.in-addr.arpa" IN {
type primary;
file "data/125.168.192.zone";
allow-update { none; };
};
type primary;
file "data/125.168.192.zone";
allow-update { none; };
};
配置数据文件
正向A记录
拷贝模板
sudo cp -p /var/named/named.localhost /var/named/data/zoujiangping.com.zone
修改@ root,添加A记录
@ IN SOA @ zoujiangping.com.root. (
dns IN A 192.168.125.66
www IN A 192.168.125.32 //注意顶格写
ftp IN A 192.168.125.33
dns IN A 192.168.125.66
www IN A 192.168.125.32 //注意顶格写
ftp IN A 192.168.125.33
检查
sudo named-checkzone zoujiangping.com /var/named/data/zoujiangping.com.zone
反向PTR记录
拷贝模板
sudo cp -p /var/named/named.localhost /var/named/data/125.168.192.zone
修改@ root,添加PTR记录
@ IN SOA @ zoujiangping.com.root. ( ;改@ IN SOA @ rname.invalid. (
66 IN PTR dns.zoujiangping.com.
32 IN PTR www.zoujiangping.com.
33 IN PTR ftp.zoujiangping.com.
66 IN PTR dns.zoujiangping.com.
32 IN PTR www.zoujiangping.com.
33 IN PTR ftp.zoujiangping.com.
检查
named-checkzone 125.168.192.in-addr.arpa /var/named/data/125.168.192.zone
配置SELINUX
开启SELINUX
vi /etc/selinux/config
SELINUX=enforcing
允许named服务绑定到DNS端口
sudo setsebool -P named_write_master_zones on
允许named服务使用网络,允许区域文件传输
sudo setsebool -P named_tcp_bind_http_port on
修复named相关目录的正确上下文
自定义文件
sudo semanage fcontext -a -t named_zone_t "/var/named/data/zoujiangping.com.zone"
sudo semanage fcontext -a -t named_zone_t "/var/named/data/125.168.192.zone"
sudo restorecon -v /var/named/data/zoujiangping.com.zone
sudo restorecon -v /var/named/data/125.168.192.zone
sudo semanage fcontext -a -t named_zone_t "/var/named/data(/.*)?"
sudo restorecon -R -v /var/named/data
sudo semanage fcontext -a -t named_zone_t "/var/named/data/125.168.192.zone"
sudo restorecon -v /var/named/data/zoujiangping.com.zone
sudo restorecon -v /var/named/data/125.168.192.zone
sudo semanage fcontext -a -t named_zone_t "/var/named/data(/.*)?"
sudo restorecon -R -v /var/named/data
主配置文件
sudo semanage fcontext -a -t named_conf_t "/etc/named.conf"
sudo semanage fcontext -a -t named_conf_t "/etc/named.rfc1912.zones"
sudo restorecon -v /etc/named.conf
sudo restorecon -v /etc/named.rfc1912.zones
sudo semanage fcontext -a -t named_conf_t "/etc/named.rfc1912.zones"
sudo restorecon -v /etc/named.conf
sudo restorecon -v /etc/named.rfc1912.zones
运行时目录
# 设置 /var/run/named 及其内容的上下文(注意:/var/run 是 tmpfs,重启后重建)
sudo semanage fcontext -a -t named_var_run_t "/var/run/named(/.*)?"
# 立即应用(虽然 /var/run 重启会清空,但 systemd 服务启动时会自动继承正确上下文)
sudo restorecon -R -v /var/run/named
sudo semanage fcontext -a -t named_var_run_t "/var/run/named(/.*)?"
# 立即应用(虽然 /var/run 重启会清空,但 systemd 服务启动时会自动继承正确上下文)
sudo restorecon -R -v /var/run/named
使用非标准端口,需要添加端口标签
sudo semanage port -a -t dns_port_t -p tcp 53
sudo semanage port -a -t dns_port_t -p udp 53
sudo semanage port -a -t dns_port_t -p udp 53
重载生效
rndc reload
systemctl reload named
kill -HUP $(pgrep named)
测试
nslookup www.zoujiangping.com
dig @127.0.0.1 192.168.125.33
hostname ftp.zoujiangping.com
ping www.zoujiangping.com
主从同步DNS安装及配置
主DNS
192.168.125.44
192.168.125.44
注意:
单DNS 基础上更改
单DNS 基础上更改
区域文件
正向区域
www.zoujiangping.com--->192.168.125.32,192.168.125.33
ftp.zoujiangping.com--->192.168.125.33
www.zoujiangping.com--->192.168.125.32,192.168.125.33
ftp.zoujiangping.com--->192.168.125.33
zone "zoujiangping.com" IN { // 修改域名为zoujiangping.com
type master; //*** 修改为master
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
//allow-update { none; }; //*** 必须删除
//*** 新增转发及通知
allow-transfer {192.168.125.45;};
notify yes;
also-notify {192.168.125.45};
};
type master; //*** 修改为master
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
//allow-update { none; }; //*** 必须删除
//*** 新增转发及通知
allow-transfer {192.168.125.45;};
notify yes;
also-notify {192.168.125.45};
};
反向区域
192.168.125.32--->www.zoujiangping.com
192.168.125.32--->www.zoujiangping.com
zone "125.168.192.in-addr.arpa" IN {
type master; //*** 修改为master
file "data/125.168.192.zone";
// allow-update { none; }; //*** 必须删除
//*** 新增转发及通知
allow-transfer {192.168.125.45;};
notify yes;
also-notify {192.168.125.45};
};
type master; //*** 修改为master
file "data/125.168.192.zone";
// allow-update { none; }; //*** 必须删除
//*** 新增转发及通知
allow-transfer {192.168.125.45;};
notify yes;
also-notify {192.168.125.45};
};
检查
sudo named-checkconf /etc/named.conf
正向数据文件
正向A记录
拷贝模板
sudo cp -p /var/named/named.localhost /var/named/data/zoujiangping.com.zone
修改@ root,添加A记录
@ IN SOA @ zoujiangping.com.root. (
dns1 IN A 192.168.125.44
dns2 IN A 192.168.125.45
www IN A 192.168.125.32
www IN A 192.168.125.33
ftp IN A 192.168.125.33
dns1 IN A 192.168.125.44
dns2 IN A 192.168.125.45
www IN A 192.168.125.32
www IN A 192.168.125.33
ftp IN A 192.168.125.33
检查
sudo named-checkzone zoujiangping.com /var/named/data/zoujiangping.com.zone
反向数据文件
反向PTR记录
拷贝模板
sudo cp -p /var/named/named.localhost /var/named/data/125.168.192.zone
修改@ root,添加PTR记录
@ IN SOA @ zoujiangping.com.root. ( ;改@ IN SOA @ rname.invalid. (
44 IN PTR dns1.zoujiangping.com.
45 IN PTR dns2.zoujiangping.com.
32 IN PTR www.zoujiangping.com.
33 IN PTR www.zoujiangping.com.
33 IN PTR ftp.zoujiangping.com.
44 IN PTR dns1.zoujiangping.com.
45 IN PTR dns2.zoujiangping.com.
32 IN PTR www.zoujiangping.com.
33 IN PTR www.zoujiangping.com.
33 IN PTR ftp.zoujiangping.com.
检查
named-checkzone 125.168.192.in-addr.arpa /var/named/data/125.168.192.zone
重载生效
rndc reload
systemctl reload named
kill -HUP $(pgrep named)
测试
nslookup www.zoujiangping.com
dig @127.0.0.1 192.168.125.33
hostname ftp.zoujiangping.com
ping www.zoujiangping.com
从DNS
192.168.125.45
192.168.125.45
注意:
单DNS 基础上更改
单DNS 基础上更改
区域文件
正向区域
www.zoujiangping.com--->192.168.125.32,192.168.125.33
ftp.zoujiangping.com--->192.168.125.33
www.zoujiangping.com--->192.168.125.32,192.168.125.33
ftp.zoujiangping.com--->192.168.125.33
zone "zoujiangping.com" IN { // 修改域名为zoujiangping.com
type slave; //*** 修改为slave
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
//*** 新增主机
masters {192.168.125.44;};
};
type slave; //*** 修改为slave
// 修改位置 /var/named/data/zoujiangping.com.zone
file "data/zoujiangping.com.zone";
//*** 新增主机
masters {192.168.125.44;};
};
反向区域
192.168.125.32--->www.zoujiangping.com
192.168.125.32--->www.zoujiangping.com
zone "125.168.192.in-addr.arpa" IN {
type slave; //*** 修改为slave
file "data/125.168.192.zone";
//*** 新增主机
masters {192.168.125.44;};
};
type slave; //*** 修改为slave
file "data/125.168.192.zone";
//*** 新增主机
masters {192.168.125.44;};
};
检查
sudo named-checkconf /etc/named.conf
正向数据文件
正向A记录
创建空文件
touch /var/named/data/zoujiangping.com.zone
修改权限
• chown root:named /var/named/data/zoujiangping.com.zone
反向数据文件
反向PTR记录
创建空文件
touch /var/named/data/125.168.192.zone
修改权限
chown root:named /var/named/data/125.168.192.zone
重载生效
rndc reload
systemctl reload named
kill -HUP $(pgrep named)
测试
nslookup www.zoujiangping.com
dig @127.0.0.1 192.168.125.33
hostname ftp.zoujiangping.com
ping www.zoujiangping.com
测试
配置测试机首选DNS
192.168.125.44/45
nslookup www.zoujiangping.com
nslookup ftp.zoujiangping.com
nslookup 192.168.125.32
nslookup 192.168.125.33
host 192.168.125.32
nslookup 192.168.125.32
nslookup 192.168.125.33
host 192.168.125.32
DHCP
基础知识
软件名
dhcp-server
服务名
dhcpd
默认端口
S:UDP 67, C: UDP 68
配置文件
/etc/dhcp/dhcpd.conf
程序核心主配置文件
/etc/sysconfig/dhcpd
监听接口文件
日志文件
sudo journalctl -u dhcpd --no-pager | tail -n 20
tail -fn200 /var/log/messages | grep dhcpd
安装及配置
安装配置firewall
• dnf install -y firewalld
• systemctl start firewalld
• systemctl start firewalld
• firewall-cmd --permanent --zone=public --add-service=dhcp
• firewall-cmd --reload
• firewall-cmd --reload
配置SELINUX
开启SELINUX
vi /etc/selinux/config
SELINUX=enforcing
sudo sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
允许DHCP服务运行
setsebool -P dhcpd_disable_trans=0
恢复标准目录上下文
restorecon -R /etc/dhcp/
restorecon -R /var/lib/dhcpd/
restorecon -R /var/lib/dhcpd/
使用非标准端口,需要添加端口标签
semanage port -a -t dhcp_port_t -p udp 67
semanage port -a -t dhcp_port_t -p udp 68
semanage port -a -t dhcp_port_t -p udp 68
配置核心主配置文件
vi /etc/dhcp/dhcpd.conf
option domain-name "8023.com";
option domain-name-servers 114.114.114.114,8.8.8.8;
default-lease-time 86400; # centos stream 9 只支持数字
max-lease-time 172800;
subnet 192.168.125.0 netmask 255.255.255.0
{
range 192.168.125.44 192.168.125.99;
option routers 192.168.125.1;
option broadcast-address 192.168.125.255;
}
host i8023e.localdomain #客户端主机名称
{
hardware ethernet 00:0c:29:19:a3:80;
fixed-address 192.168.125.88;
}
option domain-name-servers 114.114.114.114,8.8.8.8;
default-lease-time 86400; # centos stream 9 只支持数字
max-lease-time 172800;
subnet 192.168.125.0 netmask 255.255.255.0
{
range 192.168.125.44 192.168.125.99;
option routers 192.168.125.1;
option broadcast-address 192.168.125.255;
}
host i8023e.localdomain #客户端主机名称
{
hardware ethernet 00:0c:29:19:a3:80;
fixed-address 192.168.125.88;
}
排除单个IP
host
排除连续IP
配置监听接口
vi /etc/sysconfig/dhcpd
增加
DHCPDARGS="ens33"
检查并启动
检查配置
dhcpd -t -cf /etc/dhcp/dhcpd.conf
启动并检查状态
systemctl restart dhcpd && systemctl status dhcpd
磁盘管理
前置知识
磁盘分类
HDD
磁头读写
价格低、速度慢
SSD
闪存芯片
速度快、价格高
磁盘接口
SATA
消费级基础存储
SAS
企业级高可靠存储
NVMe/PCIe
高性能闪存专用
磁盘分区表类型
MBR(Master Boot Record,主引导记录)
• 分区限制:最多4个主分区或3主分区+1扩展分区
• 容量限制:最大2.2TB
• 工具:fdisk
• 分区序号:主分区1-4,逻辑分区从5开始
• 容量限制:最大2.2TB
• 工具:fdisk
• 分区序号:主分区1-4,逻辑分区从5开始
GPT( GUID Partition Table, GUID分区表)
• 分区数量:支持128个主分区
• 容量支持:无限制(最大18EB,1EB=1024PB,1PB=1024TB,1TB=1024GB)
• 兼容性:需要UEFI (Unified Extensible Firmware Interface) BIOS支持
• 工具:gdisk或parted
• 容量支持:无限制(最大18EB,1EB=1024PB,1PB=1024TB,1TB=1024GB)
• 兼容性:需要UEFI (Unified Extensible Firmware Interface) BIOS支持
• 工具:gdisk或parted
磁盘分区类型
主分区
直接占用分区表,可存储数据
扩展分区
占用主分区位置,内部划分逻辑分区
逻辑分区
在扩展分区中创建,突破MBR限制
文件系统类型
Wndows
NTFS
Windows系统
支持大文件、权限管理
FAT32
U盘等移动设备
跨平台兼容性强
exFAT
闪存设备(U盘、SD卡)
解决FAT32限制,支持大文件
Linux
ext4
配置日志系统,稳定性好
一般用途
xfs
性能更强
高性能需求
vfat
跨平台设计
兼容性要求
磁盘映射类型
IDE设备
/dev/hd[a-d]
SCSI/SATA/U 盘
/dev/sd[a-p]
软驱
/dev/fd[0-1]
打印机
/dev/lp[0-15]
光驱
/dev/cdrom
鼠标
/dev/mouse
三步走
1.分区
为什么要分区
• 系统隔离:不同功能文件分配到独立分区
• 性能优化:根据用途选择文件系统
• 扩容维护:单个分区空间不足时可单独处理
• 备份简化:独立分区简化备份策略
• 性能优化:根据用途选择文件系统
• 扩容维护:单个分区空间不足时可单独处理
• 备份简化:独立分区简化备份策略
查
磁盘信息查看命令(块设备)
lsblk
SCSI设备列表
lsscsi -v
磁盘空间使用详情
df -hT
磁盘目录使用详情
du -ah /etc |head -10
常见错误
"device is busy"
• 确保分区未被挂载:umount /dev/sdb1
• 检查是否有进程占用:lsof | grep /dev/sdb1
• 结束占用的进程 fuser -kvm /dev/sdb1
• 检查是否有进程占用:lsof | grep /dev/sdb1
• 结束占用的进程 fuser -kvm /dev/sdb1
"No such file or directory"
• 确保设备存在:lsblk
增
扫描硬盘
分区表重载
partprobe
重新扫描磁盘分区表,使内核立即识别分区变化,无需重启系统。
• 使用fdisk、parted等工具修改分区后
• 添加新硬盘后需要立即识别分区
• 分区表发生变化但系统未自动更新时
• 添加新硬盘后需要立即识别分区
• 分区表发生变化但系统未自动更新时
热加载 -扫描SCSI总线
for host in /sys/class/scsi_host/host*/scan; do
echo "- - -" > $host
done
echo "- - -" > $host
done
分区工具
MBR
fdisk, 只支持MBR,默认将磁盘划分为MBR格式分区
添加主分区
添加扩展分区
添加逻辑分区
GPT
gdisk
只支持GPT, 默认将磁盘划分为GPT格式的分区
2.格式化
为什么要格式化
• 创建文件系统结构(如"货架结构")
• 确保不同操作系统间的兼容性
• 按规则存储和读取数据
• 确保不同操作系统间的兼容性
• 按规则存储和读取数据
注意事项:格式化会清除分区数据,请确保已备份
mkfs [选项] 文件系统类型 设备
sudo mkfs -tv ext4 /dev/sda 创建
sudo mkfs.xfs /dev/sda 改
3.挂载
为什么要挂载
• 统一访问入口:通过目录操作分区内容
• 动态扩展:随时挂载新磁盘扩展存储空间
• 动态扩展:随时挂载新磁盘扩展存储空间
挂载规则
• 一个挂载点同一时间只能挂载一个设备
• 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
• 一个设备可以同时挂载到多个挂载点
• 挂载点一般是已存在空的目录
• 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
• 一个设备可以同时挂载到多个挂载点
• 挂载点一般是已存在空的目录
mount [选项] <设备> <挂载点>
• 挂载硬盘分区
sudo mount -t ext4 /dev/sdb1 /mnt/data
• 镜像挂载(ISO 文件)
sudo mount -o loop mydisk.iso /mnt/iso
• 挂载 NFS 共享
sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs_share
• 挂载 SMB/CIFS 共享
sudo mount -t cifs //192.168.1.200/share /mnt/smb_share -o user=your_username
开机自动持载
vi /etc/fstab
卸载
umount [挂载点]或[设备文件]
用户使用的情况下,会解挂载失败,
可以通过fuser命令查询进程中的用户,
并将改用户的进程停止。
可以通过fuser命令查询进程中的用户,
并将改用户的进程停止。
4.修复
fsck
注意:在修复文件前需要解挂载。
5.常见错误
设备忙或已启用
sudo swapoff /dev/sda1
sudo swapon /dev/sda1 -p 0
sudo swapon /dev/sda1 -p 0
无效的优先级值
sudo swapon /dev/sda1 -p 0
设备不存在或格式错误
sudo mkswap /dev/sda1
sudo swapon /dev/sda1 -p 0
sudo swapon /dev/sda1 -p 0
权限要求
sudo swapoff /dev/sda1
内存不足警告
sudo swapoff -a
检查依赖进程
sudo lsof | grep -i swap
RAID
RAID0
原理
把至少2块硬盘通过硬件或软件方式串联,组成一个大的卷组,并将数据依次写入到各个硬盘。
优点
数据同步传输,读取/写入分开,性能大大提升。
缺点
若任意一块硬盘故障会导致整个系统的数据损坏,无备份冗余能力错误修复能力。
总结
使用率100%至少2块磁盘才能使用,优点是提升磁盘的读写速度,缺点是不安全。
RAID1
原因
若生产环境对硬盘的读写速度没较大要求,但希望增加数据安全性时可使用RAID
原理
把至少2块硬盘绑定起来,写入数据时将数据同时也写入另一或多块硬盘中,
本质
多个硬盘作为镜像备份
优点
数据备份冗余安全性大大提升
缺点
硬盘利用率下降
总结
是镜像,使用两块磁盘,一式两份的方式,支持容错,冗余,数据安全不丢失,
缺点是速度不快,使用率50%,成本较大。
缺点是速度不快,使用率50%,成本较大。
RAID5
原因
兼顾“读写速度”、“数据安全”、“成本”的一种折中方式
原理
需至少三块硬盘,将数据分块存储到不同硬盘中,硬盘中必须存储其它一个硬盘的parity(奇偶校验信息)
优点
兼顾性能,通过“奇偶校验”替代“镜像备份”
缺点
硬盘数据安全性较低
总结
使用率(n-1)/n*容量,磁盘坏了会立即补上,数据会恢复
RAID10
本质
RAID1+RAID0 的组合 也称为镜像条带化(mirrored striping)
原理
至少需要4块硬盘,先制作两两的RAID1阵列,以保证安全性,在两两制作RAID0,以提高读写速度
优点
可以同时提高数据传输速度和容错能力,因为它将数据分散存储在多个镜像对上。
如果某个硬盘出现故障,只要它所在的镜像对中还有一个硬盘正常工作,数据就不会丢失, 兼具速度和安全性。
如果某个硬盘出现故障,只要它所在的镜像对中还有一个硬盘正常工作,数据就不会丢失, 兼具速度和安全性。
缺点
降低了存储空间利用率,因为每个硬盘都要存储一半的数据,成本较高。
部署
VMware中添加四块虚拟磁盘sdb(下图展示已添加,注意,但你的机器未必有),sdc,sdd,sde
#1. 先做快照 命名: 磁盘RAID10 前
#2. 开机状态下,添加四块磁盘
#3. 热加载,扫描所有SCSI设备
#4. 检查确认
#2. 开机状态下,添加四块磁盘
#3. 热加载,扫描所有SCSI设备
#4. 检查确认
循环一次性扫描所有host/SCSI总线
for host in /sys/class/scsi_host/host*/scan; do
echo "- - -" > $host
done
echo "- - -" > $host
done
检查确认
sblk
fdisk -l
创建RAID 10阵列(至少4块磁盘sdb,sdc,sdd,sde)
sudo mdadm -Cv /dev/md0 -l 10 -n 4 /dev/sd{b..e}
验证创建状态
cat /proc/mdstat
查看磁盘阵列信息
sudo mdadm -D /dev/md0
格式化为xfs文件系统
mkfs.xfs /dev/md0
检查确认
blkid /dev/md0 # 查看 UUID 和文件系统类型
xfs_info /dev/md0 # 查看详细 XFS 参数(输出一致)
xfs_info /dev/md0 # 查看详细 XFS 参数(输出一致)
挂载
创建挂载点
mkdir -p /mnt/raid10
挂载
mount /dev/md0 /mnt/raid10
检查确认
df -h
RAID50
至少需要6块硬盘,磁盘的冗余相当于每三个硬盘做了一个Raid5,
然后,每个Raid5又组合成了Raid0(Raid5中有一个硬盘冗余,即使坏了也不会破坏Raid0),
所以,Raid50的磁盘的 冗余硬盘数量=磁盘总数÷3 。
然后,每个Raid5又组合成了Raid0(Raid5中有一个硬盘冗余,即使坏了也不会破坏Raid0),
所以,Raid50的磁盘的 冗余硬盘数量=磁盘总数÷3 。
RAID60
至少需要8块硬盘
LVM
终端
[root@evian network-scripts]#
1. 登录用户
id
id 用户名
查看系统中的用户信息,可以用于验证用户是否存在
直查当前用户
whoami / users
直查当前用户
who -a
w
pinky
直查当前用户详细信息
loginctl
审计日志
last
显示最近10次登录详情
lastlog
所有用户最后登录时间
指定用户最后登录
lastlog -u evian
检查长时间未登录的用户
lastlog | grep -v "Never logged in"
2. @ 分隔符
3. 当前主机名
主机名类型
临时主机名 transient
静态(内核/系统)主机名 static
灵活主机名(修饰性主机名) pretty
临时修改
1、确认原有静态及临时主机名 hostnamectl status
2、临时更改主机名 sudo hostname 8023
3、再确认是否修改成功 hostnamectl status 或 hostname -f
法1: sudo hostname 8023
法2: sudo hostnamectl set-hostname 580231 --transient
2、临时更改主机名 sudo hostname 8023
3、再确认是否修改成功 hostnamectl status 或 hostname -f
法1: sudo hostname 8023
法2: sudo hostnamectl set-hostname 580231 --transient
永久修改
改
法1,hostnamectl set-hostname "i8023e.localdomain" --static
法2,hostnamectl set-hostname "i8023e.localdomain"
法3, sudo vi /etc/hostname
法2,hostnamectl set-hostname "i8023e.localdomain"
法3, sudo vi /etc/hostname
重载生效
sudo systemctl restart systemd-hostnamed
查
hostnamectl status 或hostnamectl --static
bash或exec bash
4. 当前所在的目录
~ 当前用户的家目录
5. 普通用户$,root#
6. 环境变量
用户变量
vim ~/.bashrc; source ~/.bashrc;
系统变量
vim /etc/bashrc ;47~49行 修改; source /etc/bashrc;
7. 重新加载
bash
加载用户的环境变量,更新用户的机器环境信息
终端提示符之后
输入命令
执行可执行文件
执行脚本文件
命令格式语法
命令 + 条件/参数 + 对象/文件/目录
TAB补全
命令的补全
路径的补全
路径
绝对路径
相对路径
VIM
配置文件
~/.vimrc
5种模式
普通模式vim test.c
字符操作
a append end of word
i insert before of word
A append end of line
I insert before of line
o insert next line
O insert last line
x --->
X <---
u undo
ctrl+r
i insert before of word
A append end of line
I insert before of line
o insert next line
O insert last line
x --->
X <---
u undo
ctrl+r
行操作
首:home=0 绝对或 ^ 内容 g^
尾: end = $ 或 g_ g$
dd 5dd
yy 3yy yy3
思考:3yy 与yy3 有区别吗?
p ---> P <--- paste
思考:剪切如何操作?
D=d^ y^ delete yank
d$ y$
尾: end = $ 或 g_ g$
dd 5dd
yy 3yy yy3
思考:3yy 与yy3 有区别吗?
p ---> P <--- paste
思考:剪切如何操作?
D=d^ y^ delete yank
d$ y$
词操作
dw 光标在哪才能完整删除整词?
w window
yw yank word
c3w change
w window
yw yank word
c3w change
块操作
y%p 等同于 ya(p a= around(包含边界)→ 要边界符号 注意 光标在哪?
d%i
yi(p i= inside(内部)→ 不要边界符号
d%i
yi(p i= inside(内部)→ 不要边界符号
命令模式
常用命令,不包含配置
• :wq = ZZ
• :%s/旧/新/g
• :1,99s/旧/新/g
• /string
• ?string
• :%s/旧/新/g
• :1,99s/旧/新/g
• /string
• ?string
执行其它命令
• vim test.c , !gcc test.c
• vim a.txt , :!ifconfig , 右键复制,ctrl+shift+v 不退出vi插入mac
• vim 打开了目录,q! 直接退出
• vim a.txt , :!ifconfig , 右键复制,ctrl+shift+v 不退出vi插入mac
• vim 打开了目录,q! 直接退出
定位
• gg 首行
• G 尾行
• :20 或 30G 或 10gg
• G 尾行
• :20 或 30G 或 10gg
读其它文件内容
• vim a.txt , :r /etc/passwd
• mv /etc/ssh/sshd_config{,.bak}
• vi /etc/ssh/sshd_config , :r /etc/ssh/sshd_config.bak
• mv /etc/ssh/sshd_config{,.bak}
• vi /etc/ssh/sshd_config , :r /etc/ssh/sshd_config.bak
打开多文件 o上下分屏,O左右分屏
• vim -o /etc/passwd /etc/hosts, ctrl+w 切换
可视化模式
多行注释
ctrl+v, 上下选中待修改的行首,shift+i , // , esc
删除多行注释
ctrl+v, 上下选中待修改的行首,shift+i , x或d , esc
替换模式
• 改光标后的一个字符: r +字符
• 替换光标所到之处字符,ESC止:R+字符
• 替换光标所到之处字符,ESC止:R+字符
超级配置
超强VIM
自动安装
wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x
手动安装
• wget http://files.cnblogs.com/ma6174/vimrc.zip
• unzip -f vimrc.zip -d ~/
• unzip -f vimrc.zip -d ~/
VimPlus
• git clone https://github.com/chxuan/vimplus.git
• cd ./vimplus
• sudo ./install.sh
• cd ./vimplus
• sudo ./install.sh
网络管理
网卡命名
centos stream 9
`之前`,eth0, eth1....
`之后`,以太网 en, 无线局域网 wl, 无线广域网ww
o# o内置网卡,#设备编号
s# s外置网卡,#执插拔接口编号
x# 网卡的mac地址
p#s# p 表示pci插口,#表示 PCI 插口编号; s表示热插拔接口,#表示热插拔接口编号
`之前`,eth0, eth1....
`之后`,以太网 en, 无线局域网 wl, 无线广域网ww
o# o内置网卡,#设备编号
s# s外置网卡,#执插拔接口编号
x# 网卡的mac地址
p#s# p 表示pci插口,#表示 PCI 插口编号; s表示热插拔接口,#表示热插拔接口编号
网卡配置
检查配置
IP
ip a s
ifconfig -a
Gateway
ip r s
route -n
netstat -rn
DNS
nmcli c s ens33| grep -A5 -B5 ipv4.dns
/etc/resolv.conf
在该文件中,写入配置,分为主和备,两个DNS地址,
为了防止一个dns服务器如果挂掉了,就无法进行域名解析
为了防止一个dns服务器如果挂掉了,就无法进行域名解析
公网DNS
223.5.5.5
绿色的,正确的公网DNS
恶意的DNS劫持
访问百度 www.baidu.com
dns返回错误的ip 访问到错误的网址,或者病毒网站
1.会关闭你本地的公网dns服务器设置
2.修改你本地的hosts文件
解决办法
去删掉hosts里的恶意解析
修复客户端正确的dns服务器即可
涉及本地机器,会有dns解析缓存,使用命令强制刷新
其他主流的dns服务器地址
114.114.114.114
1.1.1.1 Cloudflare
8.8.8.8 google
host
本地的地址解析
可以用于测试
永久生效-NetworkManger命令
nmcli c a type ethernet con-name ens34 ifname ens34
nmcli c m ens34 ipv4.addresses "192.168.10.2/24"
nmcli c reload ens34
nmcli c u ens34
临时生效-IP命令
ip a add 192.168.10.2/24 device ens34
ip a change 192.168.10.2/24 dev ens34 to 192.168.10.3/24 不建议用
ip a del 192.168.10.2/24 dev ens34
network-scripts,centos8-
/etc/sysconfig/network-scripts/ifcfg-eth*
NetworkManager,centos8+
/etc/NetworkManager/system-connections/ens*.nmconnection
双网卡绑定
物理上添加两网卡
ip a s 查新网卡名
新网卡新增配置文件
开机加载bonding
新增bond0网卡
bond0绑定两从属接口
删除从属网卡配置
bond0配置IP
选择建议
需要冗余:选active-backup(模式1),配置简单,无需交换机支持。
需要高带宽+冗余(交换机支持LACP):
选802.3ad(模式4),需交换机启用LACP。
需要简单负载均衡(交换机不支持LACP):
选balance-rr(模式0)或balance-xor(模式2),需交换机静态绑定。
无需交换机配置+负载均衡:选balance-alb(模式6),适用于普通环境。
需要高带宽+冗余(交换机支持LACP):
选802.3ad(模式4),需交换机启用LACP。
需要简单负载均衡(交换机不支持LACP):
选balance-rr(模式0)或balance-xor(模式2),需交换机静态绑定。
无需交换机配置+负载均衡:选balance-alb(模式6),适用于普通环境。
查网
1、检查IP、子网掩码、网关、DNS等配置
ip a s
ip r s
nmcli c s ens33| grep -A5 -B5 ipv4.dns
ip r s
nmcli c s ens33| grep -A5 -B5 ipv4.dns
2、核查中间配置文件
/etc/NetworkManager/sysconnections/ens*.nmconnection
/etc/hosts
/etc/resolv.conf
/etc/hosts
/etc/resolv.conf
3、ping通 本机/环回地址
4、ping 通同一网段其它主机和网关
5、ping 通 网关
6、lsof -i:端口
ss -antu|grep 端口
netstat -antu|grep 端口
ss -antu|grep 端口
netstat -antu|grep 端口
7、检查firewall
8、检查SELINUX
9、ping外部IP
10、ping 通 dns
nslookup 域名
nslookup 域名
11、telnet 目标IP 端口
软件包管理
DNF
YUM源先配置好
参考1
Waiting for process with pid X to finish
su - && kill -9 pid
reboot
搜索/安装/升级/卸载
dnf search software
dnf install -y software1 software2
dnf upgrade/update software
dnf remove/erase software
RPM
下载
wget -bc https://example.com/file.tar,gz
curl -O -L https://example.com/file.zip
解压
单个文件
.gz
gzip -c file > file.zip
gunzip -d file.gz
.bz2
bzip2 -c file > file.bz2
bzunip2 -d file.bz2
多个文件
.zip
zip -r file.zip dir
unzip -d /target/dir
.tar.gz / .tgz
tar -czvf file.tar.gz dir
tar -xzvf file.tar.gz -C /target/dir/
.tar.bz2
tar -cjvf file.tar.bz2 dir
tar -xjvf file.tar.bz2 -C /target/dir/
.tar.xz
tar -cJvf file.tar.xz dir
tar -xJvf file.tar.xz -C /target/dir/
安装/升级/卸载
rpm -ivh *.rpm
rpm -Uvh *.rpm
rpm -e *.rpm
源码
安装依赖+下载源码+解压缩+配置configure+编译make+安装make install
二进制
已编译好的绿色版二进制程序-可移植同系统设备
用户/组管理
配置文件
用户账号文件
/etc/passwd
username:password:UID:GID:GECOS:homedir:shell
username:password:UID:GID:GECOS:homedir:shell
vipw
锁定-编辑-校验-同步
用户影子文件
/etc/shadow
username:password:last_change:min_age:max_age:warn:inactive:expire:reserved
username:password:last_change:min_age:max_age:warn:inactive:expire:reserved
vipw -s
用户组账号文件
/etc/group
group_name:password:GID:user_list
group_name:password:GID:user_list
vigr
用户组影子文件
/etc/gshadow
group_name:encrypted_password:group_admins:group_members
group_name:encrypted_password:group_admins:group_members
vigr -s
用户账户与用户组的默认策略文件
/etc/login.defs
备份→编辑→验证→恢复预案
sudo权限文件
/etc/sudoers
visudo
用户操作
增
sudo useradd -m -s /bin/bash -d /home/test -u 1001 -g testgroup -e 2025-08-01 testuser
删
sudo userdel -r testuser
注意先备份家目录数据
注意 先查看有无用户进程正在运行
ps -u username
ps -f -u username
改
属性
sudo usermod -aG developers -c "newtestuser" -l newtestuser testuser
修改当前登录用户username的家目录
修改登录用户名(@前面的部分)立即生效
修改非登录用户username家目录
passwd username
临时禁用与恢复
passwd -l /-u testuser
usermod -L/-U testuser
登录用户
切换用户
建议使用sudo 与su -
查
id username
grep -A0 "username" /etc/passwd
用户组操作
增
组
sudo groupadd -g 2000 testgroup
验证:getent group testgroup / grep testgroup /etc/group
验证:getent group testgroup / grep testgroup /etc/group
组添加用户
sudo gpasswd -a testuser1 testgroup
删
组
sudo groupdel newgroup
组移除用户
sudo gpasswd -d testuser2 testgroup
改
sudo groupmod -g 3000 -n newgroup testgroup
查
sudo groups testuser1 / groups
id testuser1
grep newgroup /etc/group
文件管理
文件夹严格区分大小写
Linux的目录需要挂载后再使用
Linux中的一切都是文件,磁盘需要挂载后再使用
mount 可以类比Windows的磁盘流程
Linux不关心扩展名
Linux一切皆文件
以文件的权限为标准
文件的类型,处决于你当时建立时,敲下的命令
约定的扩展名只是为了方便读取和区分
压缩文件
gz、.bz2、.zip、.tar.gz、.tar.bz2、.tgz
网页相关文件
.js .html .css
代码相关的文件
.pyth .java .sh .go
特殊的目录
. 当前的工作目录
.. 上一级的目录
可以连续使用,返回多级目录
cd ../../
~ 用户的家目录
超级用户root
/root
普通用户
/home/用户名
- 表示上一次的工作目录
cd -
注意:Windows下是右候斜杠\,Linux是左斜杠/
目录操作
增
mkdir -p -m 755 /pdir/dir
空白目录
删
rmdir -p dir
只能删除空目录
rm -r dir
支持删除非空目录或空目录
改
cd dir
默认家目录
chmod -R 755 dir
chmod -R u/g/o/a =/+/- r/w/x dir
chmod -R u/g/o/a =/+/- r/w/x dir
chown -R user:group dir
mv olddir newdir
cp -r olddir newdir
scp -P 2222 -r /localhost/dir user@IP:/home/dir
scp -P 2222 -r user@IP:/home/dir /localhost/dir
scp -P 2222 -r userA@IP:/home/dir userB@IP:/home/dir
scp -P 2222 -r user@IP:/home/dir /localhost/dir
scp -P 2222 -r userA@IP:/home/dir userB@IP:/home/dir
A--->B,无需在服务器A上安装 scp,只需本地有 scp 即可
锁定(root也不可改)/解锁
sudo chattr +i dir
sudo chattr -i dir
查
pwd
注意:显示绝对路径
ls -lah dir
ls -il dir
ls -Zd dir
lsattr dir
namei -l dir
tree dir
文件操作
增
touch file
1创建普通文件,当文件不存在时,创建
touch filename
创建空白文件
注意文件命名的规则
除了字符“/”之外,所有的字符都可以使用
文件名尽量不要使用特殊符号
<、>、?、* 等
如果需要使用特殊符号
文件名加上单引号
touch 'hello world'.txt
当你的文件出现特殊符号时,系统会加上反斜杠,
对其进行转义,去掉它的特殊作用
对其进行转义,去掉它的特殊作用
cat hello\ world.txt
2.如果文件已经存在,可以修改文件的时间戳
vi file
echo "hello" > file
cat /tee > file << EOF
${date} hello
EOF
${date} hello
EOF
删
文件
删除 rm file1 file2
覆盖 unlink file
粉碎 shred -u -n5 file
移动 mv
内容
> file
vi file, dd
改
文件名
mv
权限
chmod 600 file
chmod +x file
chown user:group file
chmod +x file
chown user:group file
chattr +i file
chattr -i file
chattr -i file
内容
sed -i
基础替换
sed -i 's/old/new/g' file(-i直接修改不备份,全局替换)
删除行
sed '3d' file(删除第3行);sed '2,5d' file (删除2-5行)
备份修改
sed -i.bak 's|old|new|' FILE
条件追加
sed -i '/head/aSTRING' FILE
分组引用替换
sed -i.bak 's|(start)|\1"/end"|' FILE
范围批量替换
sed -i '/start/,/end/ {
s|old1|new1|
s|old2|new2|
}' FILE
s|old1|new1|
s|old2|new2|
}' FILE
vi file
查
内容
cat/more/less/head/tail
grep
grep -A3 -B2 "error" file
cut
cut -d ':' -f 1,3-5 /etc/passwd
awk
awk -F ':' '$3 > 1000 {print $1, $3}' /etc/passwd
属性
ls -il file
ln oldfile newfile
ln -s oldfile newfile
ls -Z file
lsattr file
stat/file/wc file
stat
stat命令可以查看详细的文件时间
[root@localhost tmp]# stat hello\ world.txt
文件:"hello world.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:33592777 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-08-10 22:27:46.711209873 +0800
最近更改:2022-08-10 22:23:50.447438582 +0800
最近改动:2022-08-1
文件:"hello world.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:33592777 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2022-08-10 22:27:46.711209873 +0800
最近更改:2022-08-10 22:23:50.447438582 +0800
最近改动:2022-08-1
stat filename
可以检查文件是否被访问,判断电脑是否被入侵
进程占用
lsof file
fuser -v file
路径
find
which/whereis/locate
进程管理
进程vs 线程
进程定义
1. 进程指计算机中正在运行的程序的实例,而进程既可以是程序代码,也可以是数据,还可以是系统资源等等。
2. 每个进程都有自己独立的内存空间和系统资源,每个进程都拥有自己的执行上下文,
而进程之间也可以通过操作系统提供的机制进行通信。
而进程之间也可以通过操作系统提供的机制进行通信。
3. 每个进程在系统中都有一个唯一的进程ID(PID),用于标识该进程。PID是一个非负整数。
pidof -s sshd, lsof -i:22 , lsof -p 1174 #通过进程号查找所有文件
pidof -s sshd, lsof -i:22 , lsof -p 1174 #通过进程号查找所有文件
同步vs互斥
进程三状态模型
并发vs并行
进程操作
查看静态进程(快照)
ps -ef | grep nginx
ps aux --sort=-%cpu | grep httpd
pstree |grep httpd
查看进程的父子关系
查看动态进程
top/htop
实时监控进程状态
交互式操作
P
M
测试进程
ping 8.8.8.8
sleep 300
yes > /dev/null &
瞬间占满CPU
stress -c 4 -i 4 -m 2 --vm-bytes 128M -t 10s
压力测试
进程控制
控制作业
后台进程
进程放至后台作业,命令行后加&符号
调至前台 fg %作业号
前台进程
调至后中执行 bg %作业号
查看当前终端的作业量
jobs
后台启动
nohup java -jar abc.jar > app.log 2>&1 < /dev/null &
进程信号量
ctrl+c/ctrl+z
重点:中止进程/将进程放至后台暂停
kill -l
查找所有信号量
杀死进程
kill -9 PID
需先ps查找PID,再根据PID杀掉一个进程
kill -KILL PID
kill -s SIGKILL PID
killall 进程名
pkill 进程名
pkill 进程名
按进程名杀掉一批进程,无需先查找PID
pgrep -f 进程名 |xargs kill -9
定时计划任务
一次性任务
at
增
at now +1 minutes
/bin/ls /
ctrl+d
/bin/ls /
ctrl+d
查
atq
确认是否执行
journalctl -i atd -n5 --no-pager
死循环任务
crontab -e
systemctl reload crond
重载crond配置
查某用户有无计划任务
crontab -uevian -l
/etc/crontab 用户,文件
/etc/cron.d 系统,目录
/var/spool/cron 目录
/etc/cron.d 系统,目录
/var/spool/cron 目录
systemd
服务service:一个常驻内存的程序,对外提供网络资源
1、并行处理,加快系统的启动速度
2、可设置服务依赖,并自我检查
3、服务可以分类,类似于群组概念
2、可设置服务依赖,并自我检查
3、服务可以分类,类似于群组概念
配置目录
/usr/lib/systemd/system 优先级低
/run/systemd/system 优先级中等
/etc/systemd/system 优先级高
服务单元
一个执行脚本叫单元Unit
单元具有类型Type
service(服务)
socket(套接字)
target(目标)
device(设备)
mount(挂载点)
automount(自动挂载)
swap(交换空间)
timer(定时器)
path(路径)
slice(切片)
scope(范围)
snapshot(快照)
socket(套接字)
target(目标)
device(设备)
mount(挂载点)
automount(自动挂载)
swap(交换空间)
timer(定时器)
path(路径)
slice(切片)
scope(范围)
snapshot(快照)
systemctl管理服务
命令语法:systemctl command unit
command
start
启动
stop
停止
restart
重启:先停止后启动
reload
重新加载配置文件
enable
启用开机启动
disable
禁止开机启动
status
查看进程状态
is-active
判断进程是否正在运行
is-enabled
开机是否启动
list-dependencies
列出单元依赖
安全管理
1. 账号和密码安全
核心原则
使用强密码,并定期更换。(各系统相同用户使用不同密码)
关键操作
1.设置密码复杂度
2.强制用户定期更改密码
修改 /etc/login.defs文件中的 PASS_MAX_DAYS值
例如设为 30(30天有效期)
例如设为 30(30天有效期)
3.强制用户下次登录更改密码
sudo chage -d 0 用户名 或 sudo chage --lastday 0 用户名
sudo passwd -e 用户名 或 sudo passwd --expire 用户名
sudo passwd -e 用户名 或 sudo passwd --expire 用户名
4.管理临时账号
• 用完即删:userdel -r 用户名
5.检查登录用户
6.监控用户行为 sudo dnf install psacct -y
2.保护重要文件
核心原则
锁死关键系统文件,防止被篡改。
关键操作
锁定/解锁文件
chattr +i /etc/passwd /etc/shadow
chattr -i file
查看文件状态
lsattr -l /dir/*
查看文件正在被谁使用
lsof -i :端口号:查看谁在占用某个端口
3.软件的卸载
核心原则
用官方工具卸载软件,避免残留
关键操作
• 卸载软件:yum -y remove 软件名或 dnf -y remove 软件名
4.最小授权原则
核心原则
只安装必需的软件,只开启必需的服务。
核心原则
禁止直接以root身份远程登录。
关键操作
• 安装系统时选择“最小化安装”。
• 关闭不用的服务和端口。
5.远程登录安全
关键操作
使用普通用户+提权:用普通账号登录,然后使用 sudo命令执行管理员操作。
修改SSH端口:修改 /etc/ssh/sshd_config文件,将默认的22端口改为其它(让别人猜不到最好)。
对外服务器尽可能只开一台,且只开放443端口。
6.数据备份与日志检查
核心原则
定期备份,异地保存;定期检查日志。
关键操作
备份:重要数据要做本地、异地、多种介质的备份。
日志:重点关注
/var/log/secure(安全登录日志)、
/var/log/messages(系统日志)
,/var/log/audit/audit.log(审计日志)等。
/var/log/secure(安全登录日志)、
/var/log/messages(系统日志)
,/var/log/audit/audit.log(审计日志)等。
查看指定时间、指定进程、指定用户ID/用户组ID、指定优先级的日志: journalctl
7.firewalld
zone
核心原则
只开放必要的端口,同时更换默认端口中(除80/443)
关键操作
• 安装firewalld # sudo dnf install firewalld firewall-config
systemd服务单元
增加端口或服务
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
删除端口或服务
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
sudo firewall-cmd --zone=public --remove-service=http --permanent
firewall-cmd --complete-reload
sudo firewall-cmd --zone=public --remove-service=http --permanent
firewall-cmd --complete-reload
查询端口或服务 sudo firewall-cmd --zone=public --list-ports
安全策略配置
禁ping
sudo firewall-cmd --zone=public --add-rich-rule='
rule family="ipv4"
protocol="icmp"
icmp-type="echo-request"
drop' --permanent
rule family="ipv4"
protocol="icmp"
icmp-type="echo-request"
drop' --permanent
IP白名单(允许特定IP访问SSH)
sudo firewall-cmd --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.1.100"
port protocol="tcp" port="22"
accept' --permanent
rule family="ipv4"
source address="192.168.1.100"
port protocol="tcp" port="22"
accept' --permanent
IP黑名单(拒绝网段访问SSH)
sudo firewall-cmd --zone=public --add-rich-rule='
rule family="ipv4"
source address="192.168.175.0/24"
service name="ssh"
reject' --permanent
rule family="ipv4"
source address="192.168.175.0/24"
service name="ssh"
reject' --permanent
核心日志
# 查看拒绝日志
sudo journalctl -u firewalld -f
sudo journalctl -u firewalld -f
8.SELINUX
最小权限原则
进程/用户只能访问其明确需要的资源。
安全上下文是“安全标签”
进程:安全上下文存储在内存中
文件:安全上下文存储在文件的inode里
基于标签的访问控制
所有资源(文件、端口、进程)被赋予Security Context。
工作模式
Enforcing
(强制模式)
(强制模式)
强制执行策略,拒绝非法操作并记录日志。(生产环境推荐)
Permissive
(宽容模式)
(宽容模式)
只记录违规操作,不阻止(用于调试)。
Disabled
(关闭)
(关闭)
完全禁用SELinux(需重启生效)。
临时开关操作
setenforce 0
Permissive模式
setenforce 1
Enforcing模式
getenforce
sestatus
sestatus
永久开关操作
vi /etc/selinux/config
安全上下文的组成
user:role:type,文件的“数字身份证”(身份 + 角色 + 类型)
最关心的是 type字段。访问控制的核心就是检查进程的 domain是否被允许访问文件的 type
核心机制
Type/Domain 匹配规则(安全标签匹配机制)
进程的 domain必须与文件的 type匹配才能访问。
工作流程
查看进程的domain
ps auxZ|grep crond
查看运行中的crond进程的安全上下文 , 重点:进程的域是 crond_t
再查看crod执行文件、配置文件的安全上下文内容
ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d
具体步骤
• 执行触发:当系统执行类型为 crond_exec_t的文件时,会启动一个域为 crond_t的进程
• 策略匹配:SELinux 策略中预定义规则:crond_t域可以访问 system_cron_spool_t类型的文件
• 访问授权:因此 crond 进程能够读取 /etc/cron.d/、/etc/crontab等配置文件
• 策略匹配:SELinux 策略中预定义规则:crond_t域可以访问 system_cron_spool_t类型的文件
• 访问授权:因此 crond 进程能够读取 /etc/cron.d/、/etc/crontab等配置文件
临时授权
chcon
永久授权
工作原理
semanage fcontext -a- 添加永久规则到策略库
restorecon -Rv- 立即应用规则到文件系统
关键记住:文件上下文修改后必须运行 restorecon才能生效!
端口管理
添加自定义服务端口
文件管理
添加自定义目录上下文规则
查看当前配置
网络访问服务启用
删除不再需要的规则
完整示例 部署Web应用到自定义目录
故障排查
记住这个排查口诀:
• 先查日志→ ausearch/ sealert
• 再看上下文→ ls -Z
• 简单问题调布尔值→ setsebool
• 复杂问题做策略→ audit2allow
• 永远不要禁SELinux→ 用 setenforce 0临时调试
总结:系统安全的核心是 “最小权限”和 “纵深防御”。
ausearch定位事件 → sealert分析报告 → 按建议执行 semanage/restorecon/audit2allow
• 先查日志→ ausearch/ sealert
• 再看上下文→ ls -Z
• 简单问题调布尔值→ setsebool
• 复杂问题做策略→ audit2allow
• 永远不要禁SELinux→ 用 setenforce 0临时调试
总结:系统安全的核心是 “最小权限”和 “纵深防御”。
ausearch定位事件 → sealert分析报告 → 按建议执行 semanage/restorecon/audit2allow
查看日志
核心总结
端口/进程/文件上下文的关系
• 文件上下文:管控“进程能否读写文件”(最常见场景)。
• 端口上下文:管控“进程能否监听/连接端口”(网络通信场景)。
• 进程上下文(域):定义进程的“权限边界”(能做什么、不能做什么),是所有操作的“主体”。
核心原则:SELinux 策略通过“主体域-客体类型-权限”的三元组控制所有资源访问。日常运维中,文件访问是基础,但涉及网络、设备、进程交互时,必须同步考虑端口类型和进程域的匹配。
简单说:“正常情况”是本地文件访问,只看文件类型;“特殊情况”是网络/进程交互,必须看端口类型和进程域。
• 文件上下文:管控“进程能否读写文件”(最常见场景)。
• 端口上下文:管控“进程能否监听/连接端口”(网络通信场景)。
• 进程上下文(域):定义进程的“权限边界”(能做什么、不能做什么),是所有操作的“主体”。
核心原则:SELinux 策略通过“主体域-客体类型-权限”的三元组控制所有资源访问。日常运维中,文件访问是基础,但涉及网络、设备、进程交互时,必须同步考虑端口类型和进程域的匹配。
简单说:“正常情况”是本地文件访问,只看文件类型;“特殊情况”是网络/进程交互,必须看端口类型和进程域。
收藏
收藏
0 条评论
下一页
为你推荐
查看更多