面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

服务端阅读 02月17日 23:40

Docker 容器镜像仓库的选择和对比是什么?

Docker 容器镜像仓库的选择需要考虑多个因素:Docker Hub(官方仓库,镜像丰富,但有拉取限制)、GitHub Container Registry(与 GitHub 集成,适合开源项目)、GitLab Container Registry(与 GitLab CI/CD 集成)、Harbor(企业级私有仓库,支持漏洞扫描、镜像签名)、AWS ECR(AWS 云服务,与 AWS 集成)、Google GCR(Google Cloud 集成)、Azure ACR(Azure 集成)。选择建议:个人学习用 Docker Hub,企业内部用 Harbor,云原生应用用对应云厂商的仓库。注意镜像大小、拉取速度、安全扫描、访问控制等功能。
服务端阅读 02月17日 23:40

Docker 数据卷的作用和使用方法是什么?

Docker 数据卷(Volume)是用于持久化容器数据的机制,独立于容器生命周期。数据卷类型包括:bind mount(将宿主机目录挂载到容器)、volume(由 Docker 管理的存储)、tmpfs mount(存储在内存中)。使用 -v 或 --mount 参数创建数据卷。数据卷的优势包括:数据持久化、容器间共享数据、备份和迁移方便。删除容器时数据卷不会自动删除,需要使用 docker volume rm 手动删除。
服务端阅读 02月17日 23:39

Docker 镜像分层原理和优化方法有哪些?

Docker 镜像分层是 Docker 的核心特性,每个 Dockerfile 指令都会创建一个新的镜像层。分层的好处包括:构建缓存(未改变的层会被复用)、减小镜像体积(共享相同的层)、并行下载和上传。优化镜像构建的方法包括:使用多阶段构建(Multi-stage build)、合并 RUN 指令、使用 .dockerignore 排除不需要的文件、选择合适的基础镜像(如 alpine)、清理不必要的文件和缓存。
服务端阅读 02月17日 23:39

Linux 定时任务 cron 的时间格式、常用命令和最佳实践有哪些?

