![如何设置全局变量即使对于 sudo 命令也可见?](https://linux22.com/image/138352/%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F%E5%8D%B3%E4%BD%BF%E5%AF%B9%E4%BA%8E%20sudo%20%E5%91%BD%E4%BB%A4%E4%B9%9F%E5%8F%AF%E8%A7%81%EF%BC%9F.png)
我已经在 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
命令路径!
添加额外的目录会让您和您的用户面临额外的风险,而您很多人都没有意识到这些风险,直到为时已晚。