当前位置:首页>Linux>Linux服务器运维实战:拿到一台新服务器后该做的那些事

Linux服务器运维实战:拿到一台新服务器后该做的那些事

  • 2026-10-11 07:02:46
Linux服务器运维实战:拿到一台新服务器后该做的那些事

登录后的第一件事不是装软件

你花100块买了一年的云服务器,SSH连上去,密码是商家发给你的那串随机字符。

你的第一反应可能是:装Nginx、搭博客、部署代码。

停。先把下面几件事做完。这些步骤花不了半小时,但能决定你这台服务器未来是被人随便闯进来,还是固若金汤。

创建普通用户,别用root裸奔

root是超级管理员账户,在Linux里等同于"你拥有这台机器的全部权限"。一个命令敲错,整台服务器数据清零。更重要的是:如果别人拿到root密码,整台服务器就是他的了。

第一步:创建一个普通用户。

adduser admin
usermod -aG sudo admin

这条命令做了两件事:创建了一个叫admin的用户,并把它加入sudo组——sudo组的成员可以用sudo命令临时获得管理员权限。

第二步:配置SSH密钥登录,禁用密码。

在本地电脑上生成SSH密钥对:

ssh-keygen -t ed25519 -C "your_email@example.com"

把你的公钥传到服务器上:

ssh-copy-id admin@你的服务器IP

然后编辑SSH配置文件:

sudo nano /etc/ssh/sshd_config

修改以下几行:

PermitRootLogin no              # 禁止root登录
PasswordAuthentication no      # 禁止密码登录
PubkeyAuthentication yes        # 允许公钥登录
Port 2222                       # 把SSH端口从22改成其他端口

改完之后重启SSH服务:

sudo systemctl restart sshd

现在你用root密码已经登录不进去了,只能用admin用户的密钥登录,而且攻击者扫描22端口也扫不到你了——他把端口改成2222了。

这套配置做完,你的服务器在 credential stuffing 攻击面前相当于隐形了。credential stuffing是什么?黑客用从其他网站泄露的用户名密码组合,批量尝试登录所有暴露22端口的服务器——2025年平均每台暴露的服务器每天被尝试登录超过3000次。

防火墙:只打开你需要的门

服务器就像一栋大楼,每个端口是一扇门。你不需要把每扇门都开着。

ufw(Uncomplicated Firewall)是Ubuntu默认的防火墙工具,简单到不需要学iptables。

先看当前哪些端口是开的:

sudo ufw status verbose

默认全部拒绝,只允许你需要的服务:

sudo ufw allow 2222/tcp    # SSH(改成非标准端口后)
sudo ufw allow 80/tcp       # HTTP
sudo ufw allow 443/tcp      # HTTPS
sudo ufw default deny incoming
sudo ufw enable

现在你的服务器只开了四个门:SSH、HTTP、HTTPS,其他端口的流量一律丢弃。

如果你的服务需要3306端口(MySQL),永远不要直接暴露给外网——MySQL端口只允许从应用服务器的IP访问:

sudo ufw allow from 10.0.0.5 to any port 3306

永远不要让数据库的端口暴露在公网上。

装软件之前,先更新系统

新服务器第一步永远是更新系统补丁。漏洞天天有,系统越新越安全。

sudo apt update && sudo apt upgrade -y

如果买的是CentOS或Rocky Linux,用这个:

sudo dnf update -y

这一步花不了5分钟,但能补上过去几个月累积的系统漏洞。

装完更新之后,安装一个自动安全更新工具:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

它会在后台自动安装安全更新,不需要你手动操作。

装Nginx:三个坑必须避开

假设你要用这台服务器跑一个Web服务。Nginx是最常用的选择,但有三个地方新手机器必踩:

坑一:nginx -t

每次改完Nginx配置,必须先测试再重载。配置文件写错一个字,nginx会拒绝加载——有时候甚至会导致服务直接崩溃:

sudo nginx -t
sudo systemctl reload nginx

nginx -t会告诉你配置文件有没有语法错误。这个命令养成习惯,踩过nginx配置写错然后重载把服务搞挂的坑之后,你就知道这个习惯值多少钱了。

坑二:用户权限

Nginx默认用nginx用户运行。如果你的Web应用要读写某个目录,而这个目录是root所有的,Nginx没有权限:

grep "user " /etc/nginx/nginx.conf

sudo chown -R nginx:nginx /var/www/your_site

坑三:最大连接数

