🧩 第01章 · 全新服务器从零初始化

基础加固 + 环境 + 部署骨架

全新服务器从零初始化

拿到一台全新 Ubuntu 24.04.5 云主机(只有 root 和一个密码),第一步不是急着装软件,而是把「账号、SSH、防火墙、自动更新、目录骨架」这几件地基打好——后面所有章节(上线网站、GitLab、监控……)都踩在这块地基上。

本章目标:把一台裸机变成能用、安全、可复用的部署起点。约定主机为 192.168.1.100(示例,替换成你的公网 IP)。

1. 首次登录与基础设置

新机默认只能 root + 密码登录,先登录并看一眼系统。

# 用云控制台提供的 SSH 登录(密码方式)
ssh root@192.168.1.100
# 确认发行版与内核
cat /etc/os-release | head -3
uname -r
# 同步软件源并全量升级
apt update && apt upgrade -y

⚠️ 易错:新机默认的云镜像源可能是官方源,国内服务器建议先换成 mirrors.aliyun.com / mirrors.tuna.tsinghua.edu.cn,否则 apt 极慢甚至超时。

2. 创建一个可用的普通用户(带 sudo)

一直用 root 是坏习惯,先建一个管理员用户并配置 sudo。

# 创建用户并加进 sudo 组(把 devops 换成你的名字)
adduser devops
usermod -aG sudo devops
# 设置 sudo 免密(可选,更省心;风险自担)
echo "devops ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/devops
chmod 440 /etc/sudoers.d/devops
动作 命令 说明
建用户 adduser devops 交互式设置密码
加 sudo usermod -aG sudo devops 加入管理员组
建 sudo 文件 echo "..." > /etc/sudoers.d/devops 语法见下
# 校验 sudoers 语法,错了会锁死 sudo
visudo -c

⚠️ 易错:改 /etc/sudoers 或 /etc/sudoers.d/* 前一定先 visudo -c 验证。语法错误可能导致 sudo 全失效,只能进 rescue 模式救回。

3. SSH 改为密钥登录

新机默认允许密码登录,这是最大的暴露面之一。先在本地生成密钥,再传到服务器。

# === 在你自己的电脑(本地)执行 ===
ssh-keygen -t ed25519 -C "devops@bangdream.xyz" -f ~/.ssh/id_ed25519
# 把公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub devops@192.168.1.100

# === 在服务器上执行,确认密钥可用 ===
sudo ssh -i ~/.ssh/id_ed25519 devops@192.168.1.100

🔒 安全:ed25519 比旧的 rsa 更短更安全,优先使用。公钥上传成功后,务必在本地用密钥能登录、且确认不需要密码,再去做第 4 步禁用密码登录——否则你会把自己关在门外。

4. 禁用密码登录并加固 SSH

确认密钥登录 OK 后,修改 SSHD 配置。

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf >/dev/null <<'EOF'
# 只允许密钥登录
PasswordAuthentication no
PubkeyAuthentication yes
# 禁止 root 直接登录(改用 sudo 用户)
PermitRootLogin no
# 其它加固
Protocol 2
MaxAuthTries 3
LoginGraceTime 30
EOF
# 语法检查 + 重启 SSH(不要断开当前连接)
sudo sshd -t && sudo systemctl restart sshd
# 新开一个会话验证密钥登录;旧会话验证失败前别下线

🔒 安全:改 SSH 前先 sshd -t 语法检查。永远在另一个终端窗口保持一个已验证可用的登录会话,再 reload 服务——这是防止把自己锁在门外的基本功。

5. 配置防火墙(ufw)

只放行真正需要的端口。

# 先保护现有 SSH 会话(22 或你改过的端口)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 若本章后续要装监控/GitLab/RustDesk,先不急着开,按需加
sudo ufw enable
sudo ufw status verbose
端口 协议 用途
22 tcp SSH
80 tcp HTTP
443 tcp HTTPS
21115-21117 tcp/udp 后续 RustDesk(按需)

⚠️ 易错:ufw enable 会立即生效并可能切断当前 SSH。务必先 allow 22(或你的 SSH 端口)再 enable。云厂商还有一层安全组,服务器内 ufw 放行了,但云控制台安全组没放行,照样连不上——两层都要配。

6. 开启自动安全更新

避免长时间不登录导致漏洞长时间暴露。

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades   # 选择 yes
# 检查配置生效
sudo cat /etc/apt/apt.conf.d/20auto-upgrades
# /etc/apt/apt.conf.d/20auto-upgrades 示例
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

🔒 安全:自动更新只更新安全补丁,不会把大版本升级搞崩。生产机建议只更新 security 源,避免半夜自动升级导致服务重启。

7. 统一部署目录骨架

后面各章节都往这些目录写东西,先建好。

# 网站站点文件、应用脚本、二进制、数据、日志
sudo mkdir -p /var/www/{apps,sites,sites-available,sites-enabled} /opt/apps /usr/local/bin /srv/{data,backup}
# 打印结构确认
sudo tree /var/www -L 2 || ls -R /var/www

8. 完成清单与验证

# 验证点 命令 预期
1 版本正确 lsb_release -d Ubuntu 24.04.5
2 sudo 可用 sudo -v 无报错
3 密钥登录 新开 ssh 会话 不需要密码
4 密码登录已禁 sudo grep PasswordAuthentication /etc/ssh/sshd_config.d/* no
5 防火墙状态 sudo ufw status 22/80/443 allow
6 自动更新 sudo unattended-upgrades --dry-run 无错误
7 目录就位 ls /var/www /usr/local/bin 目录存在
# 快速汇总一条命令验证核心项
uname -r && lsb_release -d && sudo ufw status | head -5 && sudo grep -c 'PasswordAuthentication no' /etc/ssh/sshd_config.d/10-hardening.conf

到这里裸机已变身「安全、可登录、有目录骨架」的部署起点。下一章在这个基础上把 bangdream.xyz 这个网站完整上线。