Russian Qt Forum
Ноябрь 22, 2024, 18:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск SUDO из-под обычного пользователя  (Прочитано 4579 раз)
Alex_ryabis
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Февраль 15, 2023, 19:37 »

Всех приветствую!
Приложение на Qt 5.11, ОС AstraLinux.
Необходимо выполнить некоторую консольную команду от имени суперпользователя,
при этом само приложение запущено не из-под "root". Подразумевается, что необходимо
по-ходу выполнения программы вводить пароль суперпользователя.
Вот пример моего кода.
Код:
QProcess *proc = new QProcess(this);
proc->start("/bin/bash", QStringList() << "-c" << "sudo kate");
proc->waitForStarted(1000);
Он, как понятно, не срабатывает.

Во-первых. Как сделать возможность запуска SUDO-команды из-под обычного пользователя?
Во-вторых. Как организовать ввод пароля через стандартный GUI-диалог операционной системы? (gksu не работает)
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Февраль 15, 2023, 21:58 »

Во-первых, "обычный пользователь" должен быть включен в группу sudo.
Вот работающий пример (password - пароль пользователя):

Код
C++ (Qt)
void CLanConfig::chmod() {
   QStringList arguments;
   arguments << "-c" << "echo " + password + " | sudo -S chmod o+r " + path;
   process.start("/bin/sh", arguments);
   process.waitForFinished();
}
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Alex_ryabis
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #2 : Февраль 16, 2023, 21:26 »

Спасибо за помощь, но это в Астре не помогло.
Нашел документацию, там вот что написано:
Цитировать
5.11. Приложения и права администратора
Большинство утилит настройки требуют привилегий суперпользователя. Есть ряд
способов предоставления привилегий: от sudo и членства в группах до PolicyKit. Решение
этой задачи возможно с использованием программы fly-su. Программа, предполагающая
действия администратора, обязательно должна информировать пользователя о невозможности выполнения каких-либо функций без соответствующей авторизации и, по возможности,
давать пользователю способ выполнить такую авторизацию, например, с помощью рекомендуемой fly-su.
Так что можно не включать пользователя в группу sudo. По крайней мере в ОС Astra Linux Common Edition.

В итоге, код ниже позволяет вывести окно ввода пароля суперпользователя для выполнения команды с правами администратора.
Код:
    QProcess *proc = new QProcess(this);
    proc->start("/bin/bash", QStringList() << "-c" << "fly-su kate");
    proc->waitForStarted(1000);
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Февраль 16, 2023, 23:31 »

Так что можно не включать пользователя в группу sudo. По крайней мере в ОС Astra Linux Common Edition.

уверен ? покажи id этого пользователя
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 23.