如何设置sudo命令的路径


37

如果我发出

sudo my-command

Linux如何寻找它my-command

my-command是我的道路。我可以毫无问题地调用它。但是,当我使用调用它时sudo,我会得到command not found。有趣的是,以前从未经历过。如何克服?

编辑:“可能重复”的选择的答案是错的,那么,至少不会到如此地步。来自terdon的答案是正确的。

Answers:


48

通常由中的secure_path选项设置/etc/sudoers。来自man sudoers

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment 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.

要运行非默认命令$PATH,您可以

  1. 使用完整路径:sudo ~/bin/my-command; 要么

  2. 将包含命令的目录添加到secure_path。运行sudo visudo并编辑安全路径行:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    保存文件,下次运行时sudo,该目录~/bin将位于其中$PATH


2
或者,如果这不是生产机器,并且我们不在乎,则将整个生产线注释掉。然后它将使用用户的PATH。它说它不是默认设置,但这可能并不总是正确的……
Nagev

2

这是我用于解决方法的方法:

sudo cp $(which my-command) /usr/bin
...

which命令在非root用户的子shell中执行,因此它能够找到my-command,然后sudo将可执行文件复制到root用户可以访问的路径。安全性不是很好,但是我可以运行在命令运行后立即销毁的docker映像。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.