sudo免密与root禁止ssh直接登录配置,新版
在 Debian/Ubuntu系统中,你可以通过以下步骤完成操作。你需要先以 root 身份登录,或者使用具有 sudo 权限的账号。
下文将假定普通账户用户名为ngc13。
第一步:将 ngc13 添加到 sudo 用户组
在终端执行以下命令:
usermod -aG sudo ngc13
-a:表示追加(append)。-G:表示指定组(groups)。- 执行完后,
ngc13就拥有了执行 sudo 命令的权利,但此时执行 sudo 仍需要输入ngc13的密码。
第二步:设置免密 sudo
为了让 ngc13 在执行 sudo 时不需要输入密码,最好的做法是在 /etc/sudoers.d/ 目录下创建一个独立配置文件。
- 执行以下命令(推荐方式):
echo "ngc13 ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/ngc13 - 设置正确的权限:
sudo 配置文件对权限要求非常严格,如果权限不对,sudo 功能可能会报错。执行:chmod 0440 /etc/sudoers.d/ngc13
第三步:验证是否成功
- 切换到
ngc13用户:bash su - ngc13 - 测试免密 sudo 是否生效(尝试更新软件包列表):
bash sudo apt update
如果系统直接开始运行而没有提示输入密码,说明配置成功。
进阶:如果你想手动编辑(替代方案)
如果你不想使用上面的 echo 命令,也可以使用 visudo 命令来编辑(这更安全,因为它会在保存前检查语法错误):
- 输入命令:
bash visudo -f /etc/sudoers.d/ngc13 - 在打开的文件中写入以下内容:
text ngc13 ALL=(ALL) NOPASSWD: ALL - 保存并退出(如果你使用的是 nano 编辑器,按
Ctrl+O回车保存,Ctrl+X退出)。
💡 注意事项
- 安全性: 免密 sudo 虽然方便,但如果该账号被劫持,攻击者将直接获得最高权限。请确保
ngc13账号的 SSH 密钥或密码强度足够。 - 生效时机: 如果
ngc13当前已经登录,修改组权限后可能需要重新登录(注销再登录)才能生效。
禁止 root 用户通过 SSH 直接登录是提升 Linux 系统安全性(防止暴力破解)的重要步骤。
在执行以下操作前,请务必确保你的 ngc13 用户已经可以成功 SSH 登录,并且拥有 sudo 权限,否则你可能会被锁在系统外面。
步骤 1:编辑 SSH 配置文件
使用具有 root 权限的用户(或使用 sudo)打开 SSH 服务配置文件:
sudo nano /etc/ssh/sshd_config
步骤 2:修改配置项
在文件中找到 PermitRootLogin 这一行。
- 它可能被注释掉了(前面有
#号),也可能设置为yes或prohibit-password。 - 将其修改为:
text PermitRootLogin no
(如果该行前面有#,请记得删掉#符号)
步骤 3:重启 SSH 服务
为了让修改生效,需要重启 SSH 守护进程:
sudo systemctl restart ssh
(注意:在某些系统上命令可能是 sudo systemctl restart sshd)
⚠️ 重要安全检查(防止失联)
在关闭当前的 root 会话之前,请按以下步骤验证:
- 不要关闭当前终端窗口(以防万一)。
- 新开一个电脑终端(或使用另一个 SSH 连接),尝试以
ngc13登录:bash ssh ngc13@你的设备IP - 登录成功后,测试 sudo 是否依然正常:
bash sudo whoami
如果返回root,说明一切正常。 - 最后,尝试直接以 root 登录:
bash ssh root@你的设备IP
如果系统提示Permission denied或要求输入密码后依然拒绝,说明 root 登录已被成功禁用。
进阶建议:使用 SSH 密钥登录
如果你追求更高的安全性,可以考虑彻底禁用“密码登录”,只允许“SSH 密钥登录”。这样即便黑客知道了你的用户名和密码,没有私钥文件也无法进入系统。
- 在本地电脑生成密钥对:
ssh-keygen。 - 将公钥推送到设备:
ssh-copy-id ngc13@你的设备IP。 - 在
/etc/ssh/sshd_config中设置PasswordAuthentication no。
