2011-08-12 110 views
2

我想从我的C++/Qt代码中以root用户的身份执行linux命令。 最终应该实现一个请求根传递的对话框,但是对于没有,我可以硬编码根密码。以root身份执行linux命令

这是我迄今所做的:

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)可以做些什么?

感谢

+1

我相信它不能仅在Qt中完成(以标准或至少标准化的方式)。 KDE有一个标准的方法。尝试搜索他们的文档。 –

+1

您需要使用桌面管理器的界面以root身份运行命令。例如,对于Ubuntu,您可以使用gksudo作为密码界面。 – blottedscience

回答

0

规则添加到sudoers文件的列表中一个特殊的用户,并且该用户为执行以下命令:

sudo *some command* 

您可以使用此system()QProcess

要了解如何将规则添加到sudoers文件的列表,请参阅sudoers manual

+0

有没有一个更优雅的解决方案,而无需创建另一个用户? – sivic

+0

@sivic不要创建另一个用户,而是将当前用户添加到sudoers列表中,并允许他们执行一些只有root才能执行的命令 –

1

,如果你作为一个普通用户,除非你是SUID运行,你可能不希望在你无法提升自己的权限整个应用。
它完成的方式是通过外部帮手;你想要的东西sudo不苏在Ubuntu的根帐户被锁定; gksudo或kdesudo取决于运行环境。其中一个应该预装在任何现代Linux发行版上,或者您可以在应用程序中部署一个副本。
当然,如果当前用户没有通过sudo运行的东西的权利,它是行不通的,但这是一种正常的安全措施,你不应该解决它。

0

如何继续使用您的代码,但为您的应用程序创建一个shell脚本并将其放在/ usr/bin?我做到了,每次都运行良好。

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

不仅仅是你只需要调用shell脚本文件。将其命名为myscript并打开你的bash。类型有:

myscript 

注意上面的gksudo命令。该命令提升了你的根。我不知道比这更简单的答案。也许它没有帮助,但我用这种方式。

相关问题