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