2011-08-12 24 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権限を要求しないコマンドのために働いています。しかし、私はrootパスワードなしでは実行できない "zypper up"や "dmidecode"のようなコマンドを実装したい。

void QProcess::setEnvironment (const QStringList & environment)でおそらく何かできますか?

おかげ

+1

私はそれがQt単独で(標準的な方法または少なくとも標準的な方法で)行えないと信じています。しかし、KDEには標準的な方法があります。ドキュメントを検索してみてください。 –

+1

rootとしてコマンドを実行するには、デスクトップマネージャのインターフェースを使用する必要があります。 ubuntuでは、例えばパスワードインタフェースとしてgksudoを使うことができます。 – blottedscience

答えて

0

は、特別なユーザのためのsudoersファイルのリストにルールを追加し、このユーザとしてコマンドを実行します。あなたはこのためにsystem()またはQProcessを使用することができます

sudo *some command* 

あなたはSUIDない限り、あなたは、おそらくのためにたくない、通常のユーザーとして実行する場合は、あなたの権限を昇格することはできませんsudoers manual

+0

別のユーザーを作成する必要がなく、より洗練されたソリューションがありますか? – sivic

+0

@sivic別のユーザーを作成せず、現在のユーザーをsudoersのリストに追加して、rootのみが実行できるコマンドを実行できるようにします –

1

参照、sudoersファイルのリストにルールを追加する方法を確認するには全体のアプリケーション。
これは外部ヘルパーによるものです。あなたはrootアカウントがロックされているように、Ubuntuのようにsuではないsudoを実行するものが必要です。 gksudoまたはkdesudoを実行環境に応じて選択します。そのうちの1つは現代のLinuxディストリビューションにプレインストールされているか、アプリケーションと共にコピーを配備する必要があります。
もちろん、現在のユーザーにsudoでの実行権限がない場合は正常に動作しませんが、これは通常のセキュリティ手段であり、回避するべきではありません。

0

とにかくあなたのコードを使い続けるのですが、あなたのアプリケーション用のシェルスクリプトを作成し、それを/ usr/binに入れますか?私はそれをし、毎回うまく動作します。

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

単純にシェルスクリプトファイルを呼び出すだけで済みます。それをmyscriptと名付け、あなたのbashを開きます。そこタイプ:gksudoコマンド上記

myscript 

注意してください。そのコマンドは、あなたをrootに昇格させます。私はこれより簡単な答えを知らない。たぶん助けにならないかもしれませんが、私はこのように使います。

関連する問題