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