Ubuntu 系统在默认安装后,root 账户并非被删除,而是处于锁定状态。这意味着你无法直接使用 root 身份登录图形界面或通过 SSH 建立连接。这种设计不是限制你的权限,恰恰是为了堵住暴力破解攻击最明显的目标。攻击者扫描 SSH 端口时,首先尝试的用户名就是 root,一旦 root 被禁用,他们连门都找不到。你需要的管理权限,全部通过一个普通用户配合 sudo 机制来完成,既安全又灵活。下面直接进入操作流程,不绕弯子。

检查当前 root 账户状态

在开始配置之前,先确认系统里 root 账户的实际状态。打开终端,执行以下命令查看 root 密码的锁定标记。

sudo passwd -S root

输出结果中如果看到 "L" 标志,说明 root 密码已被锁定,账户无法通过密码认证登录。如果显示 "P",则表示密码可用,这种情况下你应该立即锁定它。锁定 root 密码只需一行命令。

sudo passwd -l root

这条命令会在 root 的加密密码前加上一个感叹号,使密码立即失效。锁定后,root 账户依然存在于系统中,进程和文件所有权不受影响,只是无法通过密码认证交互登录。如果你需要彻底禁用 root 的 shell 访问,还可以修改 /etc/passwd 文件中 root 的登录 shell,将其指向 /usr/sbin/nologin 或 /bin/false,但通常锁定密码已经足够安全。

创建新用户并设置强密码

现在来创建一个日常使用的普通用户。adduser 命令会以交互方式引导你完成整个过程,比 useradd 更友好,它会自动创建家目录、复制骨架文件并提示你设置密码。

sudo adduser newusername

把 newusername 替换为你想要的实际用户名。系统会先要求你输入并确认密码,然后询问一系列可选信息,包括全名、房间号、工作电话等。这些附加信息可以直接按回车跳过,不影响账户功能。密码强度至关重要,建议使用至少 12 个字符、包含大小写字母、数字和特殊符号的组合。如果你更习惯用 useradd 命令,记得加上 -m 参数创建家目录,并手动用 passwd 设置密码。

sudo useradd -m -s /bin/bash newusername
sudo passwd newusername

用户创建完成后,用 ls 命令确认家目录已经生成,/etc/passwd 文件里也应有对应用户的记录行。此时新用户还没有管理权限,只能进行基本的文件读写操作。

将新用户加入 sudo 组

Ubuntu 系统中,sudo 组的成员拥有执行管理命令的权限。把刚才创建的用户加入这个组,就能通过 sudo 临时提权。

sudo usermod -aG sudo newusername

-a 参数表示追加组,-G 指定附加组列表。如果不加 -a,用户会被从其他附加组中移除,只保留 sudo 组,这可能导致权限混乱。加入 sudo 组后,用户需要重新登录才能使组成员身份生效。你可以用 groups 命令验证用户当前所属的组。

groups newusername

输出中应该包含 sudo。有些 Ubuntu 衍生版本可能使用 wheel 组或 admin 组,但主流 Ubuntu 发行版统一使用 sudo 组。如果发现没有 sudo 组,可以用 visudo 命令检查 /etc/sudoers 文件中 %sudo 行的配置,确认该组确实被授权。

配置 sudoers 文件精细控制权限

直接把用户加入 sudo 组授予的是完整 root 权限,这在多用户服务器上可能过于宽泛。通过编辑 sudoers 文件,你可以精确控制哪些用户能执行哪些命令,甚至限制特定参数。编辑 sudoers 必须使用 visudo 命令,它会锁定文件并进行语法检查,防止因格式错误导致 sudo 完全失效。

sudo visudo

visudo 默认打开 /etc/sudoers 文件。如果你想为某个用户设置免密码执行特定命令的权限,可以添加这样一行。

newusername ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx

这行配置的含义是:newusername 用户可以在任何主机上以任何身份运行 restart nginx 和 status nginx 命令,且无需输入密码。配置完成后,该用户执行其他 sudo 命令仍需密码验证。对于自动化脚本场景,这种细粒度授权非常实用。你也可以把用户权限限制在特定主机上,比如只允许从 192.168.1.0/24 网段登录时使用 sudo,进一步增强安全性。

测试新用户的 sudo 权限

配置完成后,不要急着退出当前终端。先打开一个新的终端窗口或 SSH 会话,用新用户身份登录,测试 sudo 是否正常工作。

su - newusername

切换用户后,尝试执行一个需要 root 权限的命令。

sudo whoami

