活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Rocky Linux迁移之路企业级系统平滑过渡的实战经验与避坑指南

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-27 10:20:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

随着Red Hat在2020年底宣布CentOS 8将于2021年底停止维护,并转向CentOS Stream滚动更新模式,许多企业和组织开始寻找稳定的企业级Linux替代方案。Rocky Linux作为由CentOS创始人Gregory Kurtzer发起的项目,旨在成为CentOS的直接继任者,提供与RHEL(Red Hat Enterprise Linux)二进制兼容的稳定版本。

对于企业而言,操作系统迁移是一项复杂且风险较高的任务。本文将详细介绍从其他Linux发行版(特别是CentOS)迁移到Rocky Linux的完整流程,分享实战经验,并提供避坑指南,帮助企业实现系统平滑过渡。

迁移前的准备工作

系统评估与兼容性检查

在开始迁移之前,全面评估现有系统环境至关重要。这包括:

1. 硬件兼容性检查:# 检查硬件信息
lscpu
lspci
lsblk
dmidecode -t system
2. 软件清单统计:# 生成已安装软件包列表
rpm -qa > installed_packages.txt
# 查找第三方仓库
yum repolist
3. 服务依赖分析:# 检查运行中的服务
systemctl list-units --type=service --state=running
# 查看服务依赖关系
systemctl list-dependencies

硬件兼容性检查:
  1. # 检查硬件信息
  2. lscpu
  3. lspci
  4. lsblk
  5. dmidecode -t system
复制代码

软件清单统计:
  1. # 生成已安装软件包列表
  2. rpm -qa > installed_packages.txt
  3. # 查找第三方仓库
  4. yum repolist
复制代码

服务依赖分析:
  1. # 检查运行中的服务
  2. systemctl list-units --type=service --state=running
  3. # 查看服务依赖关系
  4. systemctl list-dependencies
复制代码

数据备份策略

完整的备份是迁移安全的保障:

1. 系统级备份:
“`bash使用rsync进行文件系统备份rsync -aAXHv / –exclude=/dev/* –exclude=/proc/* –exclude=/sys/* –exclude=/tmp/* –exclude=/run/* –exclude=/mnt/* –exclude=/media/* /backup/location/

系统级备份:
“`bash

