Personal nest in the information age

Debian 10 通过su命令进入root身份但无法执行系统管理命令的可能原因及解决办法

举例描述:

在Debian中fdisk是需要root身份才能使用的,假设在Debian 10中采用如下方式进入root身份并使用fdisk

$ su
# fdisk -l

会出现下面的执行结果:

bash: fdisk: command not found

例子中问题的解决办法:

$ su -
# fdisk -l

sudo的话,使用sudo也行:

$ sudo fdisk -l

原因:

Debian官网有对应这个问题的解答,我把对应原文翻译了过来:

buster中的su命令由util-linux源包提供,而不再是shadow源包,并且默认情况下不再更改PATH变量。这意味着在执行su之后,您的PATH可能不包含/sbin之类的目录,并且许多系统管理命令将失败。有几种解决方法:

  • 使用su -代替su。这将启动一个登录shell,它会强制更改PATH,但也会更改其他所有内容,包括工作目录。
  • 请改用sudosudo仍然使用更改的PATH变量运行命令。
    • 要获得具有正确PATH的常规root shell,可以使用sudo -s
    • 要以root身份获取登录shell(相当于su -),您可以使用sudo -i
  • /etc/login.defs中写入ALWAYS_SET_PATH yes以达到与旧行为相似的表现。在man手册su(1)中记录了这种方法,但却没有记录在login.defs(5)中。这种方法还可能导致在某些情况下出现无害的错误消息(请参阅905564
  • 将系统管理目录(/sbin/usr/sbin/usr/local/sbin)放在常规帐户的PATH中(有关此问题的帮助,请参阅EnvironmentVariables)。

英文原文地址:https://wiki.debian.org/NewInBuster

Leave a comment

Your email address will not be published. Required fields are marked *