2010-07-06 4 views
6

Это о том, что меня напрягает, играя в игру «введите команду и не забудьте добавить sudo, или ваши пальцы будут ударяться».Автоматически вызывать gksudo как UAC

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

Googling не помог мне еще ..

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

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

BR, Christian

+0

Некоторые программы возвращают 'errno' в качестве кода выхода, в этом случае любая программа, которая выходит с' EACCESS', будет кандидатом. В противном случае вы можете заменить glibc версией, которая проверяет результаты системных вызовов для 'EACCESS' и предлагает возвышение. –

+0

Для записи Windows не имеет функций, которые вы запрашивали для Linux. В Windows все выйдет с ERROR_ACCESS_DENIED и не будет автоматически перезагружаться - это просто в Windows, есть соглашения, которые приложения должны перезапускать, если у них нет правильных разрешений. aptitude на Debian тоже делает это, например. Кроме того, в двоичных файлах Windows есть флаг, который запрашивает возвышение при запуске оболочки, но опять же, что не распространяется на ваш случай с командной строкой. –

ответ

0

Нет никакого способа сделать это с учетом текущего стека программного обеспечения linux. Кроме того, MS has a patent on this behavior - 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

IANAL, но кажется, что если всплывающее окно не предварительно выбирает учетную запись для 'su', то это не распространяется на патент. Патент также исключает счета с «неограниченными правами», которые, как представляется, относятся к «root». –

+0

Это, вероятно, неверно из-за предшествующего уровня техники, но это стоит знать. – Daenyth

0

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

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

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

+0

Прошу прощения, но это не соответствовало моим потребностям. То, что я ищу, - это кнопка «Linux решает, когда спросить» где-нибудь, которая включит или выключит ее для любого приложения. Спасибо за предложение. –

0

Вы можете использовать скрипт так:

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

Это будет работать команды, заданные в аргументах с префиксом SUDO, если команда вернулась с не- нулевой код возврата (т.е. если он не прошел). Используйте его, например, в «SCRIPT_NAME apt-get install emacs». Вы можете сохранить его где-нибудь в $ PATH и установить его в качестве псевдонима, как это (если вы сохранили его как do_sudo):

alias apt-get='do_sudo apt-get' 

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

+1

Это очень хрупок и, вероятно, сломается или сделает не то, что нужно – Daenyth

1

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

3

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

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

+0

Вы не нуждаетесь в каких-либо специальных правах на 'exec gksudo'. –

+1

Правда. Программа может перезапустить себя через fork/exec gksudo. Было бы несколько интересных проблем безопасности при написании состояния, которое нужно было бы прочитать в процессе возобновления. – bmargulies

0

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

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

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

alwaysroot.bash otherprogram -arguments... 

Он даже ручки argumen ts с пробелами.

Смежные вопросы