rsync -aAXHv / –exclude=/dev/* –exclude=/proc/* –exclude=/sys/* –exclude=/tmp/* –exclude=/run/* –exclude=/mnt/* –exclude=/media/* /backup/location/

# 使用tar进行压缩备份
   tar -czpvf backup.tar.gz –exclude=/dev –exclude=/proc –exclude=/sys –exclude=/tmp –exclude=/run –exclude=/mnt –exclude=/media /
  1. 2. **配置文件备份**:
  2.    ```bash
  3.    # 备份重要配置目录
  4.    cp -r /etc /backup/
  5.    cp -r /var/spool/cron /backup/
  6.    cp -r /home /backup/
复制代码

1. 数据库备份:
“`bashMySQL/MariaDB备份mysqldump –all-databases –single-transaction –routines –events > mysql_backup.sql

数据库备份:
“`bash

mysqldump –all-databases –single-transaction –routines –events > mysql_backup.sql

# PostgreSQL备份
   pg_dumpall > pg_backup.sql
  1. ### 环境准备与测试计划
  2. 1. **搭建测试环境**:
  3.    - 使用虚拟机或物理机创建与生产环境相似的测试环境
  4.    - 确保有足够的硬件资源进行完整测试
  5. 2. **制定测试计划**:
  6.    - 功能测试:验证所有关键应用和服务正常运行
  7.    - 性能测试:比较迁移前后的系统性能
  8.    - 安全测试:确保系统安全性没有降低
  9.    - 灾难恢复测试:验证备份和恢复流程
  10. ### 团队培训与知识准备
  11. 1. **Rocky Linux特性培训**:
  12.    - Rocky Linux与CentOS的异同
  13.    - Rocky Linux的包管理机制
  14.    - Rocky Linux的系统管理工具
  15. 2. **迁移技术培训**:
  16.    - 迁移工具使用方法
  17.    - 常见问题排查技巧
  18.    - 回滚流程演练
  19. ## 迁移策略与方案选择
  20. ### 就地迁移 vs 全新安装
  21. #### 就地迁移
  22. **优点**:
  23. - 保留现有配置和数据
  24. - 迁移时间相对较短
  25. - 减少硬件投资
  26. **缺点**:
  27. - 风险较高,可能导致系统不稳定
  28. - 可能遗留旧系统的问题
  29. - 难以彻底解决配置冲突
  30. **适用场景**:
  31. - 系统复杂,难以重新配置
  32. - 停机时间窗口有限
  33. - 硬件资源受限
  34. #### 全新安装
  35. **优点**:
  36. - 系统干净,无历史遗留问题
  37. - 可以优化系统配置
  38. - 更容易实现标准化
  39. **缺点**:
  40. - 需要重新配置所有服务
  41. - 迁移时间长,停机时间长
  42. - 需要更多的测试和验证
  43. **适用场景**:
  44. - 有足够的停机时间
  45. - 系统相对简单
  46. - 追求系统最佳性能和稳定性
  47. ### 分阶段迁移 vs 一次性迁移
  48. #### 分阶段迁移
  49. 分阶段迁移是指将系统按功能模块或业务单元逐步迁移:
  50. 1. **迁移策略**:
  51.    - 按业务重要性从低到高迁移
  52.    - 按系统复杂度从简单到复杂迁移
  53.    - 按服务依赖关系从底层到上层迁移
  54. 2. **实施步骤**:
  55.    ```bash
  56.    # 示例:分阶段迁移Web服务器
  57.    # 第一阶段:迁移开发环境
  58.    # 1. 搭建新的Rocky Linux开发服务器
  59.    # 2. 迁移开发代码和配置
  60.    # 3. 测试开发环境功能
  61.    
  62.    # 第二阶段:迁移测试环境
  63.    # 1. 搭建新的Rocky Linux测试服务器
  64.    # 2. 迁移测试代码和配置
  65.    # 3. 执行全面测试
  66.    
  67.    # 第三阶段:迁移生产环境
  68.    # 1. 在低峰期搭建生产环境
  69.    # 2. 迁移生产数据和配置
  70.    # 3. 切换流量并监控
复制代码

一次性迁移是指在预定时间内完成整个系统的迁移:

1. 迁移策略:选择业务低峰期进行准备详细的回滚计划提前通知所有相关方
2. 选择业务低峰期进行
3. 准备详细的回滚计划
4. 提前通知所有相关方
5. 实施步骤:
“`bash示例:一次性迁移计划1. 停止所有服务systemctl stop httpd nginx mysql postfix

迁移策略:

• 选择业务低峰期进行
• 准备详细的回滚计划
• 提前通知所有相关方

实施步骤:
“`bash

systemctl stop httpd nginx mysql postfix

# 2. 备份数据
   mysqldump –all-databases > final_backup.sql
   tar -czf final_config_backup.tar.gz /etc /home /var/spool

# 3. 执行系统迁移
   # 使用迁移脚本或手动安装Rocky Linux

# 4. 恢复配置和数据
   # 恢复配置文件
   tar -xzf final_config_backup.tar.gz -C /
   # 恢复数据库
   mysql < final_backup.sql

# 5. 启动服务并验证
   systemctl start httpd nginx mysql postfix
  1. ### 不同业务场景的迁移方案选择
  2. #### Web服务器迁移
  3. 1. **评估内容**:
  4.    - Web服务器软件(Apache/Nginx等)版本兼容性
  5.    - PHP/Python/Java等运行环境兼容性
  6.    - Web应用依赖的库和模块
  7. 2. **迁移步骤**:
  8.    ```bash
  9.    # 备份网站数据和配置
  10.    cp -r /var/www/html /backup/
  11.    cp -r /etc/httpd /backup/  # Apache
  12.    cp -r /etc/nginx /backup/  # Nginx
  13.    
  14.    # 备份数据库
  15.    mysqldump -u root -p --all-databases > web_db_backup.sql
  16.    
  17.    # 在新系统上安装必要软件
  18.    yum install httpd php php-mysqlnd mariadb-server
  19.    
  20.    # 恢复网站数据
  21.    cp -r /backup/html /var/www/
  22.    cp -r /backup/httpd /etc/
  23.    
  24.    # 恢复数据库
  25.    systemctl start mariadb
  26.    mysql < web_db_backup.sql
  27.    
  28.    # 启动服务并验证
  29.    systemctl start httpd
复制代码

1. 评估内容:数据库版本兼容性(MySQL/MariaDB/PostgreSQL等)数据库大小和复杂度复制和高可用配置
2. 数据库版本兼容性(MySQL/MariaDB/PostgreSQL等)
3. 数据库大小和复杂度
4. 复制和高可用配置
5. 迁移步骤:
“`bashMySQL/MariaDB迁移1. 在原系统上备份数据mysqldump –single-transaction –routines –events –all-databases > db_backup.sql

评估内容:

• 数据库版本兼容性(MySQL/MariaDB/PostgreSQL等)
• 数据库大小和复杂度
• 复制和高可用配置

迁移步骤:
“`bash

mysqldump –single-transaction –routines –events –all-databases > db_backup.sql

# 2. 在新系统上安装数据库
   yum install mariadb-server
   systemctl start mariadb
   mysql_secure_installation

# 3. 恢复数据
   mysql < db_backup.sql

# 4. 验证数据完整性
   mysql -e “SHOW DATABASES;”
   mysql -e “SELECT COUNT(*) FROM mysql.user;”
  1. #### 应用服务器迁移
  2. 1. **评估内容**:
  3.    - 应用服务器软件(Tomcat/JBoss/WebLogic等)版本兼容性
  4.    - Java版本兼容性
  5.    - 应用依赖的第三方库
  6. 2. **迁移步骤**:
  7.    ```bash
  8.    # Tomcat应用服务器迁移
  9.    # 1. 备份应用和配置
  10.    cp -r /opt/tomcat/webapps /backup/
  11.    cp -r /opt/tomcat/conf /backup/
  12.    
  13.    # 2. 在新系统上安装Java和Tomcat
  14.    yum install java-1.8.0-openjdk tomcat
  15.    
  16.    # 3. 恢复应用和配置
  17.    cp -r /backup/webapps/* /opt/tomcat/webapps/
  18.    cp -r /backup/conf/* /opt/tomcat/conf/
  19.    
  20.    # 4. 启动服务并验证
  21.    systemctl start tomcat
  22.    curl http://localhost:8080
复制代码

实际迁移步骤详解

从CentOS 7/8迁移到Rocky Linux

Rocky Linux官方提供了迁移脚本,可以帮助从CentOS 7/8系统迁移到Rocky Linux:
  1. # 下载迁移脚本
  2. curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
  3. # 给脚本执行权限
  4. chmod +x migrate2rocky.sh
  5. # 运行迁移脚本
  6. ./migrate2rocky.sh -r
  7. # 或者使用以下命令进行预检查(不实际执行迁移)
  8. ./migrate2rocky.sh -r -v
复制代码

迁移脚本执行的主要步骤:

1. 检查系统兼容性
2. 备份当前的yum仓库配置
3. 替换为Rocky Linux的仓库配置
4. 移除CentOS特定的包
5. 安装Rocky Linux特定的包
6. 迁移内核和系统核心组件
7. 清理和优化系统

如果不使用迁移脚本,可以手动执行迁移:
  1. # 1. 更新系统到最新版本
  2. yum update -y
  3. # 2. 备份重要数据
  4. cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
  5. cp /etc/hosts /etc/hosts.bak
  6. # 3. 移除CentOS特定包
  7. yum remove -y centos-logos centos-release centos-release-cr
  8. # 4. 下载并安装Rocky Linux release包
  9. # 对于CentOS 8
  10. dnf install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm
  11. # 对于CentOS 7
  12. yum install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm
  13. # 5. 清理yum缓存
  14. yum clean all
  15. # 6. 重建yum缓存
  16. yum makecache
  17. # 7. 执行系统迁移
  18. yum distro-sync -y
  19. # 8. 安装Rocky Linux内核
  20. yum install -y kernel kernel-core
  21. # 9. 更新GRUB配置
  22. grub2-mkconfig -o /boot/grub2/grub.cfg
  23. # 10. 重启系统
  24. reboot
复制代码

从其他RHEL衍生版迁移到Rocky Linux
  1. # 下载并运行迁移脚本
  2. curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
  3. chmod +x migrate2rocky.sh
  4. ./migrate2rocky.sh -r
复制代码
  1. # 1. 备份当前的yum仓库配置
  2. cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
  3. # 2. 移除Oracle Linux特定的包
  4. yum remove -y oraclelinux-release oracle-logos
  5. # 3. 安装Rocky Linux release包
  6. yum install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm
  7. # 4. 清理并重建yum缓存
  8. yum clean all
  9. yum makecache
  10. # 5. 执行系统迁移
  11. yum distro-sync -y
  12. # 6. 重启系统
  13. reboot
复制代码
  1. # 1. 备份当前的yum仓库配置
  2. cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
  3. # 2. 移除Scientific Linux特定的包
  4. yum remove -y sl-release sl-logos
  5. # 3. 安装Rocky Linux release包
  6. yum install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm
  7. # 4. 清理并重建yum缓存
  8. yum clean all
  9. yum makecache
  10. # 5. 执行系统迁移
  11. yum distro-sync -y
  12. # 6. 重启系统
  13. reboot
复制代码

迁移过程中的关键命令与操作
  1. # 确认系统版本
  2. cat /etc/os-release
  3. # 确认内核版本
  4. uname -a
  5. # 确认已安装的软件包
  6. rpm -qa | grep -i centos
复制代码
  1. # 检查仓库配置
  2. ls /etc/yum.repos.d/
  3. # 检查可用仓库
  4. yum repolist
  5. # 测试仓库连接
  6. yum makecache
复制代码
  1. # 更新所有软件包
  2. yum update -y
  3. # 搜索软件包
  4. yum search package-name
  5. # 查看软件包信息
  6. yum info package-name
  7. # 安装软件包
  8. yum install package-name
  9. # 移除软件包
  10. yum remove package-name
复制代码
  1. # 查看服务状态
  2. systemctl status service-name
  3. # 启动服务
  4. systemctl start service-name
  5. # 停止服务
  6. systemctl stop service-name
  7. # 重启服务
  8. systemctl restart service-name
  9. # 设置服务开机自启
  10. systemctl enable service-name
复制代码

迁移脚本的编写与使用

对于大规模迁移,可以编写自定义迁移脚本:
  1. #!/bin/bash
  2. # Rocky Linux迁移脚本
  3. # 作者: [您的姓名]
  4. # 日期: [日期]
  5. # 定义变量
  6. BACKUP_DIR="/backup/migration"
  7. LOG_FILE="/var/log/migration.log"
  8. DATE=$(date +%Y%m%d%H%M%S)
  9. # 创建备份目录
  10. mkdir -p $BACKUP_DIR/$DATE
  11. # 日志函数
  12. log() {
  13.     echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
  14. }
  15. # 错误处理
  16. error_exit() {
  17.     log "ERROR: $1"
  18.     exit 1
  19. }
  20. # 备份系统
  21. backup_system() {
  22.     log "开始系统备份..."
  23.    
  24.     # 备份重要目录
  25.     cp -r /etc $BACKUP_DIR/$DATE/ || error_exit "备份/etc目录失败"
  26.     cp -r /home $BACKUP_DIR/$DATE/ || error_exit "备份/home目录失败"
  27.     cp -r /var/spool/cron $BACKUP_DIR/$DATE/ || error_exit "备份cron任务失败"
  28.    
  29.     # 备份软件包列表
  30.     rpm -qa > $BACKUP_DIR/$DATE/installed_packages.txt || error_exit "备份软件包列表失败"
  31.    
  32.     log "系统备份完成"
  33. }
  34. # 迁移系统
  35. migrate_system() {
  36.     log "开始系统迁移..."
  37.    
  38.     # 更新系统
  39.     yum update -y || error_exit "系统更新失败"
  40.    
  41.     # 备份yum仓库配置
  42.     cp -r /etc/yum.repos.d /etc/yum.repos.d.bak || error_exit "备份yum仓库配置失败"
  43.    
  44.     # 移除CentOS特定包
  45.     yum remove -y centos-logos centos-release centos-release-cr || error_exit "移除CentOS特定包失败"
  46.    
  47.     # 安装Rocky Linux release包
  48.     yum install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm || error_exit "安装Rocky Linux release包失败"
  49.    
  50.     # 清理yum缓存
  51.     yum clean all || error_exit "清理yum缓存失败"
  52.    
  53.     # 重建yum缓存
  54.     yum makecache || error_exit "重建yum缓存失败"
  55.    
  56.     # 执行系统迁移
  57.     yum distro-sync -y || error_exit "系统迁移失败"
  58.    
  59.     # 安装Rocky Linux内核
  60.     yum install -y kernel kernel-core || error_exit "安装Rocky Linux内核失败"
  61.    
  62.     # 更新GRUB配置
  63.     grub2-mkconfig -o /boot/grub2/grub.cfg || error_exit "更新GRUB配置失败"
  64.    
  65.     log "系统迁移完成,建议重启系统"
  66. }
  67. # 验证迁移
  68. verify_migration() {
  69.     log "开始验证迁移结果..."
  70.    
  71.     # 检查系统版本
  72.     if ! grep -q "Rocky Linux" /etc/os-release; then
  73.         error_exit "系统版本验证失败,未检测到Rocky Linux"
  74.     fi
  75.    
  76.     # 检查仓库配置
  77.     if ! ls /etc/yum.repos.d/ | grep -q "rocky"; then
  78.         error_exit "仓库配置验证失败,未检测到Rocky Linux仓库"
  79.     fi
  80.    
  81.     # 检查核心服务
  82.     if ! systemctl is-active sshd; then
  83.         log "警告: SSH服务未运行"
  84.     fi
  85.    
  86.     log "迁移验证完成"
  87. }
  88. # 主函数
  89. main() {
  90.     log "开始Rocky Linux迁移过程..."
  91.    
  92.     backup_system
  93.     migrate_system
  94.     verify_migration
  95.    
  96.     log "Rocky Linux迁移过程完成"
  97.     log "备份位置: $BACKUP_DIR/$DATE"
  98.     log "日志文件: $LOG_FILE"
  99. }
  100. # 执行主函数
  101. main
复制代码

使用此脚本:
  1. # 保存脚本为migrate_to_rocky.sh
  2. chmod +x migrate_to_rocky.sh
  3. ./migrate_to_rocky.sh
复制代码

迁移后的验证与优化

系统功能验证
  1. # 检查系统版本
  2. cat /etc/os-release
  3. # 预期输出应包含"Rocky Linux"
  4. # 检查内核版本
  5. uname -a
  6. # 检查系统资源
  7. free -h
  8. df -h
  9. lscpu
  10. # 检查网络连接
  11. ping -c 4 8.8.8.8
  12. # 检查DNS解析
  13. nslookup google.com
  14. # 检查系统时间
  15. timedatectl
复制代码
  1. # 检查关键服务状态
  2. systemctl status sshd
  3. systemctl status network
  4. systemctl status firewalld
  5. # 检查运行中的服务
  6. systemctl list-units --type=service --state=running
  7. # 检查服务启动日志
  8. journalctl -u service-name -n 50
复制代码
  1. # Web服务器验证
  2. curl http://localhost
  3. # 数据库连接验证
  4. mysql -u root -p -e "SHOW DATABASES;"
  5. # 应用特定功能验证
  6. # 根据实际应用编写测试脚本
复制代码

性能测试与调优
  1. # 安装性能测试工具
  2. yum install -y sysbench epel-release
  3. yum install -y stress
  4. # CPU性能测试
  5. sysbench cpu --cpu-max-prime=20000 run
  6. # 内存性能测试
  7. sysbench memory --memory-block-size=1K --memory-total-size=10G run
  8. # 磁盘I/O性能测试
  9. sysbench fileio --file-total-size=1G --file-test-mode=rndrw prepare
  10. sysbench fileio --file-total-size=1G --file-test-mode=rndrw run
  11. sysbench fileio --file-total-size=1G --file-test-mode=rndrw cleanup
复制代码
  1. # 内核参数调优
  2. # 编辑/etc/sysctl.conf文件
  3. cat >> /etc/sysctl.conf << EOF
  4. # 增加文件描述符限制
  5. fs.file-max = 100000
  6. # 优化网络参数
  7. net.core.rmem_max = 16777216
  8. net.core.wmem_max = 16777216
  9. net.ipv4.tcp_rmem = 4096 87380 16777216
  10. net.ipv4.tcp_wmem = 4096 65536 16777216
  11. EOF
  12. # 应用内核参数
  13. sysctl -p
  14. # 磁盘I/O调度器调优
  15. # 查看当前调度器
  16. cat /sys/block/sda/queue/scheduler
  17. # 设置调度器为deadline
  18. echo deadline > /sys/block/sda/queue/scheduler
  19. # 永久设置(添加到/etc/rc.local)
  20. echo 'echo deadline > /sys/block/sda/queue/scheduler' >> /etc/rc.local
  21. chmod +x /etc/rc.local
复制代码
  1. # Apache/Nginx调优
  2. # 编辑Apache配置文件/etc/httpd/conf/httpd.conf
  3. # 调整MaxClients、ServerLimit等参数
  4. # 编辑Nginx配置文件/etc/nginx/nginx.conf
  5. # 调整worker_processes、worker_connections等参数
  6. # 数据库调优
  7. # 编辑MySQL/MariaDB配置文件/etc/my.cnf
  8. # 调整innodb_buffer_pool_size、max_connections等参数
复制代码

安全性检查与加固
  1. # 安装安全扫描工具
  2. yum install -y lynis rkhunter
  3. # 运行Lynis安全扫描
  4. lynis audit system
  5. # 运行Rootkit Hunter
  6. rkhunter --checkall
复制代码
  1. # 更新系统
  2. yum update -y
  3. # 配置防火墙
  4. firewall-cmd --permanent --add-service=ssh
  5. firewall-cmd --permanent --remove-service=telnet
  6. firewall-cmd --reload
  7. # 禁用不必要的服务
  8. systemctl disable telnet.socket
  9. systemctl disable rsh.socket
  10. # 配置SSH安全
  11. sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
  12. sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
  13. systemctl restart sshd
  14. # 安装和配置fail2ban
  15. yum install -y fail2ban
  16. cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  17. systemctl enable fail2ban
  18. systemctl start fail2ban
复制代码
  1. # 安装审计工具
  2. yum install -y audit
  3. # 配置审计规则
  4. cat >> /etc/audit/rules.d/audit.rules << EOF
  5. # 监控文件访问
  6. -w /etc/passwd -p wa -k identity
  7. -w /etc/shadow -p wa -k identity
  8. -w /etc/group -p wa -k identity
  9. # 监控权限变更
  10. -a always,exit -F arch=b64 -S chmod -F auid>=1000 -F auid!=-1 -k perm_mod
  11. -a always,exit -F arch=b64 -S chown -F auid>=1000 -F auid!=-1 -k perm_mod
  12. # 监控登录尝试
  13. -w /var/log/faillog -p wa -k logins
  14. -w /var/log/lastlog -p wa -k logins
  15. EOF
  16. # 重启审计服务
  17. systemctl restart auditd
复制代码

监控与日志系统配置
  1. # 安装监控工具
  2. yum install -y htop iotop iftop
  3. # 安装Zabbix监控代理
  4. rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
  5. yum install -y zabbix-agent
  6. # 配置Zabbix代理
  7. sed -i 's/Server=127.0.0.1/Server=zabbix-server-ip/' /etc/zabbix/zabbix_agentd.conf
  8. sed -i 's/ServerActive=127.0.0.1/ServerActive=zabbix-server-ip/' /etc/zabbix/zabbix_agentd.conf
  9. # 启动Zabbix代理
  10. systemctl enable zabbix-agent
  11. systemctl start zabbix-agent
复制代码
  1. # 安装ELK日志系统组件
  2. yum install -y java-1.8.0-openjdk
  3. # 安装Elasticsearch
  4. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  5. cat > /etc/yum.repos.d/elasticsearch.repo << EOF
  6. [elasticsearch-7.x]
  7. name=Elasticsearch repository for 7.x packages
  8. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  9. gpgcheck=1
  10. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  11. enabled=1
  12. autorefresh=1
  13. type=rpm-md
  14. EOF
  15. yum install -y elasticsearch
  16. # 安装Logstash
  17. cat > /etc/yum.repos.d/logstash.repo << EOF
  18. [logstash-7.x]
  19. name=Elastic repository for 7.x packages
  20. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  21. gpgcheck=1
  22. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  23. enabled=1
  24. autorefresh=1
  25. type=rpm-md
  26. EOF
  27. yum install -y logstash
  28. # 安装Kibana
  29. cat > /etc/yum.repos.d/kibana.repo << EOF
  30. [kibana-7.x]
  31. name=Kibana repository for 7.x packages
  32. baseurl=https://artifacts.elastic.co/packages/7.x/yum
  33. gpgcheck=1
  34. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  35. enabled=1
  36. autorefresh=1
  37. type=rpm-md
  38. EOF
  39. yum install -y kibana
  40. # 配置并启动服务
  41. systemctl enable elasticsearch logstash kibana
  42. systemctl start elasticsearch logstash kibana
复制代码
  1. # 配置日志轮转
  2. cat > /etc/logrotate.d/custom-app << EOF
  3. /var/log/custom-app/*.log {
  4.     daily
  5.     missingok
  6.     rotate 52
  7.     compress
  8.     delaycompress
  9.     notifempty
  10.     create 644 root root
  11.     postrotate
  12.         /usr/bin/systemctl reload custom-app.service > /dev/null 2>&1 || true
  13.     endscript
  14. }
  15. EOF
  16. # 测试日志轮转
  17. logrotate -f /etc/logrotate.d/custom-app
复制代码

常见问题与解决方案(避坑指南)

依赖包冲突解决
  1. # 错误信息示例
  2. Error: Transaction check error:
  3.   file /usr/lib64/libssl.so.1.1.0 from install of openssl-libs-1:1.1.1g-15.el8_3.x86_64 conflicts with file from package openssl-libs-1:1.1.1k-1.el8.x86_64
复制代码

解决方案:
  1. # 1. 清理缓存
  2. yum clean all
  3. rm -rf /var/cache/yum/*
  4. # 2. 重建RPM数据库
  5. rpm --rebuilddb
  6. # 3. 更新系统
  7. yum update -y
  8. # 4. 如果仍有冲突,尝试手动解决
  9. # 查找冲突的包
  10. rpm -q --whatprovides /usr/lib64/libssl.so.1.1.0
  11. # 移除冲突的包
  12. yum remove openssl-libs-1:1.1.1k-1.el8.x86_64
  13. # 重新安装正确的包
  14. yum install openssl-libs
  15. # 5. 继续迁移过程
  16. yum distro-sync -y
复制代码

解决方案:
  1. # 1. 识别不兼容的包
  2. yum list installed | grep -v @rocky
  3. # 2. 查找Rocky Linux中的替代包
  4. yum search alternative-package-name
  5. # 3. 如果没有替代包,考虑以下选项:
  6. # a) 保留原包,但隔离运行
  7. yum install yum-plugin-versionlock
  8. yum versionlock incompatible-package
  9. # b) 使用容器或虚拟机运行
  10. yum install -y docker
  11. systemctl start docker
  12. docker pull centos:7
  13. docker run -it --name legacy-app centos:7 /bin/bash
  14. # c) 编译源代码安装
  15. yum groupinstall "Development Tools"
  16. wget source-code-url
  17. tar -xzf source-code.tar.gz
  18. cd source-code-directory
  19. ./configure
  20. make
  21. make install
复制代码

配置文件兼容性问题

解决方案:
  1. # 1. 备份当前配置
  2. cp /etc/service.conf /etc/service.conf.bak
  3. # 2. 比较新旧配置文件差异
  4. diff /etc/service.conf /etc/service.conf.rpmnew
  5. # 3. 合并配置
  6. # 使用vimdiff可视化合并
  7. vimdiff /etc/service.conf /etc/service.conf.rpmnew
  8. # 或使用meld(需要安装)
  9. yum install meld
  10. meld /etc/service.conf /etc/service.conf.rpmnew
  11. # 4. 重新加载配置
  12. systemctl reload service-name
复制代码

解决方案:
  1. # 1. 检查网络配置文件
  2. ls /etc/sysconfig/network-scripts/ifcfg-*
  3. # 2. 查看当前网络状态
  4. nmcli connection show
  5. ip addr show
  6. # 3. 重新配置网络
  7. # 使用nmcli(推荐)
  8. nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
  9. nmcli connection modify eth0 ipv4.gateway 192.168.1.1
  10. nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
  11. nmcli connection up eth0
  12. # 或直接编辑配置文件
  13. cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
  14. TYPE=Ethernet
  15. BOOTPROTO=static
  16. DEFROUTE=yes
  17. PEERDNS=yes
  18. PEERROUTES=yes
  19. IPV4_FAILURE_FATAL=no
  20. IPV6INIT=yes
  21. IPV6_AUTOCONF=yes
  22. IPV6_DEFROUTE=yes
  23. IPV6_PEERDNS=yes
  24. IPV6_PEERROUTES=yes
  25. IPV6_FAILURE_FATAL=no
  26. NAME=eth0
  27. UUID=$(uuidgen)
  28. DEVICE=eth0
  29. ONBOOT=yes
  30. IPADDR=192.168.1.100
  31. PREFIX=24
  32. GATEWAY=192.168.1.1
  33. DNS1=8.8.8.8
  34. DNS2=8.8.4.4
  35. EOF
  36. # 4. 重启网络服务
  37. systemctl restart network
复制代码

内核模块与驱动问题

解决方案:
  1. # 1. 检查硬件信息
  2. lspci -nnk
  3. lsusb
  4. # 2. 查找内核模块
  5. lsmod | grep driver-name
  6. # 3. 安装开发工具和内核头文件
  7. yum groupinstall "Development Tools"
  8. yum install kernel-devel kernel-headers
  9. # 4. 重新编译安装驱动
  10. # 示例:NVIDIA驱动
  11. # 添加ELRepo仓库
  12. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  13. yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
  14. # 安装NVIDIA驱动
  15. yum install -y kmod-nvidia
  16. # 5. 加载内核模块
  17. modprobe nvidia
  18. # 6. 验证驱动
  19. nvidia-smi
复制代码

解决方案:
  1. # 1. 检查模块信息
  2. modinfo module-name
  3. # 2. 查看系统日志
  4. journalctl -k | grep module-name
  5. dmesg | grep module-name
  6. # 3. 检查依赖关系
  7. modprobe --show-depends module-name
  8. # 4. 尝试手动加载
  9. insmod /path/to/module.ko
  10. # 或
  11. modprobe module-name
  12. # 5. 如果仍失败,检查模块签名
  13. # 查看内核签名要求
  14. cat /proc/sys/kernel/module.sig_enforce
  15. # 如果需要签名,可以临时禁用签名检查(仅用于测试)
  16. echo 0 > /proc/sys/kernel/module.sig_enforce
  17. # 6. 永久解决方案:为模块生成签名
  18. # 安装工具
  19. yum install -y openssl-devel
  20. # 生成签名密钥
  21. openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom Module/"
  22. # 注册密钥
  23. mokutil --import MOK.der
  24. # 签名模块
  25. /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 MOK.priv MOK.der /path/to/module.ko
  26. # 重启系统并按照提示完成MOK注册
  27. reboot
复制代码

第三方软件兼容性问题

解决方案:
  1. # 1. 检查软件的系统要求
  2. cat /path/to/software/README | grep -i "supported.*system"
  3. # 2. 检查软件的依赖库
  4. ldd /path/to/software/binary
  5. # 3. 安装兼容库
  6. # 安装兼容性库
  7. yum install -y compat-openssl10 compat-libstdc++-33
  8. # 4. 创建软链接解决库路径问题
  9. ln -s /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10
  10. ln -s /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10
  11. # 5. 使用容器或虚拟机运行
  12. # 安装Docker
  13. yum install -y docker
  14. systemctl start docker
  15. systemctl enable docker
  16. # 拉取原始系统镜像
  17. docker pull centos:7
  18. # 运行容器
  19. docker run -it -d --name legacy-app -v /path/to/software:/software centos:7
  20. docker exec -it legacy-app /bin/bash
  21. # 在容器内安装运行环境并启动软件
复制代码

解决方案:
  1. # 1. 检查二进制文件信息
  2. file /path/to/custom/binary
  3. ldd /path/to/custom/binary
  4. # 2. 检查编译环境差异
  5. # 记录当前系统的编译工具版本
  6. gcc --version
  7. g++ --version
  8. make --version
  9. # 3. 安装匹配的编译工具
  10. # 如果需要旧版本工具链,可以安装SCL
  11. yum install -y centos-release-scl
  12. yum install -y devtoolset-7
  13. # 启用SCL环境
  14. scl enable devtoolset-7 bash
  15. # 4. 重新编译软件
  16. cd /path/to/source/code
  17. make clean
  18. ./configure
  19. make
  20. make install
  21. # 5. 如果无法重新编译,尝试解决库依赖问题
  22. # 创建符号链接
  23. ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6.0.19
  24. # 或设置LD_LIBRARY_PATH
  25. export LD_LIBRARY_PATH=/path/to/compat/libs:$LD_LIBRARY_PATH
  26. echo 'export LD_LIBRARY_PATH=/path/to/compat/libs:$LD_LIBRARY_PATH' >> ~/.bashrc
复制代码

服务启动失败排查

解决方案:
  1. # 1. 检查服务状态
  2. systemctl status service-name
  3. # 2. 查看服务日志
  4. journalctl -u service-name -n 100
  5. # 或查看特定时间段的日志
  6. journalctl -u service-name --since "2023-01-01" --until "2023-01-02"
  7. # 3. 检查配置文件语法
  8. # Apache配置检查
  9. httpd -t
  10. # Nginx配置检查
  11. nginx -t
  12. # MySQL配置检查
  13. mysqld --help --verbose
  14. # 4. 检查端口占用
  15. netstat -tulnp | grep :port-number
  16. ss -tulnp | grep :port-number
  17. # 5. 检查SELinux状态
  18. getenforce
  19. sestatus
  20. # 临时禁用SELinux(仅用于测试)
  21. setenforce 0
  22. # 如果问题解决,调整SELinux策略
  23. # 查看拒绝日志
  24. grep AVC /var/log/audit/audit.log
  25. # 生成策略模块
  26. audit2allow -M mypolicy < /var/log/audit/audit.log
  27. semodule -i mypolicy.pp
  28. # 重新启用SELinux
  29. setenforce 1
  30. # 6. 检查文件权限
  31. ls -la /path/to/service/files
  32. chown -R user:group /path/to/service/files
  33. chmod -R 755 /path/to/service/files
  34. # 7. 检查资源限制
  35. ulimit -a
  36. cat /etc/security/limits.conf
  37. # 8. 重启服务
  38. systemctl restart service-name
复制代码

解决方案:
  1. # 1. 检查MySQL/MariaDB服务状态
  2. systemctl status mariadb
  3. # 2. 查看错误日志
  4. tail -n 100 /var/log/mariadb/mariadb.log
  5. # 3. 检查数据目录权限
  6. ls -la /var/lib/mysql/
  7. chown -R mysql:mysql /var/lib/mysql/
  8. # 4. 检查磁盘空间
  9. df -h /var/lib/mysql/
  10. # 5. 检查配置文件
  11. mysqld --help --verbose | grep "Default options"
  12. # 6. 尝试安全模式启动
  13. systemctl stop mariadb
  14. mysqld_safe --skip-grant-tables &
  15. # 7. 修复数据库
  16. mysqlcheck -r --all-databases
  17. mysqlcheck -o --all-databases
  18. # 8. 重启服务
  19. systemctl restart mariadb
复制代码

案例分析

互联网企业迁移案例

某中型互联网企业,拥有约200台物理服务器和500台虚拟机,主要运行CentOS 7和CentOS 8系统。业务包括Web应用、API服务、数据库、缓存和消息队列等。由于CentOS 8即将停止维护,企业决定将所有系统迁移到Rocky Linux。

1. 分阶段迁移:第一阶段:迁移开发和测试环境(约30%的系统)第二阶段:迁移非核心生产环境(约40%的系统)第三阶段:迁移核心生产环境(约30%的系统)
2. 第一阶段:迁移开发和测试环境(约30%的系统)
3. 第二阶段:迁移非核心生产环境(约40%的系统)
4. 第三阶段:迁移核心生产环境(约30%的系统)
5. 迁移方法:对于简单系统:使用官方迁移脚本进行就地迁移对于复杂系统:采用全新安装+配置迁移的方式对于关键业务系统:采用双机并行迁移,确保业务连续性
6. 对于简单系统:使用官方迁移脚本进行就地迁移
7. 对于复杂系统:采用全新安装+配置迁移的方式
8. 对于关键业务系统:采用双机并行迁移,确保业务连续性

分阶段迁移:

• 第一阶段:迁移开发和测试环境(约30%的系统)
• 第二阶段:迁移非核心生产环境(约40%的系统)
• 第三阶段:迁移核心生产环境(约30%的系统)

迁移方法:

• 对于简单系统:使用官方迁移脚本进行就地迁移
• 对于复杂系统:采用全新安装+配置迁移的方式
• 对于关键业务系统:采用双机并行迁移,确保业务连续性

1. 准备阶段:
“`bash1. 系统评估编写系统评估脚本cat > system_assessment.sh << ‘EOF’
#!/bin/bash

准备阶段:
“`bash

cat > system_assessment.sh << ‘EOF’
#!/bin/bash

OUTPUT_FILE=“systemassessment\((date +%Y%m%d).csv"
   echo "Hostname,OS Version,Kernel Version,CPU Cores,Memory (GB),Disk (GB),Services" > \)OUTPUT_FILE

for host in $(cat host_list.txt); do
  1. ssh $host "
  2.        hostnamectl | grep 'Operating System' | awk -F: '{print \$2}' | tr -d ' ' > /tmp/os_version
  3.        uname -r > /tmp/kernel_version
  4.        lscpu | grep 'CPU(s)' | head -1 | awk '{print \$2}' > /tmp/cpu_cores
  5.        free -g | grep '^Mem:' | awk '{print \$2}' > /tmp_memory
  6.        df -h --total | grep 'total' | awk '{print \$2}' > /tmp/disk_size
  7.        systemctl list-units --type=service --state=running | wc -l > /tmp/services
  8.        echo "$(hostname),$(cat /tmp/os_version),$(cat /tmp/kernel_version),$(cat /tmp/cpu_cores),$(cat /tmp/memory),$(cat /tmp/disk_size),$(cat /tmp/services)"
  9.    " >> $OUTPUT_FILE
复制代码

done

echo “Assessment completed. Results saved to $OUTPUT_FILE”
   EOF

chmod +x system_assessment.sh
   ./system_assessment.sh
  1. 2. **测试阶段**:
  2.    ```bash
  3.    # 1. 创建测试环境
  4.    # 使用Ansible批量部署测试服务器
  5.    cat > test_setup.yml << 'EOF'
  6.    ---
  7.    - name: Setup Rocky Linux test environment
  8.      hosts: test_servers
  9.      become: yes
  10.      tasks:
  11.        - name: Install Rocky Linux
  12.          command: >
  13.            rocky-install --hostname={{ inventory_hostname }}
  14.            --root-password=secret
  15.            --network-device=eth0
  16.            --ip-address={{ ip_address }}
  17.            --netmask=255.255.255.0
  18.            --gateway={{ gateway }}
  19.            --dns={{ dns_server }}
  20.          args:
  21.            creates: /etc/rocky-release
  22.    
  23.        - name: Update system
  24.          yum:
  25.            name: "*"
  26.            state: latest
  27.    
  28.        - name: Install common packages
  29.          yum:
  30.            name:
  31.              - vim
  32.              - htop
  33.              - net-tools
  34.              - git
  35.            state: present
  36.    
  37.        - name: Copy application files
  38.          copy:
  39.            src: /path/to/app/
  40.            dest: /opt/app/
  41.            owner: appuser
  42.            group: appgroup
  43.            mode: '0755'
  44.    
  45.        - name: Start services
  46.          systemd:
  47.            name: "{{ item }}"
  48.            state: started
  49.            enabled: yes
  50.          loop:
  51.            - httpd
  52.            - mariadb
  53.            - php-fpm
  54.    EOF
  55.    
  56.    ansible-playbook test_setup.yml
复制代码

1. 迁移阶段:
“`bash1. 批量迁移脚本cat > batch_migrate.sh << ‘EOF’
#!/bin/bash

迁移阶段:
“`bash

cat > batch_migrate.sh << ‘EOF’
#!/bin/bash

# 读取主机列表
   HOST_LIST=$1

if [ -z “$HOST_LIST” ]; then
  1. echo "Usage: $0 <host_list_file>"
  2.    exit 1
复制代码

fi

# 创建日志目录
   LOG_DIR=“migrationlogs\((date +%Y%m%d%H%M%S)"
   mkdir -p \)LOG_DIR

# 迁移函数
   migrate_host() {
  1. local host=$1
  2.    local log_file="$LOG_DIR/${host}.log"
  3.    echo "Starting migration for $host at $(date)" | tee -a $log_file
  4.    # 预检查
  5.    ssh $host "
  6.        echo '=== Pre-migration check ==='
  7.        uname -a
  8.        cat /etc/os-release
  9.        df -h
  10.        free -h
  11.    " >> $log_file 2>&1
  12.    # 创建备份
  13.    ssh $host "
  14.        echo '=== Creating backup ==='
  15.        mkdir -p /backup/pre_migration
  16.        cp -r /etc /backup/pre_migration/
  17.        rpm -qa > /backup/pre_migration/installed_packages.txt
  18.    " >> $log_file 2>&1
  19.    # 执行迁移
  20.    ssh $host "
  21.        echo '=== Starting migration ==='
  22.        curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
  23.        chmod +x migrate2rocky.sh
  24.        ./migrate2rocky.sh -r -v
  25.    " >> $log_file 2>&1
  26.    # 验证迁移
  27.    ssh $host "
  28.        echo '=== Verifying migration ==='
  29.        cat /etc/os-release
  30.        uname -a
  31.        yum repolist
  32.    " >> $log_file 2>&1
  33.    echo "Migration for $host completed at $(date)" | tee -a $log_file
复制代码

}

# 并行迁移
   MAX_PARALLEL=5
   CURRENT=0

for host in\((cat \)HOST_LIST); do
  1. migrate_host $host &
  2.    CURRENT=$((CURRENT + 1))
  3.    if [ $CURRENT -ge $MAX_PARALLEL ]; then
  4.        wait
  5.        CURRENT=0
  6.    fi
复制代码

done

wait
   echo “All migrations completed. Logs available in $LOG_DIR”
   EOF

chmod +x batch_migrate.sh
   ./batch_migrate.sh production_hosts.txt
  1. #### 结果与经验
  2. 1. **迁移结果**:
  3.    - 成功迁移98%的系统
  4.    - 迁移后系统性能稳定,无明显性能下降
  5.    - 所有关键业务服务正常运行
  6. 2. **经验总结**:
  7.    - **提前测试至关重要**:在正式迁移前,对各种类型的系统进行了充分测试,发现了多个兼容性问题
  8.    - **备份是安全的保障**:完整的系统备份确保了在出现问题时能够快速回滚
  9.    - **分阶段迁移降低风险**:通过分阶段迁移,能够逐步积累经验,降低全面迁移的风险
  10.    - **自动化工具提高效率**:使用Ansible等自动化工具大大提高了迁移效率
  11. 3. **遇到的问题及解决方案**:
  12.    - **问题**:某些自定义编译的应用在迁移后无法运行
  13.      - **解决方案**:重新编译应用或创建符号链接解决库依赖问题
  14.    - **问题**:部分系统的网络配置在迁移后丢失
  15.      - **解决方案**:提前备份网络配置,迁移后手动恢复
  16.    - **问题**:某些服务启动顺序问题导致服务依赖失败
  17.      - **解决方案**:调整服务启动顺序或设置服务依赖关系
  18. ### 金融行业迁移案例
  19. #### 背景介绍
  20. 某大型金融机构,拥有严格的安全和合规要求,运行约1000台服务器,主要操作系统为CentOS 7。由于CentOS 7将于2024年停止维护,机构决定将系统迁移到Rocky Linux,同时确保数据安全和业务连续性。
  21. #### 迁移策略
  22. 1. **合规性评估**:
  23.    - 评估Rocky Linux是否符合金融行业监管要求
  24.    - 制定详细的迁移计划和风险评估报告
  25.    - 获得监管机构批准
  26. 2. **迁移方案**:
  27.    - 采用全新安装+数据迁移的方式,确保系统纯净性
  28.    - 每个系统迁移前进行完整数据备份和验证
  29.    - 迁移后进行严格的安全检查和合规验证
  30. #### 实施过程
  31. 1. **准备阶段**:
  32.    ```bash
  33.    # 1. 合规性评估脚本
  34.    cat > compliance_check.sh << 'EOF'
  35.    #!/bin/bash
  36.    
  37.    OUTPUT_FILE="compliance_report_$(date +%Y%m%d).csv"
  38.    echo "Hostname,OS Version,Kernel Version,Security Updates,Open Ports,Services,Firewall Status,SELinux Status" > $OUTPUT_FILE
  39.    
  40.    for host in $(cat host_list.txt); do
  41.        ssh $host "
  42.            hostnamectl | grep 'Operating System' | awk -F: '{print \$2}' | tr -d ' ' > /tmp/os_version
  43.            uname -r > /tmp/kernel_version
  44.            yum check-update | grep 'Security' | wc -l > /tmp/security_updates
  45.            ss -tuln | wc -l > /tmp/open_ports
  46.            systemctl list-units --type=service --state=running | wc -l > /tmp/services
  47.            systemctl is-active firewalld > /tmp/firewall_status
  48.            getenforce > /tmp/selinux_status
  49.            
  50.            echo "$(hostname),$(cat /tmp/os_version),$(cat /tmp/kernel_version),$(cat /tmp/security_updates),$(cat /tmp/open_ports),$(cat /tmp/services),$(cat /tmp/firewall_status),$(cat /tmp/selinux_status)"
  51.        " >> $OUTPUT_FILE
  52.    done
  53.    
  54.    echo "Compliance check completed. Results saved to $OUTPUT_FILE"
  55.    EOF
  56.    
  57.    chmod +x compliance_check.sh
  58.    ./compliance_check.sh
复制代码

1. 安全加固:
“`bash1. 安全加固脚本cat > security_hardening.sh << ‘EOF’
#!/bin/bash

安全加固:
“`bash

cat > security_hardening.sh << ‘EOF’
#!/bin/bash

# 更新系统
   yum update -y

# 安装安全工具
   yum install -y firewalld fail2ban rkhunter lynis

# 配置防火墙
   systemctl enable firewalld
   systemctl start firewalld
   firewall-cmd –permanent –add-service=ssh
   firewall-cmd –permanent –remove-service=telnet
   firewall-cmd –reload

# 配置fail2ban
   cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
   sed -i ’s/bantime = 10m/bantime = 1h/’ /etc/fail2ban/jail.local
   sed -i ’s/findtime = 10m/findtime = 30m/’ /etc/fail2ban/jail.local
   sed -i ’s/maxretry = 5/maxretry = 3/’ /etc/fail2ban/jail.local
   systemctl enable fail2ban
   systemctl start fail2ban

# 配置SELinux
   setenforce 1
   sed -i ’s/SELINUX=disabled/SELINUX=enforcing/’ /etc/selinux/config

# 配置SSH安全
   sed -i ’s/#PermitRootLogin yes/PermitRootLogin no/’ /etc/ssh/sshd_config
   sed -i ’s/#PasswordAuthentication yes/PasswordAuthentication no/’ /etc/ssh/sshd_config
   sed -i ’s/#Port 22/Port 2222/’ /etc/ssh/sshd_config
   systemctl restart sshd

# 配置系统审计
   yum install -y audit
   cat >> /etc/audit/rules.d/audit.rules << ‘AUDIT_RULES’
   # 监控文件访问
   -w /etc/passwd -p wa -k identity
   -w /etc/shadow -p wa -k identity
   -w /etc/group -p wa -k identity

# 监控权限变更
   -a always,exit -F arch=b64 -S chmod -F auid>=1000 -F auid!=-1 -k perm_mod
   -a always,exit -F arch=b64 -S chown -F auid>=1000 -F auid!=-1 -k perm_mod

# 监控登录尝试
   -w /var/log/faillog -p wa -k logins
   -w /var/log/lastlog -p wa -k logins
   AUDIT_RULES

systemctl restart auditd

# 配置系统密码策略
   sed -i ’s/PASS_MIN_LEN\t5/PASS_MIN_LEN\t12/’ /etc/login.defs
   sed -i ’s/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t90/’ /etc/login.defs

# 禁用不必要的服务
   systemctl disable telnet.socket
   systemctl disable rsh.socket
   systemctl disable rexec.socket
   systemctl disable rlogin.socket

# 配置内核参数
   cat >> /etc/sysctl.conf << ‘SYSCTL_CONF’
   # IP forwarding
   net.ipv4.ip_forward = 0

# Source routing
   net.ipv4.conf.all.accept_source_route = 0
   net.ipv4.conf.default.accept_source_route = 0

# ICMP redirects
   net.ipv4.conf.all.accept_redirects = 0
   net.ipv4.conf.default.accept_redirects = 0
   net.ipv4.conf.all.secure_redirects = 0
   net.ipv4.conf.default.secure_redirects = 0

# Ignoring broadcasts request
   net.ipv4.icmp_echo_ignore_broadcasts = 1

# Bad error message protection
   net.ipv4.icmp_ignore_bogus_error_responses = 1

# Enable TCP SYN cookies
   net.ipv4.tcp_syncookies = 1

# Log martian packets
   net.ipv4.conf.all.log_martians = 1
   SYSCTL_CONF

sysctl -p

echo “Security hardening completed”
   EOF

chmod +x security_hardening.sh
   ./security_hardening.sh
  1. 3. **数据迁移**:
  2.    ```bash
  3.    # 1. 数据迁移脚本
  4.    cat > data_migration.sh << 'EOF'
  5.    #!/bin/bash
  6.    
  7.    SOURCE_HOST=$1
  8.    TARGET_HOST=$2
  9.    DATA_DIR=$3
  10.    
  11.    if [ -z "$SOURCE_HOST" ] || [ -z "$TARGET_HOST" ] || [ -z "$DATA_DIR" ]; then
  12.        echo "Usage: $0 <source_host> <target_host> <data_directory>"
  13.        exit 1
  14.    fi
  15.    
  16.    # 创建备份目录
  17.    BACKUP_DIR="/backup/migration_$(date +%Y%m%d%H%M%S)"
  18.    ssh $SOURCE_HOST "mkdir -p $BACKUP_DIR"
  19.    
  20.    # 备份数据
  21.    echo "Backing up data from $SOURCE_HOST:$DATA_DIR"
  22.    ssh $SOURCE_HOST "rsync -av $DATA_DIR $BACKUP_DIR/"
  23.    
  24.    # 验证备份
  25.    echo "Verifying backup on $SOURCE_HOST"
  26.    ssh $SOURCE_HOST "diff -rq $DATA_DIR $BACKUP_DIR/$(basename $DATA_DIR)"
  27.    
  28.    # 迁移数据
  29.    echo "Migrating data from $SOURCE_HOST to $TARGET_HOST"
  30.    ssh $SOURCE_HOST "rsync -av $BACKUP_DIR/$(basename $DATA_DIR)/ $TARGET_HOST:$DATA_DIR/"
  31.    
  32.    # 验证迁移
  33.    echo "Verifying data migration"
  34.    ssh $TARGET_HOST "ls -la $DATA_DIR"
  35.    
  36.    # 设置权限
  37.    echo "Setting permissions on $TARGET_HOST"
  38.    ssh $SOURCE_HOST "find $DATA_DIR -printf '%m %u %g %p\\n'" > /tmp/permissions.txt
  39.    ssh $TARGET_HOST "while read mode user group path; do chmod \$mode "\$path"; chown \$user:\$group "\$path"; done < /tmp/permissions.txt"
  40.    
  41.    echo "Data migration completed"
  42.    EOF
  43.    
  44.    chmod +x data_migration.sh
  45.    ./data_migration.sh source.example.com target.example.com /data/app
复制代码

1. 迁移结果:成功迁移100%的系统所有系统均通过安全审计和合规检查业务系统运行稳定,性能指标满足要求
2. 成功迁移100%的系统
3. 所有系统均通过安全审计和合规检查
4. 业务系统运行稳定,性能指标满足要求
5. 经验总结:合规性优先:在金融行业,合规性是首要考虑因素,必须在迁移前进行全面的合规评估安全加固必不可少:迁移后必须进行全面的安全加固,确保系统符合金融行业的安全标准数据完整性验证:对迁移的数据进行严格的完整性验证,确保数据不会丢失或损坏文档记录详尽:详细记录每个步骤的操作和结果,便于审计和问题追溯
6. 合规性优先:在金融行业,合规性是首要考虑因素,必须在迁移前进行全面的合规评估
7. 安全加固必不可少:迁移后必须进行全面的安全加固,确保系统符合金融行业的安全标准
8. 数据完整性验证:对迁移的数据进行严格的完整性验证,确保数据不会丢失或损坏
9. 文档记录详尽:详细记录每个步骤的操作和结果,便于审计和问题追溯
10. 遇到的问题及解决方案:问题:某些加密算法在Rocky Linux上不可用解决方案:安装兼容性库或更新应用以使用新的加密算法问题:审计日志格式发生变化,影响日志分析系统解决方案:更新日志分析系统配置,适配新的日志格式问题:某些合规检查工具在Rocky Linux上无法运行解决方案:与工具供应商合作,更新工具以支持Rocky Linux
11. 问题:某些加密算法在Rocky Linux上不可用解决方案:安装兼容性库或更新应用以使用新的加密算法
12. 解决方案:安装兼容性库或更新应用以使用新的加密算法
13. 问题:审计日志格式发生变化,影响日志分析系统解决方案:更新日志分析系统配置,适配新的日志格式
14. 解决方案:更新日志分析系统配置,适配新的日志格式
15. 问题:某些合规检查工具在Rocky Linux上无法运行解决方案:与工具供应商合作,更新工具以支持Rocky Linux
16. 解决方案:与工具供应商合作,更新工具以支持Rocky Linux

迁移结果:

• 成功迁移100%的系统
• 所有系统均通过安全审计和合规检查
• 业务系统运行稳定,性能指标满足要求

经验总结:

• 合规性优先:在金融行业,合规性是首要考虑因素,必须在迁移前进行全面的合规评估
• 安全加固必不可少:迁移后必须进行全面的安全加固,确保系统符合金融行业的安全标准
• 数据完整性验证:对迁移的数据进行严格的完整性验证,确保数据不会丢失或损坏
• 文档记录详尽:详细记录每个步骤的操作和结果,便于审计和问题追溯

遇到的问题及解决方案:

• 问题:某些加密算法在Rocky Linux上不可用解决方案:安装兼容性库或更新应用以使用新的加密算法
• 解决方案:安装兼容性库或更新应用以使用新的加密算法
• 问题:审计日志格式发生变化,影响日志分析系统解决方案:更新日志分析系统配置,适配新的日志格式
• 解决方案:更新日志分析系统配置,适配新的日志格式
• 问题:某些合规检查工具在Rocky Linux上无法运行解决方案:与工具供应商合作,更新工具以支持Rocky Linux
• 解决方案:与工具供应商合作,更新工具以支持Rocky Linux

• 解决方案:安装兼容性库或更新应用以使用新的加密算法

• 解决方案:更新日志分析系统配置,适配新的日志格式

• 解决方案:与工具供应商合作,更新工具以支持Rocky Linux

制造业系统迁移案例

某大型制造企业,拥有多个生产基地和数据中心,运行约500台服务器,包括生产控制系统、MES系统、ERP系统和办公系统等。系统主要基于CentOS 7和少量CentOS 8。企业决定将所有系统迁移到Rocky Linux,以确保系统的长期稳定性和安全性。

1. 系统分类:关键生产系统:需要零停机迁移重要业务系统:可接受短时间停机一般系统:可接受较长时间停机
2. 关键生产系统:需要零停机迁移
3. 重要业务系统:可接受短时间停机
4. 一般系统:可接受较长时间停机
5. 迁移方案:关键生产系统:采用双机并行迁移,确保业务连续性重要业务系统:采用快照迁移,减少停机时间一般系统:采用标准迁移流程
6. 关键生产系统:采用双机并行迁移,确保业务连续性
7. 重要业务系统:采用快照迁移,减少停机时间
8. 一般系统:采用标准迁移流程

系统分类:

• 关键生产系统:需要零停机迁移
• 重要业务系统:可接受短时间停机
• 一般系统:可接受较长时间停机

迁移方案:

• 关键生产系统:采用双机并行迁移,确保业务连续性
• 重要业务系统:采用快照迁移,减少停机时间
• 一般系统:采用标准迁移流程

1. 系统评估:
“`bash1. 系统分类脚本cat > system_classification.sh << ‘EOF’
#!/bin/bash

系统评估:
“`bash

cat > system_classification.sh << ‘EOF’
#!/bin/bash

CRITICAL_FILE=“critical_systems.txt”
   IMPORTANT_FILE=“important_systems.txt”
   GENERAL_FILE=“general_systems.txt”

# 清空分类文件

\(CRITICAL_FILE
\)IMPORTANT_FILE
$GENERAL_FILE

# 系统分类
   for host in $(cat all_systems.txt); do
  1. # 获取系统信息
  2.    ssh $host "
  3.        hostname
  4.        systemctl list-units --type=service --state=running | grep -E '(mes|erp|production|scada)' | wc -l
  5.        uptime | awk -F'load average:' '{print \$2}' | awk '{print \$1}' | tr -d ','
  6.        df -h / | tail -1 | awk '{print \$5}' | tr -d '%'
  7.    " | {
  8.        read hostname
  9.        read critical_services
  10.        read load_avg
  11.        read disk_usage
  12.        # 分类逻辑
  13.        if [ "$critical_services" -gt 0 ]; then
  14.            echo "$hostname" >> $CRITICAL_FILE
  15.            echo "Classified $hostname as CRITICAL (services: $critical_services, load: $load_avg, disk: $disk_usage%)"
  16.        elif [ "$(echo "$load_avg > 2.0" | bc -l)" -eq 1 ] || [ "$disk_usage" -gt 80 ]; then
  17.            echo "$hostname" >> $IMPORTANT_FILE
  18.            echo "Classified $hostname as IMPORTANT (services: $critical_services, load: $load_avg, disk: $disk_usage%)"
  19.        else
  20.            echo "$hostname" >> $GENERAL_FILE
  21.            echo "Classified $hostname as GENERAL (services: $critical_services, load: $load_avg, disk: $disk_usage%)"
  22.        fi
  23.    }
复制代码

done

echo “System classification completed:”
   echo “Critical systems:\((wc -l < \)CRITICAL_FILE)”
   echo “Important systems:\((wc -l < \)IMPORTANT_FILE)”
   echo “General systems:\((wc -l < \)GENERAL_FILE)”
   EOF

chmod +x system_classification.sh
   ./system_classification.sh
  1. 2. **关键系统迁移**:
  2.    ```bash
  3.    # 1. 关键系统迁移脚本
  4.    cat > critical_system_migration.sh << 'EOF'
  5.    #!/bin/bash
  6.    
  7.    SOURCE_HOST=$1
  8.    TARGET_HOST=$2
  9.    
  10.    if [ -z "$SOURCE_HOST" ] || [ -z "$TARGET_HOST" ]; then
  11.        echo "Usage: $0 <source_host> <target_host>"
  12.        exit 1
  13.    fi
  14.    
  15.    # 创建备份目录
  16.    BACKUP_DIR="/backup/migration_$(date +%Y%m%d%H%M%S)"
  17.    ssh $SOURCE_HOST "mkdir -p $BACKUP_DIR"
  18.    
  19.    # 备份系统配置
  20.    echo "Backing up system configuration from $SOURCE_HOST"
  21.    ssh $SOURCE_HOST "
  22.        rsync -av /etc $BACKUP_DIR/
  23.        rsync -av /home $BACKUP_DIR/
  24.        rsync -av /var/spool/cron $BACKUP_DIR/
  25.        rpm -qa > $BACKUP_DIR/installed_packages.txt
  26.    "
  27.    
  28.    # 准备目标系统
  29.    echo "Preparing target system $TARGET_HOST"
  30.    ssh $TARGET_HOST "
  31.        # 安装Rocky Linux
  32.        yum install -y https://dl.rockylinux.org/pub/rocky/8/extras/x86_64/os/Packages/r/rocky-release-8.4-1.el8.noarch.rpm
  33.        yum update -y
  34.       
  35.        # 安装必要软件
  36.        yum install -y rsync
  37.    "
  38.    
  39.    # 同步系统配置
  40.    echo "Syncing system configuration to $TARGET_HOST"
  41.    rsync -av $SOURCE_HOST:$BACKUP_DIR/etc/ $TARGET_HOST:/etc/
  42.    rsync -av $SOURCE_HOST:$BACKUP_DIR/home/ $TARGET_HOST:/home/
  43.    rsync -av $SOURCE_HOST:$BACKUP_DIR/cron/ $TARGET_HOST:/var/spool/cron/
  44.    
  45.    # 安装软件包
  46.    echo "Installing software packages on $TARGET_HOST"
  47.    ssh $SOURCE_HOST "cat $BACKUP_DIR/installed_packages.txt" | ssh $TARGET_HOST "xargs yum install -y"
  48.    
  49.    # 同步应用数据
  50.    echo "Syncing application data"
  51.    ssh $SOURCE_HOST "
  52.        # 获取需要同步的目录列表
  53.        find /data -type d -name 'app*' 2>/dev/null
  54.    " | while read app_dir; do
  55.        echo "Syncing $app_dir"
  56.        rsync -av $SOURCE_HOST:$app_dir/ $TARGET_HOST:$app_dir/
  57.    done
  58.    
  59.    # 验证迁移
  60.    echo "Verifying migration"
  61.    ssh $TARGET_HOST "
  62.        # 检查系统版本
  63.        cat /etc/os-release
  64.       
  65.        # 检查关键服务
  66.        systemctl status httpd mysql nginx
  67.       
  68.        # 检查应用状态
  69.        for app in \$(find /data -maxdepth 1 -type d -name 'app*'); do
  70.            if [ -f "\$app/status.sh" ]; then
  71.                \$app/status.sh
  72.            fi
  73.        done
  74.    "
  75.    
  76.    # 切换流量
  77.    echo "Switching traffic to $TARGET_HOST"
  78.    # 这里需要根据实际负载均衡器或DNS配置进行调整
  79.    # 例如,更新负载均衡器配置
  80.    ssh $LOAD_BALANCER "
  81.        sed -i 's/server $SOURCE_HOST/server $TARGET_HOST/g' /etc/nginx/conf.d/upstream.conf
  82.        nginx -s reload
  83.    "
  84.    
  85.    echo "Critical system migration completed"
  86.    EOF
  87.    
  88.    chmod +x critical_system_migration.sh
  89.    ./critical_system_migration.sh production01.example.com production01-rocky.example.com
复制代码

1. 一般系统迁移:
“`bash1. 一般系统批量迁移脚本cat > general_system_batch_migration.sh << ‘EOF’
#!/bin/bash

一般系统迁移:
“`bash

cat > general_system_batch_migration.sh << ‘EOF’
#!/bin/bash

SYSTEM_LIST=\(1
   MAX_PARALLEL=\){2:-5}

if [ -z “$SYSTEM_LIST” ]; then
  1. echo "Usage: $0 <system_list_file> [max_parallel]"
  2.    exit 1
复制代码

fi

# 迁移函数
   migrate_system() {
  1. local host=$1
  2.    local log_file="migration_logs/${host}.log"
  3.    mkdir -p migration_logs
  4.    echo "Starting migration for $host at $(date)" | tee $log_file
  5.    # 预检查
  6.    ssh $host "
  7.        echo '=== Pre-migration check ==='
  8.        uname -a
  9.        cat /etc/os-release
  10.        df -h
  11.        free -h
  12.    " >> $log_file 2>&1
  13.    # 创建备份
  14.    ssh $host "
  15.        echo '=== Creating backup ==='
  16.        mkdir -p /backup/pre_migration
  17.        cp -r /etc /backup/pre_migration/
  18.        cp -r /home /backup/pre_migration/
  19.        cp -r /var/spool/cron /backup/pre_migration/
  20.        rpm -qa > /backup/pre_migration/installed_packages.txt
  21.    " >> $log_file 2>&1
  22.    # 通知用户
  23.    ssh $host "
  24.        echo 'System migration will start in 10 minutes. Please save your work and log out.'
  25.        wall 'System migration will start in 10 minutes. Please save your work and log out.'
  26.        sleep 600
  27.    " >> $log_file 2>&1
  28.    # 停止服务
  29.    ssh $host "
  30.        echo '=== Stopping services ==='
  31.        systemctl stop httpd mysql nginx postfix
  32.    " >> $log_file 2>&1
  33.    # 执行迁移
  34.    ssh $host "
  35.        echo '=== Starting migration ==='
  36.        curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
  37.        chmod +x migrate2rocky.sh
  38.        ./migrate2rocky.sh -r
  39.    " >> $log_file 2>&1
  40.    # 重启系统
  41.    ssh $host "reboot" >> $log_file 2>&1
  42.    # 等待系统重启
  43.    echo "Waiting for $host to reboot..." | tee -a $log_file
  44.    sleep 120
  45.    # 验证迁移
  46.    ssh $host "
  47.        echo '=== Verifying migration ==='
  48.        cat /etc/os-release
  49.        uname -a
  50.        yum repolist
  51.        echo '=== Starting services ==='
  52.        systemctl start httpd mysql nginx postfix
  53.        systemctl status httpd mysql nginx postfix
  54.    " >> $log_file 2>&1
  55.    echo "Migration for $host completed at $(date)" | tee -a $log_file
复制代码

}

# 导出函数以便xargs使用
   export -f migrate_system

# 并行迁移
   cat\(SYSTEM_LIST | xargs -n 1 -P \)MAX_PARALLEL -I {} bash -c ‘migrate_system “{}”’

echo “All migrations completed. Logs available in migration_logs/”
   EOF

chmod +x general_system_batch_migration.sh
   ./general_system_batch_migration.sh general_systems.txt 5
  1. #### 结果与经验
  2. 1. **迁移结果**:
  3.    - 成功迁移99%的系统
  4.    - 所有关键生产系统零停机迁移完成
  5.    - 迁移后系统性能稳定,生产系统正常运行
  6. 2. **经验总结**:
  7.    - **分类迁移提高效率**:根据系统重要性和业务影响分类,采用不同的迁移策略,提高了迁移效率
  8.    - **充分准备是成功的关键**:在正式迁移前进行充分的准备和测试,确保迁移过程顺利进行
  9.    - **沟通协调不可忽视**:与业务部门和用户保持充分沟通,减少迁移对业务的影响
  10.    - **应急预案必不可少**:为每个迁移步骤制定应急预案,确保在出现问题时能够快速响应
  11. 3. **遇到的问题及解决方案**:
  12.    - **问题**:某些老旧硬件不支持Rocky Linux的最低要求
  13.      - **解决方案**:对老旧硬件进行升级或替换,确保硬件兼容性
  14.    - **问题**:部分定制化应用与Rocky Linux不兼容
  15.      - **解决方案**:与应用供应商合作,更新应用以支持Rocky Linux
  16.    - **问题**:网络配置在迁移后丢失
  17.      - **解决方案**:提前备份网络配置,并在迁移后手动恢复
  18. ## 总结与展望
  19. ### 迁移经验总结
  20. Rocky Linux作为CentOS的继任者,为企业提供了一个稳定、可靠的企业级Linux选择。通过本文的实践经验和案例分析,我们可以总结出以下几点关键经验:
  21. 1. **充分准备是成功迁移的基础**:
  22.    - 进行全面的系统评估和兼容性检查
  23.    - 制定详细的迁移计划和回滚策略
  24.    - 搭建完善的测试环境进行充分测试
  25. 2. **选择合适的迁移策略**:
  26.    - 根据系统重要性和业务需求选择迁移方法(就地迁移或全新安装)
  27.    - 根据业务连续性要求选择迁移方式(分阶段迁移或一次性迁移)
  28.    - 为不同类型的系统制定针对性的迁移方案
  29. 3. **自动化工具提高迁移效率**:
  30.    - 使用官方提供的迁移脚本简化迁移过程
  31.    - 利用Ansible等自动化工具进行批量部署和配置
  32.    - 开发自定义脚本处理特殊场景和需求
  33. 4. **数据安全是迁移的重中之重**:
  34.    - 迁移前进行完整的数据备份
  35.    - 迁移后进行数据完整性验证
  36.    - 确保备份数据的安全存储和快速恢复能力
  37. 5. **迁移后的验证与优化同样重要**:
  38.    - 进行全面的功能验证和性能测试
  39.    - 实施必要的安全加固措施
  40.    - 配置完善的监控和日志系统
  41. ### Rocky Linux未来发展展望
  42. 作为企业级Linux发行版,Rocky Linux在未来有望在以下几个方面继续发展:
  43. 1. **生态系统建设**:
  44.    - 扩大软件仓库,提供更多企业级应用
  45.    - 加强与硬件厂商的合作,提高硬件兼容性
  46.    - 建立完善的支持服务体系,提供企业级技术支持
  47. 2. **技术创新**:
  48.    - 跟进RHEL的最新技术特性,保持兼容性
  49.    - 优化系统性能,提高资源利用效率
  50.    - 增强安全功能,满足企业级安全需求
  51. 3. **社区发展**:
  52.    - 扩大开发者社区,吸引更多贡献者
  53.    - 完善文档和教程,降低使用门槛
  54.    - 举办社区活动,促进用户交流
  55. 4. **企业应用**:
  56.    - 针对不同行业提供定制化解决方案
  57.    - 与云服务提供商合作,优化云环境部署
  58.    - 加强容器和Kubernetes支持,适应云原生趋势
  59. ### 企业长期维护建议
  60. 成功迁移到Rocky Linux后,企业需要建立长期维护机制,确保系统的稳定运行和安全:
  61. 1. **建立系统更新机制**:
  62.    ```bash
  63.    # 配置自动更新(谨慎使用)
  64.    yum install -y yum-cron
  65.    systemctl enable yum-cron
  66.    systemctl start yum-cron
  67.    
  68.    # 配置更新通知
  69.    cat > /etc/cron.daily/check-updates << 'EOF'
  70.    #!/bin/bash
  71.    
  72.    # 检查可用更新
  73.    yum check-update > /tmp/available_updates
  74.    
  75.    # 如果有更新,发送通知
  76.    if [ $? -eq 100 ]; then
  77.        mail -s "System updates available for $(hostname)" admin@example.com < /tmp/available_updates
  78.    fi
  79.    EOF
  80.    
  81.    chmod +x /etc/cron.daily/check-updates
复制代码

1.
  1. 实施监控系统:
  2. “`bash安装Zabbix监控代理rpm -Uvhhttps://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpmyum install -y zabbix-agent
复制代码

实施监控系统:
“`bash

rpm -Uvhhttps://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpmyum install -y zabbix-agent

# 配置Zabbix代理
   sed -i ’s/Server=127.0.0.1/Server=zabbix-server-ip/’ /etc/zabbix/zabbix_agentd.conf
   sed -i ’s/ServerActive=127.0.0.1/ServerActive=zabbix-server-ip/’ /etc/zabbix/zabbix_agentd.conf

# 启动Zabbix代理
   systemctl enable zabbix-agent
   systemctl start zabbix-agent
  1. 3. **定期安全审计**:
  2.    ```bash
  3.    # 配置定期安全扫描
  4.    cat > /etc/cron.weekly/security-audit << 'EOF'
  5.    #!/bin/bash
  6.    
  7.    # 安装Lynis
  8.    if ! which lynis > /dev/null; then
  9.        yum install -y lynis
  10.    fi
  11.    
  12.    # 运行安全扫描
  13.    lynis audit system > /var/log/lynis-$(date +%Y%m%d).log
  14.    
  15.    # 发送报告
  16.    mail -s "Security audit report for $(hostname)" admin@example.com < /var/log/lynis-$(date +%Y%m%d).log
  17.    EOF
  18.    
  19.    chmod +x /etc/cron.weekly/security-audit
复制代码

1. 建立备份策略:
“`bash配置自动备份cat > /etc/cron.daily/system-backup << ‘EOF’
#!/bin/bash

建立备份策略:
“`bash

cat > /etc/cron.daily/system-backup << ‘EOF’
#!/bin/bash

BACKUP_DIR=”/backup/system-\((date +%Y%m%d)"
   mkdir -p \)BACKUP_DIR

# 备份系统配置
   rsync -av /etc\(BACKUP_DIR/
   rsync -av /home \)BACKUP_DIR/
   rsync -av /var/spool/cron $BACKUP_DIR/

# 备份软件包列表
   rpm -qa > $BACKUP_DIR/installed_packages.txt

# 备份数据库
   mysqldump –all-databases –single-transaction –routines –events > $BACKUP_DIR/mysql_backup.sql

# 清理旧备份(保留最近30天)
   find /backup -type d -name “system-*” -mtime +30 -exec rm -rf {} \;
   EOF

chmod +x /etc/cron.daily/system-backup
   “`

1. 文档管理:建立系统配置文档,记录所有关键配置维护变更日志,记录所有系统变更定期更新操作手册,确保操作流程的准确性
2. 建立系统配置文档,记录所有关键配置
3. 维护变更日志,记录所有系统变更
4. 定期更新操作手册,确保操作流程的准确性

• 建立系统配置文档,记录所有关键配置
• 维护变更日志,记录所有系统变更
• 定期更新操作手册,确保操作流程的准确性

通过以上措施,企业可以确保Rocky Linux系统的长期稳定运行,充分发挥其作为企业级Linux发行版的优势,为业务发展提供坚实的技术基础。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则