Я сделал скрипт bash, который использует kdialog исключительно для взаимодействия с пользователем. Он запускается из файла ".desktop", поэтому пользователь никогда не видит терминал. Он выглядит на 100% как приложение с графическим интерфейсом (хотя это всего лишь скрипт bash). Он работает только в KDE (Kubuntu 12.04).
Моя единственная проблема - безопасно и удобно обрабатывать ввод пароля . Я не могу найти удовлетворительное решение.
Сценарий был разработан для запуска в качестве обычного пользователя и запроса пароля, когда команда sudo требуется в первый раз. Таким образом, большинство команд, не требующих прав sudo, запускаются как обычный пользователь. Что происходит (когда скрипт запускается из терминала), так это то, что у пользователя запрашивается пароль один раз, а тайм-аут sudo по умолчанию позволяет скрипту завершиться, включая любые дополнительные команды sudo, без повторного запроса пользователя. Вот как я хочу, чтобы это работало при запуске за GUI тоже.
Основная проблема заключается в том, что использование kdesudo
для запуска моего сценария, который является стандартным способом графического интерфейса пользователя, означает, что весь сценарий выполняется пользователем root. Таким образом, владельцы файлов назначаются пользователю root, на которые я не могу положиться ~/
в путях, и многие другие вещи не идеальны. Выполнение всего скрипта от имени пользователя root - это просто очень неудовлетворительное решение, и я считаю, что это плохая практика.
Я ценю любые идеи, позволяющие пользователю вводить пароль sudo только один раз через графический интерфейс, при этом не запуская весь сценарий от имени пользователя root. Спасибо.
sudo -s
(в нижнем регистреs
), а неsudo -S
(в верхнем регистреs
).Это основано на превосходном ответе Эрика Карвалью. Я публикую это, чтобы уточнить проблему, с которой я столкнулся. В частности, при использовании этого обычного тайм-аута sudo (например, 15 минут) теряется. Мой скрипт, содержащий более 50 команд sudo, теперь запрашивает пароль пользователя более 50 раз!
Вот полный рабочий пример всех частей решения. Он состоит из сценария bash, сценария "myaskpass", как предложил Эрик, и файла ".desktop". Все это должно быть на 100% графическим интерфейсом (никакого взаимодействия с терминалом вообще), поэтому файл .desktop необходим (afaik).
И сам тестовый скрипт. Этот пользователь дважды запросит ваш пароль при использовании этого решения. (Обычно он запрашивает только один раз из-за тайм-аута sudo по умолчанию.)
источник
sudo -A
повторно запрашивает пароль. Я постараюсь выяснить это.Следующий скрипт работает через командную строку, файл рабочего стола или двойной щелчок, запрашивает пароль только один раз, а шаблон команды
sudo -Sp '' <your command here> <<<${sudo_password}
может использоваться несколько раз в любом месте файла:источник