Как перезапустить Linux из программы C++?

У меня есть Qt 4 GUI, где у меня должна быть опция в выпадающем меню, которое позволяет пользователю принимать решение перезапустить компьютер. Я понимаю, что это могло бы казаться redunant со способностью перезапустить компьютер другими способами, но выбор должен остаться там. Я попытался использовать систему () для вызова следующего:

  1. suid-корневой сценарий оболочки
  2. non-suid сценарий оболочки
  3. suid-корневая программа в двоичном представлении

и все они правое дело

reboot: must be superuser
быть распечатанным. Используя систему () для вызова перезагрузки непосредственно делает то же самое. Я особенно не привязан к системе использования (), чтобы сделать это, но она походила на самый прямой выбор.

Как я могу перезагрузить систему от GUI?

13
задан Dave K 20 April 2010 в 21:25
поделиться

4 ответа

В двоичном формате попробуйте вызвать

setuid (0);

перед вызовом system ().

0
ответ дан 1 December 2019 в 22:38
поделиться

Использование сценариев командной оболочки просто опасно, как уже упоминалось (вот почему это не сработало).

Я подозреваю, что suid-ing для двоичного файла не работает, потому что система порождает свой подпроцесс с фактическим uid пользователя, а не suid, опять же по соображениям безопасности (это позволит вам заменить любой двоичный файл на тот, который вызывается и запускается это как root).

Вы можете поместить копию перезагрузки в защищенное место, чтобы только пользователи, которым вы хотите иметь права, могли ее выполнить, а затем suid-root THAT.

Поочередно дайте им привилегию sudoer выполнить ТОЛЬКО нужную вам команду и выполнить что-то вроде «ksh -c 'sudo reboot'»

1
ответ дан 1 December 2019 в 22:38
поделиться

Вы пробовали запустить сценарий оболочки с помощью gksudo? Что-то вроде

gksudo shutdown -r

Если повезет, это должно вызвать модальный диалог для получения учетных данных пользователя.

4
ответ дан 1 December 2019 в 22:38
поделиться

как бы вы перезагрузили систему из командной строки в вашей системе?

в основном делают

system( <however you wouuld do it from the command line> );
0
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: