6

这是关于我在玩“输入命令并记住在 sudo 前面加上你的手指会被打耳光”的游戏时感到压力。

我想知道是否有可能以某种方式配置我的 Linux 系统或 shell,以便当我忘记输入例如“sudo apt-get install emacs”时,而不是仅仅告诉我我做错了什么,gksudo 会启动,允许我承认我的凭据并继续前进。就像 UAC 在 Windows 上所做的一样。

谷歌搜索还没有帮助我..

那么这可能吗?我错过了什么?还是我要一个方圆?

编辑 2010 年 7 月 25 日:感谢大家的关注。不幸的是,Daenyth 和 bmargulies 的答案和解释是我所期待/担心的,因为在提交这个问题之前我不可能通过谷歌搜索解决方案。我希望有一天会有一些好人为此提供有效的解决方案。

BR,克里斯蒂安

4

6 回答 6

3

Linux 不允许这样做。与 Windows 不同,在 Windows 中任何程序都可以启动一个对话框,并且 UAC 在内核中,Linux 程序不一定支持 GUI,从这个意义上说,sudo 不在内核中。程序不能调用提升权限(除非它以特权启动并故意设置为关闭)。sudo 是具有 setuid 权限的单独可执行文件,用于检查权限。如果它喜欢它所看到的,它会派生 shell 来执行命令行。这不能倒过来。

正如其他帖子中所建议的那样,您可能会想出一些“shell 游戏”来安排为您运行 sudo 以获得一些枚举的命令列表,但这就是您将得到的全部。

于 2010-07-25T19:27:50.550 回答
1

你可以使用 preexec 钩子函数做你想做的事,类似于 command-not-found 包。

于 2010-07-25T00:53:57.510 回答
0

我不认为这真的以一般方式起作用(自动决定哪个应用程序需要管理员权限)。但是,您可以为每个应用程序创建这样的别名:

alias alias apt-get='gksudo apt-get'

如果您现在输入apt-get install firefoxgnome 会要求输入管理员密码。您可以将命令存储在~./bashrc

于 2010-07-20T17:45:42.510 回答
0

您可以使用如下的 shell 脚本:

#!/bin/bash
$@
if [ $? -ne 0 ]; then
    sudo $@    # or "gksudo $@"
fi

如果命令以非零返回码返回(即如果失败),这将运行带有 sudo 前缀的参数中给出的命令。例如,在“SCRIPT_NAME apt-get install emacs”中使用它。您可以将其保存在 $PATH 中的某个位置并将其设置为这样的别名(如果您将其保存为 do_sudo):

alias apt-get='do_sudo apt-get'

编辑:这不适用于root 用户有效但会给他们较少特权的synaptic程序。但是,如果在没有 root 权限的情况下调用应用程序失败(就像这样做),这可以正常工作。apt-get

于 2010-07-25T00:06:58.950 回答
0

鉴于当前的 linux 软件堆栈,没有办法做到这一点。此外,MS 对这种行为拥有专利——present a user interface identifying an account having a right to permit a task in response to the task being prohibited based on a user's current account not having that right.

于 2010-07-25T19:41:18.693 回答
0

如果您希望始终以 root 身份运行命令但可能已经root,您可以通过在其周围包装一个小 bash 脚本来解决此问题:

#!/bin/bash
if [ $EUID = 0 ]; then
    "$@"
else
    gksudo "$@"
fi

如果您将其称为类似alwaysroot.bash并将其放置在 PATH 上的正确位置,那么您可以像这样调用您的其他程序:

alwaysroot.bash otherprogram -arguments...

它甚至可以正确处理带有空格的参数。

于 2010-07-25T19:53:55.923 回答