WSL/bash-on-windows- sudo 在版本升级后损坏

WSL/bash-on-windows- sudo 在版本升级后损坏

我知道我不应该do-release-upgrade在 WSL 中运行,但我还是这么做了。升级本身没有错误,但任何运行 sudo 的尝试都会返回:

sudo: no tty present and no askpass program specified

ls -l /dev作为普通用户的输出:

ls: cannot access 'lxss': Operation not permitted
ls: random: Invalid argument
ls: tty: Invalid argument
ls: tty0: Invalid argument
total 0
drwxr-xr-x 2 root     root      0 Aug 15 19:27 block
lrwxrwxrwx 1 root     root     13 Aug 15 19:27 fd -> /proc/self/fd
crw------- 1 root     root   0, 0 Aug 15 19:32 kmsg
c????????? ? ?        ?         ?            ? lxss
crw-rw-rw- 1 root     root   1, 3 Dec 31  1969 null
crw-rw-rw- 0 root     tty    5, 2 Aug 15 19:28 ptmx
drwxr-xr-x 0 root     root      0 Aug 15 19:27 pts
crw-rw-rw- 1 root     root   1, 8 Aug 15 19:32 random
lrwxrwxrwx 1 root     root      8 Aug 15 19:27 shm -> /run/shm
lrwxrwxrwx 1 root     root     15 Aug 15 19:27 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root     root     15 Aug 15 19:27 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root     root     15 Aug 15 19:27 stdout -> /proc/self/fd/1
crw--w---- 0 me tty  136, 0 Dec 31  1969 tty
crw-rw-rw- 1 root     tty    4, 0 Aug 15  2016 tty0
crw------- 1 me tty    4, 1 Aug 15  2016 tty1
crw-rw-rw- 1 root     root   1, 9 Aug 15 19:32 urandom
crw-rw-rw- 1 root     root   0, 0 Aug 15 19:32 zero

以 root 身份运行(使用 lxrun.exe/setdefaultuser)会返回相同的结果。

我知道我可以重新安装 Ubuntu,但我仍然好奇是什么原因导致了这个问题以及是否有简单的解决方法。

哦,然后date就返回了Mon Aug 15 19:45:49 DST 2016,就像它应该的那样。

答案1

除了下载旧软件包之外,还有什么方法可以帮助呢:

  • 通过 或 以 Root 身份登录lxrun /setdefaultuser root(如果您尚未升级)sudo su
  • 通过以下方式为 Root 用户设置密码passwd

现在,您只需使用su root并输入您设置的密码即可随时切换到 root,而无需通过 lxrun 切换默认用户。

另外,你可以完全阻止 sudo 要求输入密码,正如几个答案中提到的那样这里

为了完全阻止 sudo 询问密码,您可以在 /etc/sudoers 文件末尾添加以下行(visudo以 root 身份编辑文件)

<username> ALL=(ALL) NOPASSWD: ALL

请注意,这将导致 sudo 在执行任何 Sudo 命令时不再要求输入密码。如果您想限制可以使用 sudo 使用的程序,请添加二进制文件的完整路径(逗号分隔)而不是最后的 ALL,例如:

<username> ALL=(ALL) NOPASSWD: /usr/sbin/cron, /usr/sbin/visudo

答案2

找到解决方案这里

从cmd:

lxrun /setdefaultuser root

以 root 身份从 bash 执行:

wget http://mirrors.kernel.org/ubuntu/pool/main/s/sudo/sudo_1.8.9p5-1ubuntu1.1_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/p/procps/procps_3.3.9-1ubuntu2_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/s/strace/strace_4.8-1ubuntu5_amd64.deb
dpkg -i sudo_1.8.9p5-1ubuntu1.1_amd64.deb
dpkg -i procps_3.3.9-1ubuntu2_amd64.deb
dpkg -i strace_4.8-1ubuntu5_amd64.deb

完成后,不要忘记设置非root默认用户!

lxrun /setdefaultuser <your user>

答案3

从cmd:

ubuntu config --default-user root

在当前 Windows 命令提示符中运行 WSL

ubuntu.exe

查看最近添加到 Ubuntu 系统的三个用户

tail -3 /etc/passwd

更改 user01 的密码

passwd user01

退出 WSL

exit

相关内容