外观
3.3 用户、权限与防火墙配置
约 869 字
服务器初始化
本页对应「三、操作步骤」的 3.3,完成用户、权限与防火墙配置。返回上级:云服务器初始化配置说明。
前置条件
- 3.1、3.2 已完成,当前以 root 登录且
sshd -t校验通过。 - 本机公钥
~/.ssh/axis_ed25519.pub已生成,权限为 644,私钥未外泄。 - 已确认对外需开放的端口清单:22、80、443;其他端口须有书面说明才放通。
- 云安全组已放通 22,且当前有一个可用的 VNC 或控制台救援通道。
操作步骤
- 创建运维账号并加入 sudo 组,设置独立密码。密码与 root 密码必须不同,避免一处泄露连带失守。
sudo adduser --disabled-password --gecos "" deploy
sudo passwd deploy
sudo usermod -aG sudo deploy
id deploy- 分发公钥并修正权限。目录与文件权限不对会导致密钥登录静默失败,现象是仍提示输入密码。
ssh-copy-id -i ~/.ssh/axis_ed25519.pub deploy@203.0.113.10
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh- 收敛 sudo 权限,写入独立策略文件并校验语法。不要直接编辑
/etc/sudoers,该文件语法错误会让所有 sudo 失效。
echo 'deploy ALL=(ALL:ALL) ALL' | sudo tee /etc/sudoers.d/90-deploy
sudo chmod 440 /etc/sudoers.d/90-deploy
sudo visudo -c- 确认新账号可登录后,关闭密码认证与 root 远程登录。执行前必须已在新会话中成功用 deploy 登录过一次。
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sshd -t && sudo systemctl reload ssh- 配置防火墙默认策略与放通规则,最后才启用。先写规则再启用,可以保证启用瞬间 22 端口已经放通。
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status numbered结果确认
id deploy输出包含 sudo 组;sudo -l -U deploy列出可执行全部命令,说明策略文件已生效。sudo sshd -T中passwordauthentication no、permitrootlogin no,两项均为最终值。- 新会话执行
ssh deploy@203.0.113.10可登录;ssh root@203.0.113.10返回Permission denied (publickey),说明 root 已被拒。 ufw status verbose显示Default: deny (incoming)、allow (outgoing),规则仅 22、80、443,状态为 active。sudo grep -c 'Failed password' /var/log/auth.log在关闭密码认证后不再增长,可作为长期观察指标。
注意事项
- 顺序不可颠倒:先确认 deploy 密钥登录成功,再关闭密码认证,否则会把自己锁在机器外,只能靠控制台救援。
- 不要直接编辑
/etc/sudoers,只写/etc/sudoers.d/下的文件,并在每次改动后执行visudo -c。 - 启用 ufw 前确认云安全组已放通 22;如需容器网络,预先放通容器网段,避免容器间通信被拦。
- 公钥泄露时删除
authorized_keys中对应行并重新分发,不要复用旧密钥,也不要只改密码了事。 - fail2ban 在账号与防火墙就绪后再启用,默认 jail 会读取 auth.log,启用后先观察一天再调阈值。
- 防火墙日志默认被 ufw 静默丢弃,需要排查拦截原因时先执行
sudo ufw logging on,排查完成后及时关闭,避免日志量过大。 - deploy 账号的 sudo 是否需要免密,取决于自动化脚本是否以该账号运行;人工运维场景保留密码,自动化场景单独建号并限定命令范围。