Автоматически вызывая gksudo как UAC - PullRequest
6 голосов
/ 06 июля 2010

Это из-за того, что я испытываю стресс от игры в игру "набери команду и не забудь поставить sudo, иначе твои пальцы будут шлепать".

Мне интересно, можно ли как-нибудь настроить мою систему Linux или оболочку так, чтобы, когда я забуду напечатать, например, например, "sudo apt-get install emacs", вместо того, чтобы просто сказать мне, что я сделал что-то не так, gksudo будет запущен, что позволит мне подтвердить свои учетные данные и приступить к работе. Точно так же, как UAC на Windows.

Поиск в Google мне еще не помог ..

Так возможно ли это? Я что-то пропустил? Или я прошу квадратный круг?

Edit 2010 25 июля: Спасибо всем за ваш интерес. К сожалению, ответы и объяснения Daenyth и bmargulies - это то, чего я ожидал / боялся, так как я не мог найти решение Google перед отправкой этого вопроса. Я надеюсь, что когда-нибудь хороший человек когда-нибудь предоставит эффективное решение для этого.

BR, Christian

Ответы [ 6 ]

3 голосов
/ 25 июля 2010

Linux не допускает этого. В отличие от Windows, где любая программа может запустить диалоговое окно, а UAC находится в ядре, программы Linux не обязательно поддерживают GUI, и sudo в этом смысле не находится в ядре. Программа не может выполнить вызов для повышения привилегий (если только она не была запущена с привилегиями для начала и намеренно установлена ​​setuid'd down). sudo - это отдельный исполняемый файл с привилегиями setuid, который проверяет наличие разрешений. Если ему нравится то, что он видит, он запускает командную строку для оболочки. Это нельзя вывернуть наизнанку.

Как предлагается в других постах, вы можете придумать какую-нибудь «игру-оболочку», чтобы организовать для вас sudo для перечисленного списка команд, но это все, что вы получите.

1 голос
/ 25 июля 2010

Вы можете делать то, что хотите, с помощью функции перехвата preexec, аналогично пакету command-not-found.

0 голосов
/ 25 июля 2010

В случае, если вы хотите всегда запускать команду от имени пользователя root, но уже можете быть root, вы можете решить эту проблему, обернув вокруг нее небольшой скрипт bash:

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

Если вы называете это что-то вроде alwaysroot.bash и помещаете его в нужное место в вашей переменной PATH, тогда вы можете вызывать другую программу следующим образом:

alwaysroot.bash otherprogram -arguments...

Она даже правильно обрабатывает аргументы с пробелами.

0 голосов
/ 25 июля 2010

Нет способа сделать это, учитывая текущий программный стек 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.

0 голосов
/ 25 июля 2010

Вы можете использовать скрипт оболочки следующим образом:

#!/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'

Edit: Это не работает для таких программ, как synaptic, которые do работают для пользователей без полномочий root, но дают им меньше привилегий.Однако, если приложение завершается неудачно при вызове без прав root (как это делает apt-get), это прекрасно работает.

0 голосов
/ 20 июля 2010

Я не думаю, что это действительно работает в общем смысле (автоматически решая, какое приложение нуждается в правах администратора).Однако вы можете создать псевдонимы, подобные этим, для каждого приложения:

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

Если вы сейчас введете apt-get install firefox, гном попросит пароль администратора.Вы можете сохранить команды в ~./bashrc

...