Как я выполняю графический sudo в ударе на kubuntu 18.04 теперь, когда kdesudo не стало?

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

Верчение:

Я просто обновил от kubuntu 16.04 до 18,04, и я делаю нормальную медицинскую сортировку.

kdesudo не стал в 18,04 (не сохраняются).

Я использую его много в сценариях удара с GUI i/o.

В некотором сообщении было сказано использование 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.

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

6
задан 20 August 2018 в 01:00

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

Конечно, вы можете использовать любой язык, который хотите для вашего провайдера паролей GUI, если у вас нет 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 во всех ваших сценариях.

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

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

5
ответ дан 23 November 2019 в 07:53

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

Суть этого:

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

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

ls -l /etc/alternatives/kdesu
[ 1112], а затем добавьте псевдоним для 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

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

0
ответ дан 23 November 2019 в 07:53

Не только kdesudo, но и 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

1
ответ дан 23 November 2019 в 07:53

Вы попробовали pkexec

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
1
ответ дан 23 November 2019 в 07:53

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

Похожие вопросы: