CH-J Server Manager通过 SSH 管理服务器
菜单
全部指南与文章 →

SSH 用户与 root 访问:Linux 安全配置

创建管理员账户,安装其密钥并测试 sudo,然后再限制 root 登录,避免把自己锁在服务器之外。

目标与操作顺序

管理员应使用密钥登录各自的账户,并在需要时使用 sudo,这样既能留下谁做了什么的记录,也能限制密码猜测。操作顺序很重要:先让新的访问方式正常工作并完成测试,最后再限制 root。保留提供商的控制台访问,以备出现问题。

创建账户并安装密钥

创建账户,添加其公钥,并严格设置权限,因为 sshd 会忽略其他人可写的密钥文件。切勿将私钥复制到服务器上。在 Red Hat 系列系统上,使用 wheel 组而非 sudo 组。

sudo adduser admin1
sudo usermod -aG sudo admin1
sudo install -d -m 700 -o admin1 -g admin1 /home/admin1/.ssh
sudo install -m 600 -o admin1 -g admin1 ~/admin1.pub /home/admin1/.ssh/authorized_keys

从第二个窗口测试

保持当前会话打开,在另一个终端测试新的登录方式。仅仅加入了组并不能证明 sudo 可用,决定这一点的是 sudoers 中的规则。使用 sudo -l 确认。

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 admin1@server.example
sudo -l
sudo -v

限制 root 登录

PermitRootLogin prohibit-password 仅允许 root 使用密钥登录,而 no 会完全阻止 root 通过 SSH 登录。将更改放在独立文件中,存放目录为 /etc/ssh/sshd_config.d.对于大多数选项,sshd 使用找到的第一个值,因此较早读取的文件可能优先。请用 sshd -T 验证实际生效的值,而不是只阅读文件。关闭旧会话前,先测试一次新登录。

echo 'PermitRootLogin no' | sudo tee /etc/ssh/sshd_config.d/50-root.conf
sudo sshd -t
sudo systemctl reload ssh
sudo sshd -T | grep -iE '^(permitrootlogin|passwordauthentication) '

密码登录及应避免的做法

只有在所有需要的账户都具备经过测试的密钥后,才关闭 PasswordAuthentication。避免多人共用一个账户,否则就无法在不影响其他人的情况下撤销某一个人的访问权限。为整个账户启用免密码 sudo,也意味着仅凭被盗的密钥就能获得完全控制权。

CH-J Server Manager 中的账户

Users 模块通过活动的 SSH 会话管理账户、组、SSH 密钥和 SSH 访问权限。它从不修改 sudoers,也不设置 NOPASSWD,并根据 sudo -l 报告实际的 sudo 状态。root 账户无法删除,允许 root 使用密码登录需要额外确认,推荐选项为仅使用密钥。SSH 访问权限的更改会通过 sshd -T 和一次新的 SSH 登录来验证;如果检查失败或更改会导致您无法访问,系统会自动恢复之前的配置。没有 sudo 时,该模块为只读。

详细文档

OpenSSH: sshd_config →

man: sudoers →

生物识别解锁与安全 →