如果返回 "root",说明 sudo 配置成功。再测试一下 apt update 这类常用管理命令。

sudo apt update

系统会提示你输入 newusername 的密码,输入正确后命令正常执行。如果出现 "newusername is not in the sudoers file" 的错误,说明组添加未生效,需要重新登录或手动重启会话。如果提示密码错误,检查是否开启了大小写锁定或键盘布局问题。

加固 SSH 配置禁止 root 登录

即使 root 密码已被锁定,SSH 服务仍然可能允许 root 通过密钥认证登录。必须明确在 SSH 配置中关闭 root 登录通道。编辑 /etc/ssh/sshd_config 文件。

sudo nano /etc/ssh/sshd_config

找到 PermitRootLogin 这一行,将其值修改为 no。如果该行被注释,去掉前面的 # 号。

PermitRootLogin no

同时建议确认 PasswordAuthentication 设置为 yes(如果你需要密码登录)或 no(如果你只使用密钥登录)。修改完成后重启 SSH 服务使配置生效。

sudo systemctl restart sshd

不要关闭当前的 SSH 会话,新开一个终端测试能否用新用户正常登录。确认无误后再关闭旧会话,避免配置错误导致自己被锁在服务器外面。如果服务器在云端,务必保留一个可用的恢复控制台访问方式。

转移 root 拥有的文件和任务

在某些遗留系统或手动部署的环境中,可能有文件或 cron 任务直接属于 root 用户。禁用 root 登录前,检查这些资源是否需要迁移。查找 /home 以外属于 root 的配置文件目录。

sudo find /opt /srv /var/www -user root -type f 2>/dev/null

对于需要新用户维护的文件,用 chown 更改所有权。

sudo chown -R newusername:newusername /path/to/directory

检查 root 的 crontab 中是否有定时任务。

sudo crontab -l

如果有任务需要保留,将它们迁移到新用户的 crontab 或系统的 /etc/cron.d 目录下,并调整相应的文件权限。systemd 定时器也是常见的替代方案,它比 cron 更灵活,日志也更清晰。

启用失败登录监控与账户锁定策略

有了 sudo 用户,还可以叠加一层防护。安装 fail2ban 能自动封禁多次登录失败的 IP 地址,有效抵御暴力破解。

sudo apt update && sudo apt install fail2ban -y

安装完成后 fail2ban 会立即启动,默认配置就能保护 SSH 服务。你可以查看 /etc/fail2ban/jail.local 文件自定义封禁阈值和时长。另外,通过 pam_tally2 模块可以设置本地登录失败次数限制,连续输错密码达到上限后账户自动锁定一段时间。

sudo nano /etc/pam.d/common-auth

在文件适当位置添加以下行。

auth required pam_tally2.so deny=5 unlock_time=600 onerr=fail audit

这表示连续 5 次密码错误后锁定账户 10 分钟。这些措施与禁用 root 配合使用,形成多层防御体系。

日常使用中的最佳实践

养成使用 sudo 的习惯后,有几点细节值得注意。执行一系列管理任务时,可以用 sudo -i 或 sudo -s 启动一个 root shell,任务完成后立即 exit 退出,避免在 root 环境下停留过久。不要用 sudo 运行图形界面程序,这可能导致家目录下的配置文件所有权被 root 占据,引发权限问题。如果确实需要图形化管理,使用 gvfs 的 admin 后端或 pkexec。定期审查 /var/log/auth.log 日志,关注 sudo 使用记录和失败尝试,及时发现异常行为。对于团队协作的服务器,为每位管理员创建独立账户并分配 sudo 权限,而不是共享同一个账户,这样操作审计才能追溯到具体个人。

常见问题与排查思路

用户反馈 sudo 命令执行很慢,通常是主机名解析问题。检查 /etc/hosts 文件,确保本机主机名能正确解析到 127.0.0.1。如果 sudo 提示 "unable to resolve host",就是这个原因。另一个常见问题是修改 sudoers 后语法错误导致 sudo 无法使用。这时需要用 pkexec visudo 或以恢复模式启动来修复文件,所以再次强调必须使用 visudo 编辑。如果误删了用户的家目录权限,用 chown 和 chmod 恢复即可。

sudo chown -R username:username /home/username
chmod 750 /home/username

整个配置过程的核心逻辑很简单:锁定 root 密码、创建普通用户、授予 sudo 权限、加固 SSH、监控日志。每一步都直接提升系统安全性,没有多余动作。完成这些设置后,你的 Ubuntu 服务器在面对自动化攻击时将具备很强的抵抗能力,同时日常管理效率不受影响。