必须用visudo编辑,因其保存前自动语法检查,防止因空格缺失、冒号遗漏、拼写错误等导致sudo解析失败;直接vim修改易引发“parse error”使sudo完全失效。

直接修改 /etc/sudoers 文件就能取消 sudo 密码输入,但必须用 visudo 编辑,否则语法错误会导致 sudo 失效。
为什么不能直接 vim /etc/sudoers
sudoers 文件有严格语法校验机制。手写错误(比如漏空格、错用等号、多写字符)会让整个文件失效,后续所有 sudo 命令都会报错:sudo: parse error in /etc/sudoers near line X,甚至无法修复——因为没 sudo 就改不了它。
用 visudo 编辑时,保存前会自动语法检查,出错就拦住不保存,这是唯一安全方式。
取消指定用户的 sudo 密码
运行 sudo visudo,在文件末尾添加一行:
username ALL=(ALL) NOPASSWD: ALL
其中 username 替换为你的真实用户名。这行生效后,该用户执行任何 sudo 命令(包括 sudo -i)都不再提示密码。
常见错误点:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
username后面必须有空格,不是usernameALL=... -
NOPASSWD:冒号后要有一个空格,不是NOPASSWD:ALL(少空格会解析失败) - 不要复制粘贴整段示例,尤其注意中文标点、全角空格、不可见 Unicode 字符
取消整个用户组的 sudo 密码
比如让 admin 或 sudo 组所有成员免密:
%sudo ALL=(ALL) NOPASSWD: ALL
注意开头的 % 符号不能漏。Ubuntu 默认用 sudo 组,CentOS/RHEL 通常用 wheel 组,得先确认组名:
groups username
如果输出里没有 sudo 或 wheel,说明用户不在该组,得先加组:sudo usermod -aG sudo username(Ubuntu)或 sudo usermod -aG wheel username(RHEL系)。
只对特定命令免密(更安全的做法)
不建议全放开,可限制只对几个命令免密,例如只让 docker ps 和 systemctl restart nginx 不输密码:
username ALL=(ALL) NOPASSWD: /usr/bin/docker ps, /bin/systemctl restart nginx
注意:
- 必须写绝对路径,
which docker查准位置 - 命令带参数时,参数也得完全匹配,
NOPASSWD: /bin/systemctl restart *这种通配写法无效 - 如果命令本身会调用子进程(如脚本),子进程权限不会继承,仍可能被拦截
改完保存退出,立刻生效,不用重启服务。但别忘了:免密 sudo 是高危操作,一旦账号被入侵,攻击者等于直接拿到 root 权限。生产环境尽量按需授权,而不是一劳永逸地 NOPASSWD: ALL。










