前言
前面一篇文章说到,sudo 操作免密码验证等,最好先切换到 root 用户,再进行编辑,最后强制保存。如果不这么做,而使用 chmod 来更改权限,就会导致之后的 sudo 操作全部被拒绝。
问题与解决
问题是这样的,我需要编辑 /etc/sudoers 文件,想让当前用户使用 sudo 操作可以免密码验证,但是保存不了,一直提示文件是只读的,:wq! 强制保存也不行,提示文件不属于当前用户所拥有。
于是敲了一句 chmod:
$ sudo chmod a+w /etc/sudoers
修改了 /etc/sudoers 的权限,再用 sudo 命令的时候,必定会出现报错:
sudo: /etc/sudoers is owned by uid 501, should be 0
sudo: no valid sudoers sources found, quitting
501 是我当前登录的用户 bingo,而 0 应该是 root 用户。
网上的解决方案是进入 recovery mode,将 sudoers 的权限修改回来。但我不相信必须要这么做,想先尝试看能不能改得回来。
于是将 /etc/sudoers 的 owner 和组,修改为 admin:
$ chown root:admin /etc/sudoers
执行这一句命令时出现一个报错:
$ chown: /etc/sudoers: Operation not permitted
那这就很尴尬了,sudo 本来就已经不能用了,怎么办?
以管理员身份打开cmd或powershell:
PS C:\> ubuntu config --default-user root
PS C:\> wsl
此时拥有最高权限,任何操作都要慎重。
再次执行原来那句命令:
$ chown root:admin /etc/sudoers
就不会有 Operation not permitted 的报错了,然后 exit 退出 root 用户后,随便执行一句 sudo 操作命令,又出现另外一个报错:
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
这个好解决,应该还是 /etc/sudoers 的权限问题,继续 su 切换到 root 用户,然后改权限:
$ su
$ chmod 555 /etc/sudoers
$ exit
然后再随便敲一句 sudo,没有报错,问题已解决。
当wsl里的root密码忘了时,以管理员身份打开cmd或powershell:
PS C:\> ubuntu config --default-user root
PS C:\> wsl
root@universe:/mnt/c# passwd
Enter new UNIX password: