Попытка запустить скрипт оболочки из Qt с правами sudo - PullRequest
0 голосов
/ 01 мая 2020

командная строка (работает нормально)

$ sudo chPermissions.sh

пытается сделать это из программы Qt, используя QProcess и безуспешно пытается выполнить следующее

код:

QString program = "/bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 0 (скрипт работал, но без прав sudo и не работал!)

код:

QString program = "sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 1

код:

QString program = "/usr/bin/sudo /bin/sh /usr/bin/chPermissions.sh";
m_process->start(program);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 1

код:

QString program = "/bin/sh";
QStringList arguments;
arguments <<  "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 0 (скрипт запущен! Без прав sudo)

код:

QString program = "/bin/sh";
QStringList arguments;
arguments << sudo <<  "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 127 (команда не найдена)

код:

QString program = "/bin/sh";
QStringList arguments;
arguments << /usr/bin/sudo <<  "/usr/bin/chPermissions.sh";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 2 (неправильное использование встроенных функций оболочки)

код:

QString program = "/bin/bash";
QStringList arguments;
arguments <<  "-c" << "\"/usr/bin/sudo /usr/bin/chPermissions.sh"\";
m_process->start(program, arguments);
m_process->waitForFinished();
qDebug() << m_process->exitCode();

результат: 127

код:

QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();

результат: 0 (скрипт запущен!)

код:

QString shellCommandLine = "sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();

результат: 1

код:

QString shellCommandLine = "/usr/bin/sudo /usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();

результат: 1

код:

QString shellCommandLine = "/usr/bin/chPermissions.sh";
QStringList arguments;
arguments << "-c" << shellCommandLine;
m_process->start("/bin/sh", arguments);
m_process->waitForFinished();
qDebug() << "Exit Code: " << m_process->exitCode();

результат: 0 (скрипт бежал без прав sudo)

Кто-нибудь сможет раскрыть мне секрет, как это сделать? (или избавь меня от страданий, если это невозможно)

TIA

Andy

1 Ответ

0 голосов
/ 03 мая 2020

Не решен как таковой.

Я обошел это по

  1. , используя один из вариантов, который фактически запускает скрипт (без прав su), и
  2. предоставление пользователю sudoers разрешения на запуск команды в сценарии без запроса пароля.

надеюсь, что это имеет смысл.

не радует, но это работает.

...