如何设置全局变量即使对于 sudo 命令也可见?

如何设置全局变量即使对于 sudo 命令也可见?

我已经在 Ubuntu 16.04 上安装了 Maven,如下指示

我编辑/etc/environment并添加了路径行家/bin文件夹到$路径多变的。

在我的普通用户下,一切工作正常,但是当我尝试运行时,sudo mvn test它告诉我MVN是未知命令。重启没有帮助。

错误:

/bin/sh: 1: mvn: not found

我也有点困惑/bin/sh——我正在使用 bash。

那么我应该在哪里放置 Maven 二进制文件的路径才能使 sudo 命令看到它?谢谢。

答案1

当使用时,出于安全原因,sudo您的is 会被文件中类似这样的行覆盖:$PATH/etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

例子

即使这样的条目存在于/etc/environment

$ cat /etc/environment
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp

它似乎被拾取了:

$ sudo env | grep PATH
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/tmp

我们有一个脚本/tmp

$ ls -l /tmp/blah.bash
-rwxrwxr-x 1 vagrant vagrant 20 Aug  8 20:57 /tmp/blah.bash

该脚本whoami运行时将打印:

$ cat /tmp/blah.bash
#!/bin/bash

whoami

Sudo 不会让我们这么做:

$ sudo blah.bash
sudo: blah.bash: command not found

更改 sudo 的安全路径

但如果我编辑我的/etc/sudoers文件:

$ sudo visudo
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/tmp

现在它可以工作了:

$ sudo blah.bash
root

安全

仔细思考为什么要向sudo的安全路径添加其他目录。这样设置是有充分理由的。不要掉以轻心地添加额外的sudo命令路径!

添加额外的目录会让您和您的用户面临额外的风险,而您很多人都没有意识到这些风险,直到为时已晚。

相关内容