1. Linux系统初始化脚本解析与实战指南
作为一名运维工程师,每次部署新服务器时最头疼的就是重复执行那些基础配置工作。今天分享一个我用了5年的CentOS系统初始化脚本,经过30+服务器验证,帮你把繁琐的初始化工作压缩到3分钟完成。
这个脚本主要解决以下痛点:
- 安全加固:关闭SELinux、优化SSH配置
- 性能调优:内核参数、文件描述符调整
- 基础环境:时间同步、常用工具安装
- 标准化配置:确保所有服务器初始状态一致
重要提示:生产环境使用前务必在测试机验证!部分配置修改后需要重启生效。
1.1 环境适配说明
脚本默认针对CentOS 7/8设计,实测兼容RHEL 7+系列。如果你用的是Ubuntu/Debian系,需要做以下调整:
- 包管理命令改为apt-get
- 配置文件路径可能不同(如ssh配置在/etc/ssh/sshd_config.d/)
- 内核参数名称可能略有差异
2. 脚本模块深度解析
2.1 安全加固配置
2.1.1 SELinux管理
bash复制sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0
这里做了两件事:
- 永久关闭SELinux(修改配置文件)
- 立即生效(setenforce命令)
争议点:很多安全规范要求开启SELinux。我的经验是:
- 对安全要求高的生产环境建议保持开启
- 测试/开发环境可以关闭避免权限问题
- 如果关闭,建议额外配置防火墙规则
2.1.2 SSH安全优化
bash复制sed -ri 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -ri 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
systemctl restart sshd
优化项说明:
- 禁用GSSAPI认证:加速SSH连接(特别是跨网络环境)
- 关闭DNS反向解析:避免连接时等待DNS查询
- 实测连接速度可提升30%-50%
2.2 系统性能调优
2.2.1 文件描述符调整
bash复制ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
EOF
sed -i 's#4096#65535#g' /etc/security/limits.d/20-nproc.conf
为什么要调整:
- 默认文件描述符限制(1024)无法满足高并发需求
- Nginx/MySQL等服务需要更大限制
- soft/hard区别:
- soft:警告阈值
- hard:绝对上限
2.2.2 内核参数优化
脚本中包含了30+个内核参数调整,这里挑几个关键参数说明:
bash复制net.ipv4.tcp_tw_reuse = 1 # 允许TIME-WAIT套接字重用
net.ipv4.tcp_fin_timeout = 30 # FIN超时时间(秒)
net.core.somaxconn = 50000 # 最大连接队列长度
vm.swappiness = 0 # 尽量不使用swap分区
参数调整依据:
- 根据服务器内存大小动态计算(如tcp_mem值)
- 参考Nginx/Tomcat等服务的官方建议
- 结合线上实际负载情况优化
2.3 基础服务配置
2.3.1 时间同步方案
bash复制yum install ntpdate -y
ntpdate time.windows.com
echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1" >>/var/spool/cron/root
更优方案建议:
- 内网搭建NTP服务器集群
- 使用chrony服务(更适合不稳定网络)
- 企业级环境建议配置多个时间源
2.3.2 必备工具安装
bash复制yum install lrzsz wget vim net-tools gcc gcc-c++ curl telnet unzip -y
工具包说明:
- 开发工具:gcc/gcc-c++(编译依赖)
- 调试工具:telnet/net-tools(网络排查)
- 效率工具:lrzsz(文件传输)、vim(编辑)
3. 生产环境使用指南
3.1 执行流程建议
- 测试环境验证:
bash复制# 先备份关键配置
mkdir /backup
cp -a /etc/ssh /etc/sysctl.conf /etc/security/limits* /backup
# 执行脚本
chmod +x initialize_system.sh
./initialize_system.sh | tee init.log
-
检查日志确认无报错
-
重启服务器使部分配置生效
3.2 自定义配置建议
建议创建config目录存放个性化配置:
code复制/opt/init_scripts/
├── config/
│ ├── sysctl.conf # 内核参数
│ └── limits.conf # 限制参数
└── initialize_system.sh
然后在脚本开头添加:
bash复制CONFIG_DIR="/opt/init_scripts/config"
[ -d "$CONFIG_DIR" ] && cp -a $CONFIG_DIR/* /etc/
3.3 企业级增强方案
- 增加配置校验功能:
bash复制validate_config() {
grep -q "SELINUX=disabled" /etc/selinux/config || echo "SELinux配置失败"
sysctl -p | grep -q "net.ipv4.tcp_tw_reuse = 1" || echo "内核参数加载失败"
}
- 添加邮件通知功能(需安装mailx):
bash复制send_report() {
echo "初始化完成于 $(date)" | mail -s "服务器初始化报告" admin@example.com
}
4. 常见问题排查
4.1 执行报错处理
问题1:yum安装失败
解决方案:
bash复制# 检查网络
ping -c 3 mirrors.aliyun.com
# 更换yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
问题2:sysctl报错
可能原因:
- 参数名称错误
- 值超出范围
检查方法:
bash复制# 单独测试某个参数
sysctl -w net.ipv4.tcp_tw_reuse=1
# 查看当前生效值
sysctl -a | grep tcp_tw_reuse
4.2 性能参数调优建议
根据服务器规格调整:
| 服务器配置 | 推荐值 |
|---|---|
| 2C4G | tcp_mem = 94500000 915000000 927000000 |
| 4C8G | tcp_mem = 188500000 1830000000 1854000000 |
| 8C16G | tcp_mem = 377000000 3660000000 3708000000 |
计算规则:
- 第一个值 = 总内存(bytes) * 10%
- 第二个值 = 总内存(bytes) * 50%
- 第三个值 = 总内存(bytes) * 50% + 10%
5. 脚本安全注意事项
- 权限控制:
bash复制# 设置脚本仅root可执行
chown root:root initialize_system.sh
chmod 700 initialize_system.sh
- 敏感操作确认:
bash复制read -p "确认要修改内核参数?(y/n)" confirm
[ "$confirm" != "y" ] && exit 1
- 操作回滚方案:
bash复制# 内核参数回滚
cp /backup/sysctl.conf /etc/
sysctl -p
# 文件描述符回滚
cp /backup/limits.conf /etc/security/
这个脚本经过多年迭代已经相当稳定,但每个企业的环境不同,建议先在小范围测试。我在实际使用中最大的教训是:永远不要在没有备份的情况下直接在生产环境运行初始化脚本。