def*_*sez 6 command-line sudo 18.04
在 Ubuntu 18.04 中使用命令行安装工具和其他工具与 sudo 效果很好。示例:sudo apt install ...完美运行。通过命令行作为 sudo 运行工具和程序根本不起作用。与普通用户运行相同的程序和工具效果很好。示例:start gtkwave作为普通用户,弹出 gtkwave GUI。以 sudo 启动 gtkwave,要求输入密码,然后以: 结尾
sudo: gtkwave: command not found。
我必须说,在命令行上作为 sudo 调用的一些工具可以完美地工作,例如,我可以以普通用户和 sudo 的身份从命令行启动 Atom。
这是否可能是因为不作为 sudo 运行的工具/程序没有安装在常见的 Linux 文件夹中,例如/bin或 ,/usr/bin但作为程序安装在下面/opt(这些被添加到路径中并设置了必要的环境)?
有人知道为什么会发生这种情况吗?
默认情况下,使用文件中定义的sudo程序来搜索程序。从:secure_path/etc/sudoersman sudoers
\n\n\nRun Code Online (Sandbox Code Playgroud)\nsecure_path Path used for every command run from sudo. If you don\'t\n trust the people running sudo to have a sane PATH environ\xe2\x80\x90\n ment variable you may want to use this. Another use is if\n you want to have the \xe2\x80\x9croot path\xe2\x80\x9d be separate from the \xe2\x80\x9cuser\n path\xe2\x80\x9d. Users in the group specified by the exempt_group\n option are not affected by secure_path. This option is not\n set by default.\n
请注意,尽管有最后一行,默认的 Ubuntu/etc/sudoers 确实设置了它:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"\nRun Code Online (Sandbox Code Playgroud)\n\n因此,调用用户PATH和 root 都PATH不会影响使用sudo.
如果您确实希望程序位于诸如/opt可以通过 执行的位置sudo,您将需要
使用完整路径,例如sudo /opt/somepath/bin/prog
修改 sudoerssecure_path以包含位置 - 如果您决定这样做,请使用它sudo visudo来捕获任何语法错误(否则您将面临完全被锁定的风险sudo)。
但是,您可能应该阅读为什么用户永远不应该使用普通 sudo 来启动图形应用程序?在继续之前。
\n