配置文件修改前必须备份并验证:用带日期的cp命令备份关键配置,diff确认改动,nginx -t/sshd -t等校验语法再重载,避免直接restart导致服务中断;变更需记录原因、影响及可执行的回滚步骤。

配置文件修改前必须做备份
直接编辑 /etc/ssh/sshd_config、/etc/nginx/nginx.conf 这类关键配置,没备份等于裸奔。一旦语法错误或参数冲突,服务可能无法重启,远程连接直接中断。
实操建议:
- 用
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%F).bak生成带日期的备份,别只叫sshd_config.bak - 对 systemd 服务配置(如
/etc/systemd/system/nginx.service.d/override.conf),也要同步备份整个.d/目录 - 修改前先执行
diff -u /etc/ssh/sshd_config{,.bak}确认当前改动范围
验证配置语法再重载,别直接 restart
systemctl restart nginx 会强制终止进程再拉起,如果新配置有语法错误,服务就卡在 failed 状态;而 nginx -t 或 sshd -t 能提前暴露问题,且不中断运行。
常见场景与差异:
-
nginx -t检查主配置和所有include文件,返回非零退出码即失败 -
sshd -t不检查密钥权限,但会报出Bad configuration option或Missing argument类错误 -
systemctl daemon-reload是重载 unit 文件的前提,但不会校验服务内部配置 - PostgreSQL 的
pg_ctl reload依赖postgresql.conf语法正确,需先运行pg_conftool check(v12+)或手动pg_ctl -D /var/lib/postgresql/data/ -C
用临时配置测试再上线
生产环境改 /etc/fstab 或 /etc/crypttab 一类影响启动的文件,一次失误可能导致系统无法 boot。不能靠“试一下”。
安全做法:
- 用
mount -o bind或systemd-run --scope mount ...测试挂载参数,避免写入/etc/fstab后重启翻车 - 对
/etc/default/grub修改,先用grubby --info=ALL | grep kernel查当前启动项,再用grubby --args="..." --update-kernel=...临时追加参数验证 - 网络配置如
/etc/netplan/*.yaml,先netplan try,它会在 2 分钟后自动回滚,比netplan apply安全得多
变更记录必须包含上下文和回滚步骤
只写“修改了 sshd_config 禁用密码登录”没用。下次排查问题的人(可能是你自己)需要知道:为什么禁?影响哪些用户?密钥是否已分发?回滚命令是什么?
建议每条记录含这三部分:
-
变更点:例如
sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config - 触发原因:例如 “等保要求禁止密码登录,已确认 root 和 deploy 用户均配置有效公钥”
-
回滚命令:例如
cp /etc/ssh/sshd_config.2024-04-10.bak /etc/ssh/sshd_config && systemctl restart sshd
最常被忽略的是:没验证回滚命令是否真能执行——比如备份文件被误删,或 systemctl restart sshd 在某些发行版上实际是 systemctl restart ssh。










