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
) взаимодействовать через интерфейс с пользователем.
Как вы обнаружили, вы можете использовать опцию -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, увидит ваш пароль. Но тогда любой хакер в вашей системе будет делать гораздо больше, чем просто.
Я только что нашел несколько ответов здесь .
Суть этого:
На данный момент, обходной путь должен найти, где 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
blockquote>, и когда они это делают, они отключают прямую высоту, потому что (если она работает правильно) она вам больше не нужна. Программа просто запрашивает пароль, когда ей нужно выполнить привилегированную операцию. Еще неизвестно, как это будет работать в сценарии.
Не только 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
Вы попробовали pkexec
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit