🧩 第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 这个网站完整上线。