2011-08-12 9 views
2

내 C++/Qt 코드에서 root 사용자로 linux 명령을 실행하고 싶습니다. 궁극적으로 루트 패스를 요청하는 대화 상자가 구현되어야하지만 그렇지 않은 경우 루트 비밀번호를 하드 코딩 할 수 있습니다.linux 명령을 루트로 실행

QProcess p; 
p.start("dmidecode"); 
p.waitForFinished(-1); 

QString p_stdout = p.readAllStandardOutput(); 
QString p_stderr = p.readAllStandardError(); 

을 그리고 루트 권한을 요청하지 않는 명령을 위해 노력하고 있습니다 :

이것은 내가 지금까지 할 것입니다. 하지만 "zypper up"또는 "dmidecode"와 같은 명령을 구현하고 싶습니다. 루트 암호 없이는 실행할 수 없습니다.

아마도 void QProcess::setEnvironment (const QStringList & environment)으로 무엇인가 할 수 있습니까?

감사

+1

나는 Qt 혼자서 (표준 또는 적어도 표준적인 방식으로) 할 수 없다고 생각한다. KDE에는 표준 방식이 있습니다. 해당 설명서를 검색하십시오. –

+1

root로 명령을 실행하려면 데스크탑 관리자의 인터페이스를 사용해야합니다. 우분투의 경우 암호 인터페이스에 gksudo를 사용할 수 있습니다. – blottedscience

답변

0

은 특별한 사용자가 sudoers 목록에 규칙을 추가하고이 사용자로 명령을 실행 : 당신은 이것에 대한 system() 또는 QProcess을 사용할 수 있습니다

sudo *some command* 

.

당신이 SUID 아니라면 당신은 아마도에 대한 원하지 않는, 일반 사용자로 실행하면 당신은 당신의 권한을 상승 할 수 sudoers manual

+0

다른 사용자를 만들 필요없이보다 우아한 솔루션이 있습니까? – sivic

+0

@sivic 다른 사용자를 만들지 말고 sudoers 목록에 현재 사용자를 추가하고 root 만 실행할 수있는 명령을 실행할 수있게하십시오. –

1

참조의 sudoers 목록에 규칙을 추가하는 방법을 참조하십시오 전체 응용 프로그램.
그것이 완료된 방법은 외부 도우미를 통한 것입니다. 당신은 root 계정이 잠겨있는 우분투처럼 su가 아닌 무언가를 원한다. gksudo 또는 kdesudo 실행 환경에 따라. 그 중 하나는 현대 Linux 배포판에 사전 설치되어 있어야하며, 응용 프로그램과 함께 사본을 배포 할 수도 있습니다.
물론 현재 사용자가 sudo를 통해 물건을 실행할 권한이없는 경우에는 작동하지 않지만 이는 일반적인 보안 조치이므로 해결하지 않아야합니다.

0

어쨌든 코드를 계속 사용하면서 앱용 쉘 스크립트를 만들어/usr/bin에 저장하는 방법은 무엇입니까? 나는 그것을하고 잘 때마다 작동합니다.

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

단순히 쉘 스크립트 파일을 호출하면됩니다. 이름은 myscript이며 bash를여십시오. 이 유형 : gksudo 명령 위

myscript 

알 수 있습니다. 그 명령은 당신을 뿌리에 올리게합니다. 나는 이것보다 간단한 대답을 모른다. 어쩌면 도움이되지 않을 수도 있지만이 방법을 사용합니다.

관련 문제