我们常使用Linuxsudo命令暂时获取root权限。但这条命令需要输入密码,可能让人觉得不方便。 这里介绍一个免密使用sudo的方法。

住:操作有危险,请谨慎操作!

一、 编辑sudoers文件

以我的登录账号bzj为例。

  1. 打开sudoers文件

    打开Linux终端,发出如下命令:

     sudo visudo
    

    这条命令会打开/etc/sudoers这个文件。 或者,也可以用这种方式打开:

     cd /etc
     sudo vim sudoers
    
  2. 添加项目

    在打开的文件中,找到如下一行:

     root    ALL=(ALL:ALL) ALL
    

    在其下添加一行:

     bzj    ALL=(ALL:ALL) NOPASSWD:ALL
    
  3. 修改项目

    再在找到这一行:

     %sudo    ALL=(ALL:ALL) ALL
    

    将这一行改成这样:

     %sudo    ALL=(ALL:ALL) NOPASSWD:ALL
    
  4. 保存

    sudo visudo打开的,按CTRL+O;用sudo vim sudoers打开的,先按ESC,再按:,输入wq!即可。

请在操作时一定小心,不要输错了!

此后再使用sudo时就不会被要求输入密码了。

二、 我踩过的坑

这几天我新装了台电脑。在完成WSL中的Linux安装后修改了sudoers文件,结果不小心输错了,导致在使用sudo时出现这样的错误:

>>> /etc/sudoers: syntax error near line 27 <<<
sudo: parse error in /etc/sudoers near line 27
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

这个错误造成了死循环:要使用sudo,必须要用到sudoers;要修改sudoers,必须使用sudo

我尝试使用

su -

试图进入root账号也不行,提示授权失败!

赶紧上网查如何修复,结果方案不是不适用,就是不管用! 这下给我整傻眼了,该不会要重装WSL吧:(

静下心了,终于想到了一个办法:

  1. WSL的默认用户切换为root

    关闭WSL终端,打开Powershell,输入:

     ubuntu2004 config --default-user root
    

    如果你的Ubuntu是18.04,那么请用ubuntu1804替换ubuntu2004。以下同。

  2. 启动WSL

    此时可以使用前面提到的两条命令打开sudoers并修改为正确。

  3. WSL的默认用户切换回bzj

    关闭WSL终端,打开Powershell,输入:

     ubuntu2004 config --default-user bzj
    
  4. 再次启动WSL

    成功了!

如果你使用的是独立Linux或者在虚拟机中使用Linux,并且不小心犯了和我相似的错误,那么建议上网去查如何修复sudoers。