1. 首页 > 技术教程 > 正文

最小权限原则:禁用 root 直接登录,创建 sudo 管理账号

最小权限原则:禁用 root 直接登录,创建 sudo 管理账号

刚买的 VPS 或者云服务器,拿到手第一件事是什么?不是装宝塔,也不是跑分。先关掉 root 直接登录,创建一个普通用户并赋予 sudo 权限。这是 Linux 运维里最基础也是最关键的安全防线,主机选上的很多 Linux 教程都强调过这一点。别嫌麻烦,被暴力破解扫到 root 密码的那一刻,后悔都来不及。

最小权限原则:禁用 root 直接登录,创建 sudo 管理账号的图片

为什么必须禁用 root 直接登录?

root 是 Linux 系统的超级管理员,拥有最高权限。一旦 root 账号被攻破,服务器就等于拱手让人。而 root 是默认存在的,密码天天被无数扫描器轮番试探。最小权限原则的核心就是:给每个操作分配刚刚好的权限,不多给一分。

暴力破解的日常

你只要在 `/var/log/auth.log` 或 `/var/log/secure` 里翻一下,就能看到一堆 `Failed password for root` 的记录。这些都是扫描器在试密码。如果你用弱密码,被撞破只是时间问题。

误操作的风险

用 root 干活,手一抖敲个 `rm -rf /` 或者改错系统文件,整个服务器直接崩。普通用户没这权限,误操作最多影响自己的文件,系统层面是安全的。

创建 sudo 管理账号

别问为什么,照着做。先创建一个普通用户,然后把它加到 `wheel` 或 `sudo` 组里。

第一步:添加新用户

adduser devops # 创建用户,会提示设置密码和填写信息
passwd devops # 设置或修改密码,密码强度要够

`adduser` 是交互式创建,会自动创建家目录和用户组。如果你用 `useradd`,需要手动加参数。

第二步:赋予 sudo 权限

usermod -aG wheel devops # CentOS/RHEL 系列,加到 wheel 组

usermod -aG sudo devops # Ubuntu/Debian 系列,加到 sudo 组

`-aG` 参数是追加组,不加 `-a` 会覆盖用户原有的附属组,别搞错了。加完组后,用 `groups devops` 检查一下。

第三步:验证 sudo 权限

su – devops # 切换到新用户
sudo whoami # 执行 sudo 命令,第一次会提示输入用户自己的密码

正常输出应为:root

如果输出是 `root`,说明 sudo 权限生效了。万一报错说 `devops is not in the sudoers file`,别慌,切回 root 执行 `visudo`,找到 `%wheel ALL=(ALL) ALL` 这行,去掉注释即可。

禁用 root 直接登录

权限配置好了,接下来关掉 root 远程登录的大门。这里要改 SSH 服务端配置。

修改 SSH 配置文件

sudo vim /etc/ssh/sshd_config # 用 sudo 打开配置文件

找到下面这几行,改成如下内容:

PermitRootLogin no # 禁止 root 直接登录

或者更严格:PermitRootLogin prohibit-password # 禁止密码登录,但允许密钥

PasswordAuthentication no # 推荐关闭密码登录,只允许密钥认证

老鸟叮嘱:改配置前,先确保你的 sudo 用户能用密钥登录。万一你关了密码登录,钥匙又没配好,自己会被锁在门外。永远开一个新终端测试,不要关掉当前连接。

重启 SSH 服务并测试

sudo systemctl restart sshd # CentOS/RHEL 系列

sudo systemctl restart ssh # Ubuntu/Debian 系列

重启后,用新终端尝试用 root 登录,应该会被拒绝。再用 `devops` 用户试,能正常登录即可。

配置 sudo 免密码(可选)

如果你觉得每次执行 `sudo` 都要输密码太烦,可以给指定用户配置 NOPASSWD。

sudo visudo # 用 visudo 编辑,语法检查更安全

找到 `%wheel ALL=(ALL) ALL` 这行,改成:

%wheel ALL=(ALL) NOPASSWD: ALL

这样 `wheel` 组里的用户执行 `sudo` 就不用输密码了。风险自担:如果用户密码泄露,攻击者可以直接提权。

常见错误与排障

1. SSH 连接被拒绝

重启 SSH 后连不上?检查防火墙是否放行了 22 端口。

sudo firewall-cmd –list-all # 查看防火墙规则
sudo firewall-cmd –add-service=ssh –permanent # 放行 SSH
sudo firewall-cmd –reload

2. sudo 报错“不在 sudoers 文件中”

切回 root,执行 `visudo`,确认 `%wheel ALL=(ALL) ALL` 这行没有被注释,且用户确实在 `wheel` 组里。

3. 密钥登录失败

检查 `/home/devops/.ssh/authorized_keys` 的权限,必须是 `600`,所属用户和组必须是 `devops`。

chmod 600 /home/devops/.ssh/authorized_keys
chown devops:devops /home/devops/.ssh/authorized_keys

老鸟叮嘱

千万不要在修改 `/etc/ssh/sshd_config` 后直接关掉当前连接。先开一个新终端测试,确认新配置生效且你能登录,再关旧的。运维界有个经典段子:“改完 SSH 配置后,你永远不知道下一个连接能不能成功。” 留条后路,避免被关在门外。

FAQ

Linux SSH 连不上怎么办?

先检查网络和防火墙,确认 22 端口放行。然后看 SSH 服务是否在运行:`systemctl status sshd`。如果服务没启动,尝试 `/usr/sbin/sshd -t` 检查配置文件语法。最后检查 `/var/log/secure` 或 `/var/log/auth.log` 找具体报错。

VPS 防火墙端口放行后还是访问不了是什么原因?

除了云服务商的安全组,服务器内部防火墙(如 firewalld、iptables、ufw)也可能拦截。用 `firewall-cmd –list-all` 或 `iptables -L` 查看规则。另外,SELinux 也可能挡掉,临时关闭测试:`setenforce 0`。

Linux 小白可以直接用 root 账号操作吗?

不建议。root 权限过大,误操作代价高。建议创建一个普通用户,用 `sudo` 执行需要管理员权限的命令。这是最小权限原则的基础要求。

禁用 root 登录后,如何执行需要 root 权限的命令?

使用 `sudo`。例如 `sudo systemctl restart nginx`。第一次执行会提示输入当前用户的密码,之后短时间内免密。

配置了 sudo 免密码,安全吗?

相对不安全。如果用户密码泄露,攻击者可以直接提权。建议仅在受信任的内网环境或临时调试时开启,生产环境慎用。

修改 `sshd_config` 后,服务重启失败怎么办?

用 `sudo sshd -t` 检查配置文件语法。如果输出有错误,根据提示修正。常见错误是 `PermitRootLogin` 拼写错误或重复配置。修正后再次 `systemctl restart sshd`。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9519.html 商家投稿邮箱:zhujixuanblog@qq.com