默认的Nginx配置允许的并发连接数有限。高流量时Nginx报502或504 Gateway Timeout,问题往往出在这里。调高worker_processes和worker_connections:

worker_processes auto;        # 自动等于CPU核心数
worker_connections 65535;    # 每个worker最大连接数

nginx nofile 65535

自动备份:数据丢了你扛得住吗

服务器跑了一个月,数据比刚买的时候值钱多了。这时候你最该问自己的问题是:如果硬盘突然坏了,我能恢复到什么程度?

如果没有备份,答案就是:什么都没了。

最基础的备份方案:用cron定时把数据打包上传到对象存储。

先安装腾讯云COS命令行工具(其他云厂商类似):

curl https://cos.cloud.tencent.com/document/cosfs/cosfs-v1.0.21-linux_x86_64.tar.gz | tar -xz

写一个备份脚本:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
DB_FILE="/backup/db_$DATE.sql"

mysqldump -u root -p'你的密码' --all-databases > $DB_FILE

tar -czf /backup/site_$DATE.tar.gz /var/www/your_site

cos-cli cp $DB_FILE cos://your-bucket/backup/
cos-cli cp /backup/site_$DATE.tar.gz cos://your-bucket/backup/

find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

把脚本加入cron,每天凌晨3点自动执行:

sudo crontab -e
0 3 * * * /bin/bash /backup/auto_backup.sh >> /var/log/backup.log 2>&1

每周凌晨3点自动备份,7天前的自动清理。如果服务器硬盘坏了,从COS下载最近的备份,在新服务器上解压,5分钟恢复服务。

没有这套备份方案的时候,硬盘挂了就是灾难。有了它,硬盘挂了就是5分钟的下载加解压。

监控:出了问题你要比用户先知道

服务器出问题了,你是希望用户告诉你,还是自己先知道?

用户告诉你:你发现问题时,可能已经持续半小时了,一堆用户在群里吐槽。

自己先知道:出了问题5分钟内收到告警,立刻处理,用户可能完全没感觉到。

基础监控用Netdata,安装只需要一行命令:

wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh

安装完访问 http://你的IP:19999,CPU、内存、磁盘、网络流量一目了然。

但Netdata是给自己看的。真正有用的监控是:收到告警。

最简单的方式是用服务器监控服务(如UptimeRobot或阿里云监控),配置URL监控和端口监控。你的服务挂了,5分钟内收到短信或邮件。

更专业一点,用Prometheus + Grafana:

sudo apt install prometheus -y
sudo apt install grafana -y
sudo systemctl enable --now prometheus grafana-server

Prometheus负责采集指标,Grafana负责展示和告警。Grafana有大量现成的仪表盘模板,导入就能用,不需要自己画。

一个真实案例:一次矿机入侵是怎么发生的

2024年,一家创业公司的CTO发现服务器CPU占用率莫名其妙跑到100%。他登录服务器查进程,发现一个叫kworkerds的进程占用全部CPU。

这不是系统进程。这是一个挖矿程序。

攻击是怎么发生的?他后来查日志发现:SSH端口是默认的22,密码是一个常见的弱密码,防火墙没有配置,开放了所有端口。

黑客用credential stuffing攻击,用一个常见弱密码成功登录了root。然后下载了一个Linux门罗币挖矿程序,命名为kworkerds伪装成系统进程。

他删掉进程、改密码、加防火墙之后,系统恢复了。但服务器的SSH密码、可能的数据泄露已经发生了。他花了三天做完整的数据审计和服务重建。

这个案例里,做好三件事就可以完全避免:创建普通用户、禁用密码登录、只开放必要端口。总耗时不超过30分钟。

最后:安全是一个过程,不是一次配置

你做完上面的所有步骤,服务器安全了吗?比刚买的时候安全多了。但不代表永远安全。

你需要建立的日常习惯:

每周。登录服务器查一遍:有没有异常IP登录?有没有不认识的进程?磁盘使用率有没有异常增长?

每月。检查一次系统更新,确保安全补丁及时安装。检查一次防火墙规则,确保没有误开端口。

每季度。换一次SSH密钥。检查一次备份是否真的能恢复(很多人做了备份,从来没验证过能不能恢复)。

每年。重审一次用户权限——有没有离职员工的账号还在?有没有临时开放的端口忘了关?

服务器安全不是一个"配置清单",做完就打勾。它是一个持续的过程。你的服务器比别人的安全,不是因为你配置得多好,而是因为你维护得多勤快。

最新文章

随机文章