Linux 定时任务(cron)是自动化运维的重要工具,可以定期执行脚本和命令。cron 基本概念:cron 是 Linux 系统的定时任务调度器由 cron 守护进程(crond)负责执行定时任务配置文件:/etc/crontab(系统级)、/var/spool/cron/username(用户级)时间格式:分 时 日 月 周 命令时间格式说明:分(0-59):每小时的第几分钟时(0-23):每天的第几小时日(1-31):每月的第几天月(1-12):每年的第几个月周(0-7,0 和 7 都表示周日):每周的第几天特殊符号:*:匹配所有值,:分隔多个值,如 1,3,5 表示第 1、3、5-:表示范围,如 1-5 表示 1 到 5/n:表示间隔,如 */5 表示每 5 个单位常用示例:每分钟执行:* * * * * command每小时执行:0 * * * * command每天凌晨 2 点执行:0 2 * * * command每周一凌晨 3 点执行:0 3 * * 1 command每月 1 号凌晨 4 点执行:0 4 1 * * command每 5 分钟执行一次:*/5 * * * * command工作日(周一到周五)每天上午 9 点执行:0 9 * * 1-5 commandcrontab 命令:crontab -e:编辑当前用户的定时任务crontab -l:列出当前用户的定时任务crontab -r:删除当前用户的所有定时任务crontab -u username -e:编辑指定用户的定时任务(需要 root 权限)系统级定时任务:/etc/crontab:系统级定时任务配置文件/etc/cron.hourly/:每小时执行的任务目录/etc/cron.daily/:每天执行的任务目录/etc/cron.weekly/:每周执行的任务目录/etc/cron.monthly/:每月执行的任务目录环境变量:cron 任务执行时环境变量与用户登录时不同可以在 crontab 文件中定义环境变量建议在脚本中使用绝对路径可以在脚本开头 source 环境变量文件:source ~/.bashrc日志和调试:cron 日志位置:/var/log/syslog 或 /var/log/cron查看日志:grep CRON /var/log/syslog调试技巧:将输出重定向到日志文件:command >> /tmp/cron.log 2>&1发送邮件:cron 默认会将输出发送到用户邮箱最佳实践:使用绝对路径在脚本中设置正确的环境变量添加日志记录便于调试使用锁文件防止重复执行测试脚本后再添加到 cron合理设置执行时间,避免系统高峰期定期检查 cron 任务执行情况常见问题:脚本权限不足:确保脚本有执行权限(chmod +x script.sh)环境变量问题:在脚本中显式设置环境变量路径问题:使用绝对路径或切换到正确目录时区问题:确保系统时区正确cron 服务未启动:systemctl status cron 或 systemctl start cronanacron(异步 cron):用于不是 24 小时运行的系统配置文件:/etc/anacrontab适合笔记本电脑等不常开机的设备会检查上次执行时间,如果错过则补执行systemd 定时器:systemd 的定时任务替代方案配置文件:/etc/systemd/system/*.timer查看定时器:systemctl list-timers更灵活的调度选项更好的日志集成
服务端阅读 02月17日 23:38

Linux 磁盘管理和文件系统操作中如何进行分区、格式化、挂载和管理磁盘空间?

Linux 磁盘管理和文件系统是系统管理员的核心技能,涉及磁盘分区、格式化、挂载和维护等操作。磁盘分区:fdisk:传统的磁盘分区工具查看分区:fdisk -l进入交互模式:fdisk /dev/sdb常用命令:n(新建分区)、p(打印分区表)、d(删除分区)、w(保存并退出)、q(不保存退出)parted:现代磁盘分区工具,支持 GPT 分区表查看分区:parted -l进入交互模式:parted /dev/sdb创建分区:mkpart primary ext4 1MiB 100%设置分区表:mklabel gptlsblk:列出块设备信息blkid:查看块设备 UUID 和文件系统类型文件系统:常见文件系统类型:ext4、xfs、btrfs、ntfs、vfatmkfs:创建文件系统,如 mkfs.ext4 /dev/sdb1、mkfs.xfs /dev/sdb1mkfs.ext4:创建 ext4 文件系统mkfs.xfs:创建 xfs 文件系统磁盘挂载:mount:挂载文件系统,如 mount /dev/sdb1 /mnt/dataumount:卸载文件系统,如 umount /mnt/data查看挂载点:mount、df -h/etc/fstab:自动挂载配置文件格式:设备 挂载点 文件系统类型 挂载选项 dump fsck示例:/dev/sdb1 /mnt/data ext4 defaults 0 2使用 UUID:UUID=xxx /mnt/data ext4 defaults 0 2(推荐)查看设备 UUID:blkid /dev/sdb1磁盘空间管理:df:查看磁盘空间使用情况,df -h(人类可读格式)du:查看目录或文件大小,du -sh directory(显示目录总大小)du -h --max-depth=1 /:查看根目录下各目录的大小清理磁盘空间:清理包缓存:apt clean(Debian/Ubuntu)、yum clean all(CentOS/RHEL)清理旧日志:logrotate查找大文件:find / -type f -size +100MLVM(逻辑卷管理):pvcreate:创建物理卷,如 pvcreate /dev/sdb1vgcreate:创建卷组,如 vgcreate vgname /dev/sdb1lvcreate:创建逻辑卷,如 lvcreate -L 10G -n lvname vgnamelvextend:扩展逻辑卷,如 lvextend -L +5G /dev/vgname/lvnamelvreduce:缩减逻辑卷,如 lvreduce -L -5G /dev/vgname/lvnameresize2fs:调整 ext4 文件系统大小,如 resize2fs /dev/vgname/lvnamexfs_growfs:扩展 xfs 文件系统pvdisplay、vgdisplay、lvdisplay:查看物理卷、卷组、逻辑卷信息RAID(磁盘阵列):mdadm:管理软件 RAID创建 RAID 0:mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1创建 RAID 1:mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1创建 RAID 5:mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1查看 RAID 状态:cat /proc/mdstat、mdadm --detail /dev/md0磁盘性能优化:使用 SSD:提高 I/O 性能调整 I/O 调度器:echo deadline > /sys/block/sda/queue/scheduler增加文件系统块大小:mkfs.ext4 -b 4096 /dev/sdb1使用 noatime 挂载选项:减少磁盘写入启用文件系统日志:提高数据安全性磁盘故障排查:查看磁盘健康:smartctl -a /dev/sda(需要安装 smartmontools)查看磁盘 I/O:iostat -x 1查看磁盘错误:dmesg | grep -i error修复文件系统:fsck /dev/sdb1(需要先卸载)
服务端阅读 02月17日 23:38

Dockerfile 中 CMD 和 ENTRYPOINT 的区别是什么?

Dockerfile 的 CMD 和 ENTRYPOINT 都用于指定容器启动时执行的命令,但行为不同。CMD 可以被 docker run 命令行参数覆盖,而 ENTRYPOINT 不会被覆盖,docker run 的参数会作为 ENTRYPOINT 的参数。CMD 有三种形式:CMD ["executable","param1","param2"](exec 形式)、CMD command param1 param2(shell 形式)、CMD ["param1","param2"](作为 ENTRYPOINT 的参数)。ENTRYPOINT 也有 exec 和 shell 两种形式。最佳实践是使用 ENTRYPOINT 定义可执行文件,用 CMD 定义默认参数。
服务端阅读 02月17日 23:38

Docker 容器与虚拟机混合部署的方案是什么?

Docker 容器与虚拟机的混合部署可以结合两者的优势。部署场景:1)使用容器运行无状态应用,使用虚拟机运行有状态应用(如数据库);2)使用容器运行微服务,使用虚拟机运行传统单体应用;3)使用容器进行快速迭代,使用虚拟机运行稳定的核心业务。网络互通:通过桥接网络、overlay 网络或 host 网络实现容器和虚拟机通信。存储共享:使用共享存储(NFS、Ceph)或数据卷挂载。管理工具:使用 Kubernetes 管理容器,使用虚拟化管理平台(如 vSphere)管理虚拟机。注意事项:资源分配、网络配置、安全策略统一。
服务端阅读 02月17日 23:38

Linux Shell 脚本编程中如何定义变量、编写条件判断和循环语句?

Linux Shell 脚本编程是自动化运维和系统管理的重要技能。变量定义和使用:变量定义:name="value"(注意等号两边不能有空格)变量引用:$name 或 ${name}只读变量:readonly name删除变量:unset name环境变量:export name="value"特殊变量:$0(脚本名)、$1-$9(位置参数)、$#(参数个数)、$*(所有参数)、$@(所有参数)、$?(上一条命令退出状态)、$$(当前进程 PID)、$!(后台进程 PID)条件判断:if 语句:if [ condition ]; then commands; fi文件测试:-f(文件存在)、-d(目录存在)、-e(存在)、-r(可读)、-w(可写)、-x(可执行)字符串比较:=(等于)、!=(不等于)、-z(空字符串)、-n(非空字符串)数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于)逻辑运算:-a(与)、-o(或)、!(非)循环结构:for 循环:for i in {1..10}; do commands; done 或 for ((i=0; i<10; i++)); do commands; donewhile 循环:while [ condition ]; do commands; doneuntil 循环:until [ condition ]; do commands; done函数定义:函数定义:functionname() { commands; } 或 function functionname { commands; }函数调用:function_name arg1 arg2返回值:return value(0-255)局部变量:local var="value"常用命令:echo:输出文本,echo -n 不换行,echo -e 解析转义字符printf:格式化输出read:读取用户输入,read -p "prompt" vartest:条件测试,[ ] 是 test 的同义词expr:表达式求值let:算术运算awk:文本处理工具sed:流编辑器grep:文本搜索数组操作:定义数组:arr=(item1 item2 item3)访问元素:${arr[0]}、${arr[@]}(所有元素)、${#arr[@]}(元素个数)添加元素:arr+=("new_item")最佳实践:使用 set -e 遇到错误立即退出使用 set -u 使用未定义变量时报错使用 set -o pipefail 管道中任何命令失败都返回失败添加注释说明脚本用途使用引号保护变量
服务端阅读 02月17日 23:37

Linux 包管理工具(APT、YUM、PACMAN)的使用方法和常见操作有哪些?

Linux 包管理是系统维护和软件安装的核心技能,不同的发行版使用不同的包管理工具。Debian/Ubuntu 包管理(APT):apt update:更新软件包列表apt upgrade:升级已安装的软件包apt full-upgrade:升级软件包(可能删除依赖包)apt install package:安装软件包apt remove package:删除软件包(保留配置文件)apt purge package:删除软件包及其配置文件apt autoremove:删除不再需要的依赖包apt search keyword:搜索软件包apt show package:显示软件包详细信息apt list --installed:列出已安装的软件包apt-cache depends package:查看软件包依赖关系apt-cache rdepends package:查看依赖该软件包的其他包dpkg -l:列出已安装的软件包dpkg -i package.deb:安装 .deb 文件dpkg -r package:删除软件包dpkg -P package:删除软件包及其配置文件CentOS/RHEL 包管理(YUM/DNF):yum update:更新软件包列表和已安装的软件包yum install package:安装软件包yum remove package:删除软件包yum search keyword:搜索软件包yum info package:显示软件包详细信息yum list installed:列出已安装的软件包yum provides command:查找提供某个命令的软件包yum check-update:检查可更新的软件包yum clean all:清理缓存yum deplist package:查看软件包依赖关系rpm -qa:列出所有已安装的软件包rpm -ivh package.rpm:安装 .rpm 文件rpm -e package:删除软件包rpm -q package:查询软件包是否已安装rpm -ql package:列出软件包安装的文件rpm -qf file:查找文件属于哪个软件包Arch Linux 包管理(PACMAN):pacman -Syu:同步软件包数据库并升级系统pacman -S package:安装软件包pacman -R package:删除软件包pacman -Rs package:删除软件包及其依赖pacman -Rns package:删除软件包、依赖和配置文件pacman -Ss keyword:搜索软件包pacman -Si package:显示软件包详细信息pacman -Qe:列出显式安装的软件包pacman -Qm:列出从 AUR 安装的软件包pacman -Fy:同步文件数据库pacman -Fo command:查找提供某个命令的软件包软件源配置:Debian/Ubuntu:/etc/apt/sources.list 和 /etc/apt/sources.list.d/CentOS/RHEL:/etc/yum.repos.d/Arch Linux:/etc/pacman.conf第三方软件仓库:EPEL(Extra Packages for Enterprise Linux):为 RHEL/CentOS 提供额外软件包PPA(Personal Package Archive):Ubuntu 用户个人软件仓库AUR(Arch User Repository):Arch Linux 用户软件仓库包管理最佳实践:定期更新系统:apt update && apt upgrade 或 yum update使用版本锁定:apt-mark hold package 或 yum versionlock package清理缓存:apt autoremove && apt clean 或 yum clean all备份重要配置:在升级前备份 /etc 目录测试环境验证:在生产环境更新前先在测试环境验证使用自动化工具:Ansible、Chef、Puppet 等进行批量管理常见问题解决:依赖冲突:使用 apt -f install 或 yum --skip-broken软件包损坏:使用 dpkg --configure -a 或 yum reinstall package锁定问题:删除 /var/lib/dpkg/lock 或 /var/run/yum.pid找不到软件包:检查软件源配置,运行 apt update 或 yum makecache
服务端阅读 02月17日 23:37

Linux 文件权限系统如何工作,包括读、写、执行权限以及特殊权限(SUID、SGID、Sticky Bit)的作用是什么?

Linux 文件权限系统是 Unix-like 操作系统的核心安全机制之一。每个文件和目录都有三组权限:所有者(owner)、所属组(group)和其他用户(others)。每组权限包含读(r=4)、写(w=2)和执行(x=1)三种基本权限。权限表示方法有两种:符号表示法(如 rwxr-xr-x)和数字表示法(如 755)。符号表示法中,r 表示读权限,w 表示写权限,x 表示执行权限。数字表示法中,读权限为 4,写权限为 2,执行权限为 1,通过相加得到组合权限值。常用权限命令包括:chmod:修改文件权限,如 chmod 755 filename 或 chmod u+x filenamechown:修改文件所有者,如 chown user:group filenamechgrp:修改文件所属组,如 chgrp group filename特殊权限包括:SUID(Set User ID):当执行设置了 SUID 的程序时,程序会以文件所有者的权限运行,而不是执行者的权限SGID(Set Group ID):对于文件,执行时以文件所属组的权限运行;对于目录,新创建的文件会继承目录的所属组Sticky Bit:对于目录,只有文件所有者和 root 才能删除目录中的文件,即使其他用户有写权限理解文件权限对于系统安全至关重要,需要根据最小权限原则合理设置。
服务端阅读 02月17日 23:37

Linux 容器技术(Docker、Kubernetes)的核心概念、常用命令和最佳实践有哪些?

Linux 容器技术是现代应用部署和微服务架构的核心技术,Docker 和 Kubernetes 是最主流的容器解决方案。Docker 基本概念:镜像(Image):只读的文件系统模板,包含运行应用所需的所有依赖容器(Container):镜像的运行实例,轻量级、隔离的运行环境仓库(Repository):存储和分发镜像的地方,如 Docker HubDockerfile:用于构建镜像的文本文件Docker Compose:定义和运行多容器应用的工具Docker 常用命令:镜像管理:docker images:列出本地镜像docker pull image:拉取镜像docker build -t name .:构建镜像docker rmi image:删除镜像docker tag image newname:标记镜像容器管理:docker run:运行容器docker ps:查看运行中的容器docker ps -a:查看所有容器docker stop container:停止容器docker start container:启动容器docker restart container:重启容器docker rm container:删除容器docker exec -it container /bin/bash:进入容器容器操作:docker logs container:查看容器日志docker cp file container:/path:复制文件到容器docker cp container:/path file:从容器复制文件docker inspect container:查看容器详细信息docker stats:查看容器资源使用情况Dockerfile 指令:FROM:指定基础镜像RUN:执行命令COPY:复制文件到镜像ADD:复制文件到镜像(支持解压缩和 URL)CMD:容器启动时执行的命令ENTRYPOINT:容器启动时执行的入口点ENV:设置环境变量ARG:构建时的变量EXPOSE:声明容器监听的端口VOLUME:声明挂载点WORKDIR:设置工作目录USER:设置运行用户Docker Compose:配置文件:docker-compose.yml常用命令:docker-compose up:启动服务docker-compose down:停止并删除服务docker-compose ps:查看服务状态docker-compose logs:查看服务日志docker-compose exec service command:在服务中执行命令配置示例: version: '3' services: web: build: . ports: - "80:80" volumes: - ./data:/data environment: - ENV=valueKubernetes 基本概念:Pod:最小的部署单元,包含一个或多个容器Node:运行 Pod 的物理或虚拟机Service:为 Pod 提供稳定的网络访问Deployment:管理 Pod 的副本和更新ReplicaSet:确保指定数量的 Pod 副本在运行StatefulSet:管理有状态应用DaemonSet:在每个节点上运行一个 PodConfigMap:配置数据Secret:敏感数据Namespace:资源隔离Ingress:HTTP/HTTPS 路由Kubernetes 常用命令:集群管理:kubectl cluster-info:查看集群信息kubectl get nodes:查看节点kubectl get namespaces:查看命名空间Pod 管理:kubectl get pods:查看 Podkubectl describe pod podname:查看 Pod 详情kubectl logs podname:查看 Pod 日志kubectl exec -it podname /bin/bash:进入 Podkubectl delete pod podname:删除 PodService 管理:kubectl get services:查看服务kubectl describe service servicename:查看服务详情Deployment 管理:kubectl get deployments:查看部署kubectl apply -f yaml:应用配置kubectl rollout status deployment/deploymentname:查看部署状态kubectl scale deployment/deploymentname --replicas=3:扩展副本数Kubernetes 配置示例:Pod 配置: apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80Deployment 配置: apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80容器网络:Docker 网络模式:bridge:默认模式,容器通过 Docker 网桥通信host:容器使用主机网络栈none:无网络container:共享另一个容器的网络Kubernetes 网络模型:Pod 网络:所有 Pod 在同一个扁平网络中Service 网络:为 Pod 提供稳定的 IPIngress:外部访问入口容器存储:Docker 存储驱动:overlay2、aufs、btrfs、zfs卷(Volume):持久化存储绑定挂载(Bind Mount):将主机目录挂载到容器Kubernetes 存储类(StorageClass):动态存储分配持久卷(PersistentVolume):集群级别的存储资源持久卷声明(PersistentVolumeClaim):用户对存储的请求容器安全:镜像安全:使用官方镜像或可信镜像定期更新镜像扫描镜像漏洞最小化镜像大小运行时安全:使用非 root 用户运行容器限制容器资源使用只读文件系统限制容器能力Kubernetes 安全:RBAC:基于角色的访问控制Network Policy:网络策略Pod Security Policy:Pod 安全策略容器编排最佳实践:微服务架构:将应用拆分为多个微服务健康检查:配置 liveness 和 readiness 探针资源限制:设置 CPU 和内存限制滚动更新:逐步更新应用,避免服务中断自动扩缩容:根据负载自动调整副本数配置管理:使用 ConfigMap 和 Secret 管理配置日志收集:集中收集和分析容器日志监控告警:监控容器和集群状态
服务端阅读 02月17日 23:37

Linux 文本处理中 grep、sed、awk 命令的常用用法和正则表达式有哪些?

Linux 文本处理是系统管理和数据分析的重要技能,掌握这些工具可以大大提高工作效率。grep(文本搜索):基本用法:grep "pattern" file常用选项:-i:忽略大小写-v:反向匹配(显示不匹配的行)-n:显示行号-c:统计匹配行数-r:递归搜索目录-l:只显示包含匹配的文件名-A n:显示匹配行及其后 n 行-B n:显示匹配行及其前 n 行-C n:显示匹配行及其前后各 n 行正则表达式:grep -E "pattern1|pattern2" file(扩展正则)示例:grep -rn "error" /var/log(递归搜索日志中的错误)sed(流编辑器):基本用法:sed 'command' file常用命令:s/pattern/replacement/:替换(只替换第一个匹配)s/pattern/replacement/g:全局替换(替换所有匹配)d:删除行p:打印行n:读取下一行常用选项:-i:直接修改文件-n:抑制自动输出-e:执行多个命令示例:sed 's/old/new/g' file(全局替换)sed '/pattern/d' file(删除匹配的行)sed -i 's/foo/bar/g' file(直接修改文件)awk(文本处理工具):基本用法:awk 'pattern {action}' file内置变量:$0:整行$1, $2, …:第1、2、…个字段NF:字段总数NR:当前行号FNR:当前文件的行号FS:字段分隔符(默认空格)OFS:输出字段分隔符RS:记录分隔符(默认换行符)ORS:输出记录分隔符常用函数:print:打印printf:格式化输出length():字符串长度substr():子字符串split():分割字符串gsub():全局替换示例:awk '{print $1}' file(打印第一个字段)awk -F: '{print $1, $3}' /etc/passwd(以冒号为分隔符)awk 'NR==1,NR==10' file(打印第1-10行)awk '{sum+=$1} END {print sum}' file(计算第一列总和)cut(剪切工具):基本用法:cut [options] file常用选项:-d:指定分隔符-f:指定字段-c:指定字符位置示例:cut -d: -f1 /etc/passwd(以冒号为分隔符,提取第一个字段)cut -c1-10 file(提取每行的前10个字符)sort(排序工具):基本用法:sort [options] file常用选项:-n:按数值排序-r:倒序-k:指定排序字段-t:指定分隔符-u:去重示例:sort -n -k2 file(按第二列数值排序)sort -t: -k3 -n /etc/passwd(按第三列数值排序)uniq(去重工具):基本用法:uniq [options] file常用选项:-c:统计重复次数-d:只显示重复的行-u:只显示不重复的行示例:sort file | uniq -c(排序后统计重复次数)组合使用:统计日志中错误数量:grep "error" log | wc -l查找访问量最高的 IP:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10提取文件中的邮箱:grep -Eo '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' file
服务端阅读 02月17日 23:36

Linux 系统安全加固措施有哪些,包括用户管理、SSH 配置和防火墙设置?

Linux 系统安全是运维和开发人员必须掌握的重要知识,涉及用户管理、权限控制、防火墙配置等多个方面。用户和组管理:useradd:创建用户,如 useradd -m -s /bin/bash username(创建用户并设置家目录和 shell)userdel:删除用户,如 userdel -r username(删除用户及其家目录)usermod:修改用户属性,如 usermod -aG group username(将用户添加到组)passwd:修改用户密码,如 passwd usernamegroupadd:创建组,如 groupadd groupnamegroupdel:删除组,如 groupdel groupnamegpasswd:管理组,如 gpasswd -a username groupname(将用户添加到组)id:查看用户 ID 和组信息whoami:查看当前用户w:查看当前登录用户SSH 安全配置:配置文件:/etc/ssh/sshd_config禁用 root 登录:PermitRootLogin no禁用密码登录:PasswordAuthentication no(使用密钥认证)修改默认端口:Port 2222限制登录用户:AllowUsers user1 user2密钥认证:ssh-keygen 生成密钥对,将公钥复制到服务器的 ~/.ssh/authorized_keys使用 ssh-copy-id:ssh-copy-id user@host防火墙配置:iptables:传统防火墙工具查看规则:iptables -L -n添加规则:iptables -A INPUT -p tcp --dport 22 -j ACCEPT删除规则:iptables -D INPUT 1保存规则:iptables-save > /etc/iptables/rules.v4firewalld:动态防火墙管理查看规则:firewall-cmd --list-all开放端口:firewall-cmd --add-port=80/tcp --permanent重载配置:firewall-cmd --reloadufw:简化防火墙配置(Ubuntu)启用防火墙:ufw enable开放端口:ufw allow 22查看状态:ufw status文件权限和 SELinux:chmod:修改文件权限chown:修改文件所有者chgrp:修改文件所属组SELinux:安全增强型 Linux查看状态:getenforce临时禁用:setenforce 0永久禁用:修改 /etc/selinux/config查看上下文:ls -Z系统加固:禁用不必要的服务:systemctl disable service更新系统:apt update && apt upgrade(Debian/Ubuntu)或 yum update(CentOS/RHEL)配置自动更新:unattended-upgrades(Debian/Ubuntu)安装安全工具:fail2ban(防止暴力破解)、rkhunter(检测 rootkit)配置日志审计:auditd限制 sudo 权限:编辑 /etc/sudoers,使用 visudo 命令安全审计:查看登录日志:last、lastlog查看认证日志:/var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)查看系统日志:/var/log/messages、journalctl查看进程:ps aux、top查看网络连接:ss -tulnp、netstat -tulnp查看开放端口:nmap localhost应急响应:检查异常进程:ps aux | grep -v grep | grep -E "bash|sh|python|perl"检查异常网络连接:ss -tulnp | grep ESTABLISHED检查异常文件:find / -perm -4000 -o -perm -2000(查找 SUID/SGID 文件)检查用户登录:last、lastlog隔离受感染系统:断开网络连接备份重要数据:在清理前备份关键数据
服务端阅读 02月17日 23:36

Linux 系统性能监控有哪些常用工具,如何分析 CPU、内存、磁盘和网络的使用情况?

Linux 系统性能监控是运维工程师的重要技能,需要掌握多种工具来诊断系统瓶颈。CPU 监控:top/htop:实时查看 CPU 使用率、进程信息vmstat:报告虚拟内存统计信息,如 vmstat 1 5(每秒更新一次,共5次)mpstat:显示各个 CPU 核心的使用情况,如 mpstat -P ALL 1sar:系统活动报告,如 sar -u 1 10(每秒采集一次,共10次)内存监控:free:显示内存使用情况,free -h 以人类可读格式显示vmstat:查看内存交换、缓存等信息ps aux:查看进程的内存占用(VSZ、RSS)pmap:查看进程的内存映射磁盘监控:df:查看磁盘空间使用情况,df -h 以人类可读格式显示du:查看目录或文件的大小,du -sh directoryiostat:查看磁盘 I/O 统计信息,如 iostat -x 1iotop:实时查看磁盘 I/O 使用情况(需要 root 权限)网络监控:ifconfig/ip:查看网络接口配置netstat/ss:查看网络连接和端口监听,如 netstat -tulnp 或 ss -tulnpnethogs:按进程查看网络带宽使用tcpdump:抓包分析网络流量,如 tcpdump -i eth0 port 80日志分析:/var/log/messages:系统主日志/var/log/syslog:系统日志(Debian/Ubuntu)/var/log/dmesg:内核启动日志journalctl:systemd 日志查看工具,如 journalctl -f(实时查看)综合监控工具:dstat:集成了 vmstat、iostat、netstat 等功能glances:基于 Web 的系统监控工具prometheus + grafana:企业级监控解决方案性能优化建议:CPU:优化算法、减少不必要的计算、使用多进程/多线程内存:减少内存泄漏、优化数据结构、使用缓存磁盘:使用 SSD、优化文件系统、减少 I/O 操作网络:使用 CDN、优化 TCP 参数、减少网络请求
服务端阅读 02月17日 23:35

Linux 系统日志管理中如何查看、分析和轮转日志文件?

Linux 系统日志管理是故障排查和安全审计的重要环节,掌握日志分析技能可以快速定位问题。日志文件位置:/var/log/messages:系统主日志(CentOS/RHEL)/var/log/syslog:系统日志(Debian/Ubuntu)/var/log/auth.log:认证日志(Debian/Ubuntu)/var/log/secure:安全日志(CentOS/RHEL)/var/log/kern.log:内核日志/var/log/boot.log:系统启动日志/var/log/dmesg:内核启动消息/var/log/cron:定时任务日志/var/log/maillog:邮件日志/var/log/nginx/:Nginx 日志目录/var/log/apache2/:Apache 日志目录/var/log/mysql/:MySQL 日志目录日志查看工具:cat:查看整个文件内容less:分页查看,支持上下滚动和搜索tail:查看文件末尾,tail -f 实时查看head:查看文件开头grep:搜索特定内容zcat:查看压缩的日志文件(.gz)zgrep:搜索压缩的日志文件journalctl:systemd 日志查看工具journalctl 常用命令:journalctl:查看所有日志journalctl -f:实时查看日志journalctl -u service:查看特定服务的日志journalctl -u service -f:实时查看服务日志journalctl --since today:查看今天的日志journalctl --since "2024-01-01" --until "2024-01-02":查看指定时间段的日志journalctl -p err:查看错误级别的日志journalctl -p warning:查看警告级别的日志journalctl -b:查看当前启动的日志journalctl -b -1:查看上一次启动的日志journalctl --disk-usage:查看日志磁盘占用journalctl --vacuum-size=1G:限制日志大小为 1GB日志级别:emerg:紧急alert:警报crit:严重err:错误warning:警告notice:通知info:信息debug:调试日志轮转(logrotate):配置文件:/etc/logrotate.conf 和 /etc/logrotate.d/配置示例: /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }手动执行:logrotate -f /etc/logrotate.conf测试配置:logrotate -d /etc/logrotate.conf日志分析技巧:统计错误数量:grep -i error /var/log/syslog | wc -l查找特定时间段的日志:grep "2024-01-01" /var/log/syslog查找特定 IP 的访问:grep "192.168.1.1" /var/log/nginx/access.log统计访问量最高的 IP:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10查找失败的登录尝试:grep "Failed password" /var/log/auth.log查找系统重启记录:last reboot日志管理最佳实践:定期清理旧日志:使用 logrotate 自动轮转监控日志大小:设置告警阈值集中日志管理:使用 ELK(Elasticsearch、Logstash、Kibana)或 Graylog日志备份:定期备份重要日志日志权限:确保日志文件权限正确,防止未授权访问结构化日志:使用 JSON 格式便于解析和分析远程日志收集:rsyslog:系统日志服务,支持远程日志收集syslog-ng:功能强大的日志管理工具fluentd:统一日志收集层filebeat:轻量级日志收集器故障排查流程:确认问题发生时间查看系统主日志(/var/log/messages 或 /var/log/syslog)查看相关服务日志使用 grep 搜索错误信息分析日志上下文结合其他监控工具(top、vmstat、iostat)综合判断
服务端阅读 02月17日 23:35

Linux 系统服务管理中如何使用 systemctl 和 service 命令管理服务?

Linux 系统服务管理是运维工程师的核心技能,主要涉及 systemd 和传统的 init 系统。systemd 服务管理:systemctl start service:启动服务systemctl stop service:停止服务systemctl restart service:重启服务systemctl reload service:重新加载配置(不中断服务)systemctl status service:查看服务状态systemctl enable service:设置服务开机自启systemctl disable service:取消服务开机自启systemctl is-enabled service:检查服务是否开机自启systemctl list-units --type=service:列出所有服务systemctl list-unit-files --type=service:列出所有服务文件systemctl daemon-reload:重新加载 systemd 配置服务配置文件:位置:/etc/systemd/system/ 或 /usr/lib/systemd/system/示例:/etc/systemd/system/nginx.service服务配置文件格式:[Unit]Description=nginx serviceAfter=network.target[Service]Type=forkingExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPIDRestart=on-failure[Install]WantedBy=multi-user.target传统 init 服务管理(SysVinit):service service start:启动服务service service stop:停止服务service service restart:重启服务service service status:查看服务状态chkconfig --list:列出所有服务chkconfig service on:设置服务开机自启chkconfig service off:取消服务开机自启服务日志管理:journalctl -u service:查看特定服务的日志journalctl -u service -f:实时查看服务日志journalctl -u service --since today:查看今天的日志journalctl -u service --since "2024-01-01" --until "2024-01-02":查看指定时间段的日志journalctl -p err:查看错误级别的日志/var/log/messages:系统主日志/var/log/syslog:系统日志(Debian/Ubuntu)服务故障排查:检查服务状态:systemctl status service查看服务日志:journalctl -u service检查配置文件:cat /etc/systemd/system/service.service检查端口监听:ss -tulnp | grep service检查进程:ps aux | grep service手动启动测试:直接运行服务的可执行文件服务优化:调整启动顺序:使用 After 和 Wants 指令设置资源限制:使用 LimitCPU、LimitMEM 等指令配置自动重启:Restart=on-failure、RestartSec=10s优化启动时间:使用 Type=simple 或 Type=notify
服务端阅读 02月17日 23:35

Linux 系统监控和告警的常用工具、配置方法和最佳实践有哪些?

Linux 系统监控和告警是保障系统稳定运行的重要手段,需要掌握各种监控工具和告警机制。系统监控工具:CPU 监控:top:实时查看 CPU 使用率和进程信息htop:交互式进程查看器,功能更强大mpstat:显示各个 CPU 核心的使用情况sar:系统活动报告,可记录历史数据vmstat:报告虚拟内存统计信息内存监控:free:显示内存使用情况vmstat:查看内存交换、缓存等信息ps aux:查看进程的内存占用pmap:查看进程的内存映射磁盘监控:df:查看磁盘空间使用情况du:查看目录或文件的大小iostat:查看磁盘 I/O 统计信息iotop:实时查看磁盘 I/O 使用情况网络监控:ifconfig/ip:查看网络接口配置netstat/ss:查看网络连接和端口监听nethogs:按进程查看网络带宽使用tcpdump:抓包分析网络流量iftop:实时显示网络带宽使用进程监控:ps:查看进程状态top/htop:实时监控进程pgrep:查找进程 IDpidstat:监控进程资源使用性能分析工具:strace:跟踪系统调用和信号ltrace:跟踪库函数调用perf:性能分析工具sysdig:系统级监控和故障排查eBPF:扩展伯克利数据包过滤器日志监控:/var/log/messages:系统主日志/var/log/syslog:系统日志(Debian/Ubuntu)/var/log/auth.log:认证日志/var/log/secure:安全日志(CentOS/RHEL)journalctl:systemd 日志查看工具logrotate:日志轮转工具监控告警系统:Nagios:企业级监控系统Zabbix:分布式监控系统Prometheus:时序数据库和监控系统Grafana:数据可视化平台ELK Stack(Elasticsearch、Logstash、Kibana):日志分析和可视化Datadog:云监控平台New Relic:应用性能监控Prometheus 监控:数据采集:使用 Exporter 采集指标常用 Exporter:node_exporter:系统指标mysqld_exporter:MySQL 指标nginx_exporter:Nginx 指标redis_exporter:Redis 指标配置文件:/etc/prometheus/prometheus.yml告警规则:使用 PromQL 定义告警条件告警管理:Alertmanager 处理告警通知Grafana 可视化:数据源配置:支持 Prometheus、Elasticsearch 等仪表板:创建自定义监控面板告警:基于可视化图表设置告警模板:使用变量创建动态仪表板告警通知方式:邮件:SMTP 邮件通知短信:短信网关即时通讯:Slack、钉钉、企业微信电话:语音通知Webhook:自定义 Web 回调告警策略:告警级别:Critical、Warning、Info告警阈值:根据业务需求设置合理阈值告警抑制:避免告警风暴告警聚合:相关告警合并通知告警升级:长时间未处理自动升级自定义监控脚本:编写 Shell/Python 脚本采集指标使用 cron 定时执行输出格式:支持 Nagios、Prometheus 等格式示例: #!/bin/bash # 检查磁盘使用率 DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $DISK_USAGE -gt 80 ]; then echo "CRITICAL: Disk usage is ${DISK_USAGE}%" exit 2 fi echo "OK: Disk usage is ${DISK_USAGE}%" exit 0监控最佳实践:全面监控:覆盖 CPU、内存、磁盘、网络等关键指标合理采样:避免监控数据量过大告警分级:区分紧急和一般告警告警收敛:避免重复告警定期维护:清理过期数据,更新监控规则文档记录:维护监控配置文档测试验证:定期测试告警机制常见监控指标:系统指标:CPU 使用率、内存使用率、磁盘使用率、网络流量应用指标:请求数、响应时间、错误率、并发数业务指标:订单量、用户数、交易额故障排查流程:确认告警信息查看系统监控数据检查相关服务状态分析日志文件定位问题根因实施修复措施验证修复效果总结经验教训
服务端阅读 02月17日 23:35

Linux 系统资源限制 ulimit 的作用、配置方法和常见应用场景有哪些?

Linux 系统资源限制(ulimit)是控制进程资源使用的重要机制,可以防止进程占用过多系统资源。ulimit 基本概念:ulimit 是 shell 内置命令,用于控制 shell 进程及其子进程的资源限制限制分为软限制(soft limit)和硬限制(hard limit)软限制可以由用户调整,但不能超过硬限制硬限制只能由 root 用户提高配置文件:/etc/security/limits.conf、/etc/security/limits.d/常用 ulimit 命令:ulimit -a:显示所有当前资源限制ulimit -n:查看/设置最大打开文件数ulimit -u:查看/设置最大用户进程数ulimit -s:查看/设置栈大小ulimit -v:查看/设置最大虚拟内存ulimit -m:查看/设置最大常驻内存ulimit -c:查看/设置 core 文件大小ulimit -t:查看/设置最大 CPU 时间ulimit -f:查看/设置最大文件大小ulimit -l:查看/设置最大锁定内存ulimit -p:查看/设置管道缓冲区大小ulimit -e:查看/设置最大调度优先级ulimit -r:查看/设置最大实时优先级资源限制类型:文件描述符限制:open files:最大打开文件数(-n)max locked memory:最大锁定内存(-l)进程限制:max user processes:最大用户进程数(-u)max pending signals:最大挂起信号内存限制:max memory size:最大常驻内存(-m)virtual memory:最大虚拟内存(-v)stack size:栈大小(-s)CPU 限制:cpu time:最大 CPU 时间(-t)max nice priority:最大 nice 优先级(-e)max realtime priority:最大实时优先级(-r)其他限制:file size:最大文件大小(-f)pipe size:管道缓冲区大小(-p)core file size:core 文件大小(-c)limits.conf 配置格式:格式: domain:可以是用户、组、*(所有用户)、%组名type:soft(软限制)、hard(硬限制)、-(同时设置软硬限制)item:资源类型,如 nofile、nproc、memlock 等value:限制值,unlimited 表示无限制配置示例:# 限制所有用户的最大打开文件数* soft nofile 65535* hard nofile 65535# 限制特定用户的最大进程数username soft nproc 4096username hard nproc 8192# 限制特定组的最大内存@groupname soft memlock 1048576@groupname hard memlock 2097152# 启用 core 文件* soft core unlimited* hard core unlimited临时修改限制:在当前 shell 中修改:ulimit -n 65535仅对当前 shell 及其子进程有效退出 shell 后失效永久修改限制:编辑 /etc/security/limits.conf 文件编辑 /etc/security/limits.d/ 目录下的配置文件修改后需要重新登录才能生效对于服务进程,需要重启服务systemd 服务限制:在服务配置文件中设置限制配置项:LimitNOFILE=65535:最大打开文件数LimitNPROC=4096:最大进程数LimitMEMLOCK=infinity:最大锁定内存LimitCORE=infinity:core 文件大小示例: [Service] LimitNOFILE=65535 LimitNPROC=4096常见应用场景:Web 服务器(Nginx、Apache):增加最大打开文件数:ulimit -n 65535增加最大进程数:ulimit -u 4096数据库服务器(MySQL、PostgreSQL):增加最大打开文件数:ulimit -n 65535增加 core 文件大小:ulimit -c unlimited高并发应用:增加最大打开文件数:ulimit -n 65535增加最大进程数:ulimit -u 8192开发环境:启用 core 文件:ulimit -c unlimited增加 core 文件大小:ulimit -c unlimited查看进程限制:查看 PID 的限制:cat /proc/PID/limits查看进程打开的文件数:ls /proc/PID/fd | wc -l查看进程线程数:ps -eLf | grep PID | wc -l故障排查:"Too many open files" 错误:增加 ulimit -n"Cannot allocate memory" 错误:检查内存限制进程无法启动:检查进程数限制core 文件未生成:检查 core 文件限制最佳实践:根据应用需求设置合理的限制值不要设置过高的限制值,避免资源耗尽监控资源使用情况,及时调整限制在生产环境应用前先在测试环境验证定期检查和更新限制配置
服务端阅读 02月17日 23:35

Linux 网络配置和管理中常用的命令有哪些,如何配置网络接口、DNS 和防火墙?

Linux 网络配置和管理是系统管理员的核心技能之一。网络配置文件:/etc/network/interfaces(Debian/Ubuntu):网络接口配置文件/etc/sysconfig/network-scripts/ifcfg-*(CentOS/RHEL):网络接口配置文件/etc/resolv.conf:DNS 解析配置文件/etc/hosts:主机名到 IP 地址的映射/etc/hostname:主机名配置网络配置命令:ifconfig:配置和显示网络接口(已废弃,推荐使用 ip 命令)ip:新一代网络配置工具,如 ip addr show(显示 IP 地址)、ip link show(显示网络接口)、ip route show(显示路由表)route:显示和操作 IP 路由表,如 route -n(显示路由表)、route add default gw 192.168.1.1(添加默认网关)netstat:网络统计工具,如 netstat -tulnp(显示 TCP/UDP 监听端口)、netstat -an(显示所有连接)ss:netstat 的替代工具,性能更好,如 ss -tulnpping:测试网络连通性,如 ping -c 4 google.comtraceroute:跟踪数据包路由,如 traceroute google.comnslookup/dig:DNS 查询工具,如 dig google.comcurl/wget:下载工具,curl -I http://example.com(查看响应头)telnet:测试端口连通性,如 telnet host portnc(netcat):网络工具,如 nc -zv host port(测试端口)网络服务管理:systemctl:管理网络服务,如 systemctl restart network(重启网络服务)service:传统服务管理命令,如 service network restart防火墙配置:iptables:传统的防火墙工具,如 iptables -L(列出规则)、iptables -A INPUT -p tcp --dport 80 -j ACCEPT(添加规则)firewalld:动态防火墙管理守护进程,如 firewall-cmd --list-all(查看规则)、firewall-cmd --add-port=80/tcp(开放端口)ufw:简化防火墙配置工具(Ubuntu),如 ufw allow 80(开放端口)网络故障排查:检查网络接口:ip addr show 或 ifconfig检查路由表:ip route show 或 route -n检查 DNS:cat /etc/resolv.conf、dig domain.com检查端口监听:ss -tulnp 或 netstat -tulnp检查网络连通性:ping、traceroute抓包分析:tcpdump -i eth0 port 80查看网络统计:sar -n DEV 1网络性能优化:调整 TCP 参数:修改 /etc/sysctl.conf,如 net.ipv4.tcptwreuse=1增加连接数:net.core.somaxconn、net.ipv4.tcpmaxsyn_backlog优化网络缓冲区:net.core.rmemmax、net.core.wmemmax
服务端阅读 02月17日 23:34

Linux 虚拟化技术(KVM、Docker、Kubernetes)的特点和使用场景有哪些?

Linux 虚拟化技术是现代云计算和容器化部署的基础,掌握虚拟化技术对于系统架构和运维至关重要。虚拟化类型:全虚拟化(Full Virtualization):通过 hypervisor 模拟完整的硬件环境,客户操作系统无需修改半虚拟化(Para-virtualization):客户操作系统需要修改以配合 hypervisor操作系统级虚拟化(OS-level Virtualization):在同一个操作系统内核上运行多个隔离的用户空间实例KVM(Kernel-based Virtual Machine):Linux 内核的虚拟化模块将 Linux 内核转变为 hypervisor需要 CPU 支持硬件虚拟化(Intel VT-x 或 AMD-V)使用 QEMU 作为设备模拟器命令示例:安装 KVM:apt install qemu-kvm libvirt-daemon-system libvirt-clients检查 KVM 支持:kvm-ok 或 lsmod | grep kvm创建虚拟机:virt-install --name vm1 --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm1.qcow2,size=20 --cdrom /path/to/isoXen:开源 hypervisor支持 paravirtualization 和 full virtualizationDomain 0(Dom0):特权域,负责硬件访问和管理Domain U(DomU):非特权域,运行客户操作系统命令示例:xl create vm.cfg、xl listVMware:商业虚拟化解决方案VMware ESXi:企业级 hypervisorVMware Workstation:桌面虚拟化软件VMware vSphere:虚拟化管理平台Docker 容器:轻量级虚拟化技术共享主机内核,隔离用户空间镜像(Image):只读的文件系统模板容器(Container):镜像的运行实例常用命令:docker run:运行容器docker ps:查看运行中的容器docker images:查看镜像docker build:构建镜像docker exec:在容器中执行命令docker logs:查看容器日志docker stop/start:停止/启动容器Kubernetes(K8s):容器编排平台管理容器化应用的部署、扩展和管理核心概念:Pod:最小的部署单元Service:为 Pod 提供稳定的网络访问Deployment:管理 Pod 的副本和更新ConfigMap:配置数据Secret:敏感数据常用命令:kubectl get pods:查看 Podkubectl get services:查看服务kubectl apply -f yaml:应用配置kubectl logs pod:查看日志LXC(Linux Containers):操作系统级虚拟化共享内核,隔离进程和网络比 Docker 更接近传统虚拟机命令示例:lxc-create:创建容器lxc-start:启动容器lxc-stop:停止容器lxc-ls:列出容器libvirt:虚拟化管理 API 和工具集支持 KVM、QEMU、Xen、LXC 等多种虚拟化技术提供统一的虚拟化管理接口命令示例:virsh list:列出虚拟机virsh start vm:启动虚拟机virsh shutdown vm:关闭虚拟机virsh dumpxml vm:查看虚拟机配置虚拟化网络:Bridge(网桥):将虚拟机连接到物理网络NAT(网络地址转换):虚拟机通过主机访问外部网络Host-only:仅主机和虚拟机之间的网络VLAN:虚拟局域网虚拟化存储:镜像格式:qcow2、raw、vmdk、vdi存储池:libvirt 存储池管理共享存储:NFS、iSCSI、Ceph性能优化:CPU 亲和性:绑定虚拟机到特定 CPU 核心内存 ballooning:动态调整虚拟机内存巨页(Huge Pages):提高内存性能virtio:半虚拟化 I/O 驱动虚拟化安全:SELinux/AppArmor:强制访问控制资源限制:cgroups 限制 CPU、内存、磁盘 I/O网络隔离:VLAN、防火墙规则镜像安全:定期更新、扫描漏洞