2011-08-12 105 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命令。該命令提升了你的根。我不知道比這更簡單的答案。也許它沒有幫助,但我用這種方式。

相關問題