Выполнение команды Linux от имени пользователя root в Qt - PullRequest
2 голосов
/ 12 августа 2011

Я хочу выполнить команду linux от имени пользователя root из моего кода C ++ / Qt. В конечном итоге должен быть реализован диалог, запрашивающий пароль root, но я не могу жестко закодировать пароль root.

Это то, что я сделал до сих пор:

QProcess p;
p.start( "dmidecode" );
p.waitForFinished(-1);

QString p_stdout = p.readAllStandardOutput();
QString p_stderr = p.readAllStandardError();

И это работает для команд, которые не запрашивают привилегии root. Но я хочу реализовать такие команды, как «zypper up» или «dmidecode», которые не могу выполнить без пароля root.

Возможно, что-то можно сделать с void QProcess::setEnvironment ( const QStringList & environment )?

Спасибо

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Вы не можете повысить свои привилегии, если вы работаете как обычный пользователь, если вы не используете suid, что, вероятно, вам не нужно для всего приложения.
Это делается с помощью внешнего помощника;вы хотите что-то, что не может сделать sudo, поскольку в Ubuntu учетная запись root заблокирована;гксудо или кдесудо в зависимости от запущенной среды.Один из них должен быть предварительно установлен в любом современном дистрибутиве Linux, или вы можете развернуть копию с вашим приложением.
Конечно, это не будет работать, если текущий пользователь не имеет прав для запуска чего-либо через sudo, но этонормальная мера безопасности, и вы не должны обходить ее.

0 голосов
/ 13 ноября 2013

Как насчет продолжать использовать ваш код в любом случае, но сделать сценарий оболочки для вашего приложения и поместить его в / usr / bin?Я делал это и каждый раз работал хорошо.

#it is the shell script code
#!/bin/bash
gksudo /usr/lib/your_qt_app

Чем просто нужно вызвать файл сценария оболочки.Назовите его myscript и откройте ваш bash.Введите здесь:

myscript

Обратите внимание на приведенную выше команду gksudo .Эта команда повышает вас как root.Я не знаю более простой ответ, чем этот.Возможно, это не поможет, но я использую этот способ.

0 голосов
/ 12 августа 2011

Добавьте правило в список sudoers для специального пользователя и выполните команду от имени этого пользователя как:

sudo *some command*

Для этого вы можете использовать system () или QProcess .

Чтобы узнать, как добавить правило в список sudoers, см. руководство sudoers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...