7 Stimmen

In Linux, wie füge ich einen Build-Schritt in Qt Creator hinzu, der su-Privilegien verwendet, ohne bei Builds falsche Passwortversuche zu erhalten?

Mein Ziel ist es, erfolgreich einen Ordner mit dem Verzeichnis /opt/ zu verknüpfen, was mit sudo ausgeführt werden muss.

Ich habe Folgendes versucht:

system(sudo ln -s $$OUT_PWD/xampp /opt/lampp):message("Sie sollten LAMPP manuell verknüpfen")

Aber beim Erstellen von qt-creator wird nicht nach dem sudo-Passwort gefragt, daher konnte ich den Ordner nicht verknüpfen. Ich habe den Fehler "falsche Passwortversuche..." im Compiler-Ausgabe erhalten. Dann habe ich diese Schritte mit den Build-Schritten versucht:

make
sudo make install

um zu sehen, ob es mich dort auffordern würde, aber es ist am Schritt make install mit dem gleichen Fehler fehlgeschlagen, der im Detail folgendermaßen aussieht:

00:31:20: Starte: "/usr/bin/sudo" make install
sudo: keine tty vorhanden und kein askpass-Programm angegeben
sudo: keine tty vorhanden und kein askpass-Programm angegeben
Entschuldigung, versuchen Sie es erneut.
sudo: keine tty vorhanden und kein askpass-Programm angegeben
sudo: keine tty vorhanden und kein askpass-Programm angegeben
Entschuldigung, versuchen Sie es erneut.
sudo: keine tty vorhanden und kein askpass-Programm angegeben
sudo: keine tty vorhanden und kein askpass-Programm angegeben
Entschuldigung, versuchen Sie es erneut.
sudo: 3 falsche Passwortversuche
00:31:20: Der Prozess "/usr/bin/sudo" wurde mit dem Code 1 beendet.

Die system()-Funktion im qmake-Skript funktioniert gut, wenn ich qmake && make && make install im Terminal verwende, da es mich vor dem sudo ln...-Befehl auffordert; aber zum schnellen Testen fühle ich, dass das Erstellen mit STRG+B innerhalb des Qt Creator auch mit sudo-Befehlen funktionieren sollte...

Gibt es einen Weg, um von Qt Creator aufgefordert zu werden, oder einen Workaround? Wie beispielsweise das Speichern des sudo-Passes innerhalb des Qt Creator (obwohl es riskant ist)... Oder vielleicht das Ausführen von Build-Schritten in einem Terminal, in dem es mich auffordern würde? Würde die prompt()-Funktion in qmake mit dem Sammeln von sudo-Passwörtern funktionieren?

Alle Vorschläge sind willkommen...

3voto

Logan Punkte 10099

Nach viel Forschung:

ssh-askpass Sudo-Passwort | sudo -S bash ./script

Funktionierte wie ein Zauber, es fragt nach dem Passwort in einem separaten Fenster/Dialogfeld. Ich habe es unter benutzerdefinierten Build-Schritten hinzugefügt. Das Wichtige ist, sudo wissen zu lassen, dass es eine Passworteingabe über die Option -S erwartet.

echo "Passwort" | sudo -S bash ./script

Funktioniert auch mit Bash-Skripten, aber wie Sie sich vorstellen können, ist es unsicher, das sudo-Passwort im Skript zu speichern. Es wird gesagt, dass Leserechte dieses Problem beheben sollten.

2voto

SlySven Punkte 294

@Logan Sie können bewirken, dass sudo direkt mit seiner -A Option das ssh-askpass (GUI-Passwortabfrage-Dialog) verwendet. Dabei kann die Umgebungsvariable SUDO_ASKPASS verwendet werden, um einen Wert von /usr/bin/ssh-askpass zu überschreiben, der in /etc/sudo.conf konfiguriert sein kann[1] (ähnlich den Vorschlägen von gksudo oder kdesudo von @herophuong ). Damit umgeht man das Sicherheitsrisiko der zweiten Lösung in Ihrer Antwort, das das "Passwort" für alles sichtbar lässt, was die Befehlszeilenargumente beobachten kann. Das Äquivalent zu Ihrer ersten Lösung lautet:

sudo -A -s ./script

Vergessen Sie nicht, dass sudo möglicherweise eine Zwischenspeicherung von Anmeldeinformationen bietet, sodass bei einer wiederholten Aufforderung innerhalb eines sehr kurzen Zeitraums (Standard 5 Minuten?) der zwischengespeicherte Passwortwert verwendet wird, anstatt eine weitere Passwortabfrage zu machen. Wenn aus Vernunft-/Sicherheitsgründen dies in einem Skript (oder anderswo) nicht gewünscht ist, verwenden Sie sudo -K ohne weitere Argumente, um sofort alle zwischengespeicherten Anmeldeinformationen zu löschen (für diese Verwendung ist kein Passwort erforderlich), damit jede nachfolgende Verwendung von sudo eine Authentifizierung erfordert.

1 - Denken Sie daran, als Root <code>visudo</code> zu verwenden, wenn Sie <code>/etc/sudo.conf</code> bearbeiten möchten, um Folgendes hinzuzufügen:

# Pfad zum Askpass-Hilfsprogramm
Path askpass /usr/bin/ssh-askpass

2voto

Brendan Murphy Punkte 121

Wie in einem Kommentar von Cameron Tinker angegeben, können Sie Qt Creator so einrichten, dass ein Bereitstellungsschritt mit dem Befehl gnome-terminal und den Argumenten -e "sudo make install" erfolgt.

Effektiv dasselbe wie die Ausführung von gnome-terminal -e "sudo make install"

Das Bild ist ein Screenshot davon, wie diese Konfiguration in Qt Creator aussieht :)

Qt Creator mit sudo make install Schritt mit gnome terminal Projekt Einstellungen

gksudo wird auf Ubuntu nicht mehr empfohlen oder standardmäßig installiert

0voto

herophuong Punkte 356

Ich denke, du solltest gksudo (in GNOME) oder kdesudo (in KDE) verwenden. Die Befehle werden dann ein Fenster verwenden, um nach deinem Passwort zu fragen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X