Как мне запустить графический sudo в bash на kubuntu 18.04, когда kdesudo больше нет?

TL;DR: что нового правильного способа сделать графический sudo из сценария оболочки?

верчение:

Я только что обновился с kubuntu 16.04 до 18.04, и я делаю обычную сортировку.

kdesudo ушел в 18.04 (не поддерживается).

Я часто использую его в скриптах bash с графическим интерфейсом ввода / вывода.

Какой-то пост сказал использовать kdesu - что кажется странным. Кажется, я вспоминаю, что это мешает эффективному пользователю или что-то в этом роде.

Это не установлено в моем пути.

Я нашел это в

bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu -> 
/usr/lib/kde4/libexec/kdesu-distrib/kdesu

который все еще говорит kde4.

Я старался sudo -A ls

и сказал

bigbird@sananda:~$ sudo -A ls
sudo: no askpass program specified, try setting SUDO_ASKPASS

Я пошел в несколько кругов, глядя на ksshaskpass а также ssh-askpass, но оба говорят, что они не предназначены для прямого вызова.

Я ничего не делаю с ssh,

Мне это нужно для скриптов bash, которые делают почти все как обычный пользователь, а затем запускают одну или две команды от имени пользователя root. Эти сценарии часто запускаются из значков на рабочем столе, где нет открытого окна терминала (а мне оно не нужно или не нужно). Они часто используют yad (лайк zenity или же kdialog) для взаимодействия с пользователем.

4 ответа

Решение

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

Вы можете написать такой инструмент в любом случае, если он передает пароль обратно в sudo на стандартный вывод. Я использую простое решение, которое кто-то предложил мне давным-давно, которое использует kdialog, и, как и все простые решения, с тех пор оно остается моим выбором.

Так что создайте себе простой скрипт kdialog, такой как этот

    #!/bin/bash
    kdialog --password "Password required to proceed"

Теперь вы используете это с sudo, как это

    #!/bin/bash
    export SUDO_ASKPASS=<path to your kdialog script>
    sudo -A foo

Конечно, вы можете использовать любой язык, который хотите, для вашего провайдера графического пароля, если у вас нет kde

РЕДАКТИРОВАТЬ: Решение обойти sudo passwd_tries

Так что вы можете просто запросить пароль только один раз (как вы хотите), вы можете записать пароль в переменную скрипта и передать эту переменную непосредственно в команду sudo с помощью ключа -S.

Это имеет то преимущество, что игнорирует правило sudo passwd_tries и все еще требует интерактивного ввода пароля, поэтому пароль не сохраняется в скрипте.

PASSWD=$(kdialog --password "sudo password required")
echo $PASSWD | sudo -S foo

Вы также можете сделать это прямо в строке, если вам не нужно несколько команд sudo в скрипте, как это

echo $(kdialog --password "sudo password required") | sudo -S foo

И, конечно, вы можете использовать свой собственный скрипт kdialog, который мы обсуждали ранее, вместо использования kdialog здесь, если вы хотите использовать стандартную подсказку kdialog во всех ваших скриптах.

Проблема в обход passwd_tries sudo из моего POV заключается в том, что если вы неправильно введете пароль, ваш скрипт продолжит обрабатывать любые команды после команды sudo, поэтому, если команда sudo с повышенными привилегиями была критической для успеха скрипта, у вас есть проблемы.

Предостережение заключается в том, что пароль от kdialog (или альтернативы, такой как zenity) написан на stdout, что я должен был упомянуть ранее, поэтому любой, кто захватил stdout PID, увидит ваш пароль. Но тогда любой хакер в вашей системе будет делать гораздо больше, чем просто это.

Ты пытался pkexec

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit

Не только кдесудо, но и gksu также не рекомендуется. Эти изменения, по крайней мере, слегка раздражают. Похоже, что подход, который мы должны использовать сейчас, заключается в использовании admin:// префикс, например, если вы использовали kdesudo gedit /etc/default/grub теперь вы бы вместо gedit admin:///etc/default/grub Это определенно потребует некоторого привыкания, если я выберу 16.04 для "новой и улучшенной" версии.

Другое возможное решение - просто запустить скрипт в терминале для начала.

Источник: https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html

Я только нашел некоторые ответы здесь.

Суть этого заключается в:

На данный момент, обходной путь должен найти где kdesu установлен в вашей системе

что вы можете сделать с

ls -l /etc/alternatives/kdesu

а затем добавить псевдоним для kdesudo в $HOME/.bashrc или, если вы используете его, чтобы $HOME/.bash_aliases,

Псевдоним

## Resurect kdesudo - this will probably fail eventually
alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'

убедившись, что скорректировать путь к kdesu на тот, который вы нашли в шаге выше.

Это не будет работать для некоторых программ под KDE, потому что

Разработчики KDE работают над маршрутом polkit, чтобы разрешить временные повышенные привилегии для других приложений, как они уже сделали для Kate. - GreyGeek

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

Другие вопросы по тегам