服务器准备指令是服务器从裸机状态到可安全部署业务的完整操作序列,核心涵盖系统更新、用户权限、SSH安全加固、防火墙规则、时间同步、基础环境安装、性能调优和验证收尾八大模块,按顺序执行即可避免绝大多数初期的安全隐患和配置遗漏。
很多朋友第一次拿到服务器时,面对黑漆漆的命令行窗口都有点手足无措,这不怪你,因为服务器不像手机,开机就能用,它更像一个刚组装好的毛坯房,需要你把水电、门窗、墙皮都弄好,才能安心住进去,这套“装修”流程,就是我们要说的服务器准备指令。
服务器准备指令有哪些:先分清层级再动手
准备指令不是一条命令打天下,而是一套组合拳,业内专家指出,准备工作通常分为系统层、安全层、应用层三个纵深,理解这个层级,你才能知道每条命令在干什么,而不是机械复制粘贴。
- 系统层:解决服务器“活下来”的问题,更新软件源、升级内核、设置主机名、配置时区,这是地基,地基不稳,后面全白搭。
- 安全层:解决服务器“不被入侵”的问题,创建普通用户、禁用root远程登录、修改SSH默认端口、配置防火墙策略、部署简单的入侵防护工具,这一步决定了你的服务器能活多久。
- 应用层:解决服务器“能干活”的问题,安装Nginx或Apache、配置PHP或Python环境、安装数据库、开放对应的业务端口。
行业共识认为,这三层缺一不可,跳过安全层直接装应用,相当于不装防盗门就把金银财宝摆在客厅。
系统初始化:服务器刚到手的第一批指令
拿到服务器IP和密码后的第一步,不是装软件,而是让对方“清醒”过来。
# 更新软件源和系统(Debian/Ubuntu系) apt update && apt upgrade -y # CentOS/Rocky系用这条 yum update -y
更新系统是买服务器后第一个必做的准备指令,它不光是打补丁,更是让系统仓库的索引跟上游对齐,不然后续安装任何软件都可能报404。
接着设置主机名和时区,主机名别乱起,建议用 业务名-环境-编号 的格式,web-prod-01。
# 永久修改主机名 hostnamectl set-hostname web-prod-01 # 设置时区为上海,北京时间 timedatectl set-timezone Asia/Shanghai
检查一下时间同步,服务器时间不准,会导致日志错乱、HTTPS证书验证失败、数据库主从同步出问题。
# 开启NTP时间同步 timedatectl set-ntp true
安全加固类指令:这步省了等于裸奔
安全准备指令里,第一条铁律是不要用root直接干活,你需要创建一个拥有sudo权限的普通用户。
# 创建用户并加入sudo组 adduser deployer usermod -aG sudo deployer
接下来的指令用于让SSH更安全,修改端口、禁止root登录、只允许密钥认证,这一步需要你先把本机的公钥上传上去,否则改完配置你自己也进不去了。
# 在本机执行,将公钥复制到服务器 ssh-copy-id deployer@你的服务器IP # 编辑SSH配置文件 vim /etc/ssh/sshd_config # 修改以下关键项 Port 22522 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes
改完配置后必须重启SSH服务。
systemctl restart sshd
防火墙准备指令同样不能少,装好防火墙,先放行你新改的SSH端口,再放行业务端口。
# UFW防火墙(Ubuntu) ufw allow 22522/tcp ufw allow 80,443/tcp ufw enable # firewalld防火墙(CentOS) firewall-cmd --permanent --add-port=22522/tcp firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
服务器环境部署前要准备什么:常用软件安装指令
环境部署前的准备指令,我习惯称之为“装厨房设备”,你不需要一次性装齐所有东西,但编译工具链和基础组件是必须的,否则后面装任何东西都可能因为缺依赖而报错。
# Debian/Ubuntu基础编译套件 apt install build-essential curl wget git vim软件包(按需选择)
这里有个容易犯的错:过度安装,装一堆用不上的软件包,等于扩大了攻击面,比如你纯跑静态页面,就没必要装数据库。
如果你的业务比较复杂,涉及多版本语言环境,建议用Docker搭建环境准备环境。
# 安装Docker及编排工具 curl -fsSL https://get.docker.com | bash systemctl start docker && systemctl enable docker
环境准备阶段用到的关键指令:权限与目录规划
做服务器环境准备的时候,很多人会忽略目录权限,你在root下建的目录,Nginx或PHP-FPM根本读不了,会报403或502错误。
# 创建站点目录,并赋予正确的属主
mkdir -p /var/www/mysite
chown -R www-data:www-data /var/www/mysite # Debian系
chown -R nginx:nginx /var/www/mysite # CentOS系
# 设置合理的目录权限,目录755,文件644
find /var/www/mysite -type d -exec chmod 755 {} \;
find /var/www/mysite -type f -exec chmod 644 {} \;
日志轮转也是服务器准备指令中容易被忽略的一环,不配置日志轮转,日志文件会无限膨胀,直到把磁盘塞满。
# 安装logrotate后,在 /etc/logrotate.d/ 下创建业务配置
vim /etc/logrotate.d/nginx
# 典型配置
/var/log/nginx/.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
服务器配置与调优:用准备指令提升性能瓶颈
硬件买回来了,默认内核参数其实是为通用场景设计的,你需要做一次基础的内核参数调优,让服务器更适合跑高并发业务。
# 调整文件描述符上限,放入 /etc/security/limits.conf soft nofile 65535 hard nofile 65535 # 调整内核网络参数,放入 /etc/sysctl.conf net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_reuse = 1 # 让内核参数生效 sysctl -p
验证类指令:准备做完后的体检清单
所有准备指令执行完,别急着上线,你需要一套验证指令来确认环境真的没问题。
- 查看端口监听状态:
ss -lntup,确认22、80、443端口已经正确监听。 - 检查服务是否开机自启:
systemctl list-unit-files | grep enabled,确保Nginx和PHP-FPM不会重启后丢失。 - 测试磁盘IO性能:
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fsync,数值在100MB/s以上是机械盘的正常水平,SSD应该更高。 - 检查系统错误日志:
journalctl -xe,看看有没有明显的报错或异常。
服务器功能性检查脚本:把准备指令打包成惯例
对于经常需要批量初始化服务器的运维人员,逐条敲命令效率太低,我建议把这些准备指令写成一个初始化脚本,保存下来下次直接跑。
#!/bin/bash set -e # 仅供示例,实际使用请根据发行版调整 echo "=== 更新系统 ===" apt update && apt upgrade -y echo "=== 创建用户 ===" id deployer &>/dev/null || useradd -m -s /bin/bash deployer echo "deployer ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/deployer echo "=== 配置SSH ===" sed -i 's/#Port 22/Port 22522/' /etc/ssh/sshd_config sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config systemctl restart sshd echo "=== 配置防火墙 ===" ufw allow 22522/tcp ufw allow 80,443/tcp echo "y" | ufw enable echo "=== 基础工具 ===" apt install -y curl git vim htop echo "初始化完成。"
封装脚本的目的是减少人为失误。 手动敲命令容易打错字母或漏掉某一步,特别是安全加固相关的命令,漏掉一条就可能导致后续被入侵。
Q&A:关于服务器准备指令的常见疑问
不同云厂商的服务器准备指令有什么区别?
简米云、酷番云、华为云在购买服务器时的差异主要在控制台操作,比如安全组规则配置、密钥对绑定,登录服务器后,基础的服务器准备指令几乎完全一致,因为底层都是Linux发行版,唯一要注意的是镜像市场里一些预装环境的系统,它们可能自带了一些服务,你需要先跑 systemctl list-unit-files --type=service | grep running 看清现状再动手,避免端口冲突。
准备指令里哪些是后悔药?
大部分准备指令都是可逆的,但有一条要特别注意:禁用root登录和修改SSH端口,如果操作失误且没保留当前会话,你会被拒之门外,只能通过云厂商的控制台VNC登录进去修复,建议调整SSH配置前,先开一个备用终端连接保持在线,改完配置后不要急着断开会话,先重启服务并用新端口开新连接验证,成功后再关闭旧会话,另一条不可逆的是数据库数据目录的初始化,所以在执行 mysqld --initialize 前,务必确认目录为空且备份做好。
怎么确认准备指令真的生效了?
分两步走,第一步查看进程和服务状态,systemctl status sshd 能直接看到运行状态,ss -lntup | grep 22522 能确认端口在监听,第二步验证实际效果,在本地电脑上用新端口尝试连接 ssh -p 22522 deployer@你的服务器IP,能连上说明SSH调整成功,安全类指令建议用专业扫描工具做一次外部视角的验证,这是最接近真实攻击路径的检验方式,服务器准备指令的完整程度,直接决定你未来三个月是安稳睡觉还是半夜爬起来处理入侵告警,认真对待每一步,你的服务器会用它稳定的运行回报你。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/787262.html


