用用户和 sudo 代替 root
如何创建工作用户、授予其 sudo、迁移 SSH 密钥,并停止以 root 身份登录服务器。
更新于 2026年8月23日
机器默认拥有完整的 root 权限,您的第一反应可能是继续以 root 身份操作。这样确实方便,直到 rm -rf 里出现第一个拼写错误。正确的做法不同:日常任务使用普通用户,仅在确实需要时通过 sudo 获取 root 权限。
创建用户
Debian 和 Ubuntu:
adduser artem
usermod -aG sudo artem
AlmaLinux 和 CentOS Stream:
adduser artem
passwd artem
usermod -aG wheel artem
用户组不同:Debian 系列使用 sudo,RHEL 系列使用 wheel。检查权限:
sudo -l -U artem
迁移 SSH 密钥
在面板 /hosting/vds/m/<id> 的“访问”标签页中添加的密钥会归属于 root 用户。您需要自己将它们配置给新用户:
mkdir -p /home/artem/.ssh
cp /root/.ssh/authorized_keys /home/artem/.ssh/
chown -R artem:artem /home/artem/.ssh
chmod 700 /home/artem/.ssh
chmod 600 /home/artem/.ssh/authorized_keys
这里的权限并非形式主义:如果权限过于宽松,sshd 会静默拒绝接受该密钥。
在不关闭当前终端窗口的情况下,另开一个终端窗口,确认能以新用户身份登录:
ssh artem@<address>
sudo whoami
只有在验证成功后,才应继续禁用 root 登录。
如何使用 sudo
sudo systemctl restart nginx
sudo -i
sudo -u www-data ls /var/www
sudo -i 会为您提供一个完整的 root shell——适用于执行一系列命令,而非长期工作。每次调用 sudo 都会写入日志,这是您调查事件时的线索:
journalctl -t sudo -n 50
grep sudo /var/log/auth.log
关于日志的更多内容——谁登录了机器。
服务的权限
另一个常见错误是以 root 身份运行应用程序,理由是“这样能正常工作”。应为每个服务创建一个无 shell 的系统用户:
useradd --system --no-create-home --shell /usr/sbin/nologin appsrv
chown -R appsrv:appsrv /opt/app
这样,应用程序中的漏洞就不会一次性将整台机器交给攻击者。
常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
artem is not in the sudoers file | 不在用户组中或未重新登录 | usermod -aG sudo artem,重新登录 |
| 密钥不被接受 | .ssh 的权限宽于 700 或所有者为 root | 按上述方法执行 chown 和 chmod |
| sudo 密码无效 | 用户未设置密码 | passwd artem |
| 编辑 sudoers 导致 sudo 损坏 | 文件中存在语法错误 | 只能使用 visudo;通过救援模式修复 |
编辑
/etc/sudoers时务必使用visudo命令——它会在保存前检查语法。文件损坏会导致所有人同时失去 sudo 权限。