我将首先尝试解释我的情况。我目前在 ESXi 主机上运行 6 个虚拟化 Debian 服务器。虚拟服务器安装了 Debian Linux 6(Lenny)。
最近我将服务器更新到了 Debian Wheezy
root@ares> lsb_release -a /home/vincent
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 7.1 (wheezy)
Release: 7.1
Codename: wheezy
我注意到,自从这次升级以来,“sudo”命令出现了奇怪的行为。实际上,它似乎根本没有效果。我检查了 /etc/visudo 文件,一切似乎都正常。Sudo 还要求我输入密码,但似乎没有以 root 身份运行。一个例子是“ifconfig”命令:
user@ares> ifconfig
zsh: command not found: ifconfig
[127] user@ares> sudo ifconfig
sudo: ifconfig: command not found
[1] user@ares> sudo su
root@ares>ifconfig
output shows
谁能帮我一下?
答案1
您PATH
的普通用户和根用户之间可能有所不同,可能缺少诸如/sbin
和/或/usr/sbin
管理实用程序ifconfig
通常所在的目录。
答案2
迈克尔的回答是正确的,但我想补充一点评论:
如果您使用 LDAP 后端,只要在 LDAP 服务器上配置了该指令,就不需要向非特权用户添加管理命令的路径(/sbin
、、 ):/usr/sbin
/usr/local/sbin
secure_path
/etc/sudoers
$ ip a s
-rbash: ip: command not found
$ sudo ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
link/ether 00:0c:29:57:80:d9 brd ff:ff:ff:ff:ff:ff
inet 172.22.197.38/24 brd 172.22.197.255 scope global eth0
$ echo $PATH
/home/dawud/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin
$ sudo -l | awk '$0~/secure_path/ {print $1}'
secure_path=/bin\:/usr/bin\:/sbin\:/usr/sbin\:/usr/local/bin\:/usr/local/sbin
请查看man 5 sudoers
更多参考secure_path
(同样感兴趣的是exempt_group
和env_reset
)。
secure_path Path used for every command run from sudo. If you don’t trust the people running sudo to have a sane PATH environment variable you may want to use this. Another use is if you want to
have the “root path” be separate from the “user path”. Users in the group specified by the exempt_group option are not affected by secure_path. This option is not set by default.