我的运维笔记

《服务器运维》模块一 · 第 1~3 讲学习记录

第 1 讲服务器安全加固

让第一台服务器学会自我防护

这一讲做了什么

关键命令

# 查看登录失败记录
sudo journalctl -u sshd | grep -i "failed" | tail -30

# 新建普通用户并加入 wheel 组
sudo adduser liuhao
sudo usermod -aG wheel liuhao

# 生成密钥对(在自己电脑上,私钥绝不外传)
ssh-keygen -t ed25519 -C "liuhao-服务器加固"

# 安装公钥并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 加固 sshd 配置后先测试语法再重载
sudo sshd -t
sudo systemctl reload sshd

# 主机防火墙放行 SSH
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

# 安装并启用 fail2ban
sudo dnf install -y epel-release fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

遇到的问题与解决

密钥登录总提示输入密码:检查后发现是 ~/.ssh 目录权限不是 700、authorized_keys 不是 600 导致 SSH 静默拒绝,修正权限后解决。
fail2ban 不生效:Rocky 9 的日志由 systemd 管理,网上老教程读 /var/log/secure 的写法不适用,改用 backend = systemd 后正常。

第 2 讲网站上线:域名解析与 Nginx 个人主页

让任何人输入域名都能访问到你的主页

这一讲做了什么

关键命令

# 安装并启动 Nginx
sudo dnf install -y nginx
sudo systemctl enable --now nginx

# 放行 HTTP
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

# 准备网站目录
sudo mkdir -p /var/www/mysite
sudo chown -R liuhao:liuhao /var/www/mysite
sudo chmod 755 /var/www/mysite

# 编写站点配置后先测试再重载
sudo vi /etc/nginx/conf.d/mysite.conf
sudo nginx -t
sudo systemctl reload nginx

# 上传主页
scp index.html liuhao@服务器IP:/var/www/mysite/

# 排障:查看谁在读文件、看错误日志
ps -o user= -C nginx | sort -u
sudo tail -3 /var/log/nginx/mysite_error.log

遇到的问题与解决

403 Forbidden:网页文件权限设成了 600,而 Nginx 工作进程以 nginx 用户运行,属于「其他人」无法读取。错误日志里 Permission denied 直接指了原因,改为 644 后恢复。记住:文件至少 644、目录至少 755。
用 IP 访问是默认页:这是 server_name 在起作用,IP 请求的 Host 匹配不上站点,落到默认站点处理,属正常现象。

第 3 讲HTTPS 与证书自动续期

给网站加上安全锁

这一讲做了什么

关键命令

# 放行 HTTPS
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# 安装 certbot 并先演练再正式申请
sudo dnf install -y certbot
sudo certbot certonly --webroot -w /var/www/mysite \
  -d liuhao.cyou -d www.liuhao.cyou \
  -m 邮箱 --agree-tos --no-eff-email --dry-run
sudo certbot certonly --webroot -w /var/www/mysite \
  -d liuhao.cyou -d www.liuhao.cyou \
  -m 邮箱 --agree-tos --no-eff-email

# 查看证书
sudo certbot certificates

# 80 端口跳转 + 443 提供内容,重载
sudo nginx -t
sudo systemctl reload nginx

# 启用续期定时器 + deploy 钩子
sudo systemctl enable --now certbot-renew.timer
sudo certbot renew --dry-run

遇到的问题与解决

curl 验证时 PowerShell 用了别名:Windows 里 curl 是 Invoke-WebRequest 的别名,要用 curl.exe 才能得到正确响应头。
80 端口不能关:一是要让 http:// 访问跳转到 HTTPS,二是证书续期仍需通过 80 端口验证,关掉三个月后证书就无法续期了。