Aus C++ Programme mit Rootrechten Starten



  • Ich würde gerne in meinem C++ Programm eine Konsolenanwendung mit Rootrechten starten und den output einlesen, (system(),popen(),fork() sind mir bekannt und Sicherheitsfragen sind mir egal 😉 . ), kennt jemand eine Lösung für mein Problem?


  • Mod

    Das Kommando muss dann eben das sein, was auch normal nötig ist, um das Programm mit Rootrechten zu starten. Also so etwas wie "sudo programmname".



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Da bekomme ich die Fehlermeldung:

    "Kein TTY vorhanden und kein »askpass«-Programm angegeben"
    Woran ich scheiter...

    Mein Programmcode wäre in dem Fall:

    string konsole ="sudo Programmname";
    system(konsole.c_str());

    ich habe schon so ziehmlich alles ausprobiert was mir eingefallen ist...



  • Schon daran gedacht, deine /etc/sudoers so anzupassen, dass der User kein Passwort mehr für diesen einen Befehl braucht?



  • Ja funktioniert über die sudoers Anpassung danke erstmal,
    aber eine Lösung in meiner cpp fände ich schöner falls mir da jemand helfen kann?



  • Hi

    'su' will vom Terminal (und nicht per Pipe) das Passwort einlesen. Du kannst mit forkpty() bzw. openpty() + fork() erreichen.
    Sobald 'su' dein Passwort bestätigt hat, läuft in diesem Terminal dein Programm, damit müssten auch stdin/stdout Umleitungen möglich sein.

    Damit 'su' nicht fehlschlägt, solltest du das Passwort zuvor bestätigen, ich glaube die libpam hat da ein entsprechendes Modul.

    Ich habe das vor einiger Zeit mal aus den grafischen 'su'-Wrappern (kdesu) gelernt. In deren Quellcodes müsstest du also die Lösung deines Problems finden.

    cu

    PS: Du kannst natürlich dem Zielprogramm oder einem Hilfsprogramm das SUID-Bit setzen und seinen Owner auf root setzen. So funktioniert schließlich 'su'.


Anmelden zum Antworten