Marius: Programm unter Linux als root ausführen lassen

Hi!

Ich habe Ubuntu und will auf meinem Desktop eine Verknüpfung zu einem Programm einrichten welches root-Rechte braucht. Wie kann ich so eine Verknüpfung einrichten die so eine Abfrage nach dem Passwort einblendet?

Danke euch!

  1. Hi

    Wie kann ich so eine Verknüpfung einrichten die so eine Abfrage nach dem Passwort einblendet?

    Das kommt auf dein DE (Desktop Environment, KDE, Gnome, ...) an. Mit "kdesu <programmname>" oder "gksu <programname>" würdest du das entsprechende Programm starten und zuvor zur Eingabe des root Passworts aufgefordert.

    Bei vom Paketmanagement eingerichteten Systemprogrammen sollte das entsprechende Programmicon eigenlich so eingerichtet sein. Ich hoffe dir ist klar, dass man einem Programm nicht mal eben so Rootrechte gewährt. Besser aufgehoben bei derart spezifischen und noch dazu sicherheitsrelevanten Fragen wärst du da in einem Forum deiner Distribution.

    MH

    --
    war unregistriert "michaa"
  2. Zwei weitere von ca. 20 Lösungsmöglichkeiten

    su-to-root -c /usr/bin/tollesprogramm
    pkexec /usr/bin/tollesprogramm

    Jörg Reinholz

  3. Hello,

    Ich habe Ubuntu und will auf meinem Desktop eine Verknüpfung zu einem Programm einrichten welches root-Rechte braucht. Wie kann ich so eine Verknüpfung einrichten die so eine Abfrage nach dem Passwort einblendet?

    Ich verstehe nun nicht, warum der User das Root-Passwort wissen darf, wenn er nicht Root ist.
    Besser ist es sicherlich, ein Hüllscript zu schreiben, dass das eigentliche Programm dann startet.

    Jeder, der dieses Script ausführen darf, darf dann damit auch das Programm starten. Er darf das Script aber nicht verändern können, keine Rechte am Script ändern können, hat auch selber keinen Zugriff auf das eigentliche Programm. Das liegt tunlichst bei Root in einem speziellen Verzeichnis.

    guckst Du: http://en.wikipedia.org/wiki/Setuid

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://restaurant-zur-kleinen-kapelle.de
    1. Hallo,

      Ich verstehe nun nicht, warum der User das Root-Passwort wissen darf, wenn er nicht Root ist.

      darf er nicht, muss er auch nicht. Das sudo-Konzept gibt ja einem gewöhnlichen Nutzer vorübergehend root-Privilegien (wenn root das erlaubt). Das muss er nur durch die erneute Eingabe *seines eigenen Passworts* bestätigen, nicht des root-Passworts.

      Ciao,
       Martin

      --
      Finanztipp:
      Leihen Sie sich Geld von einem Pessimisten.
      Er rechnet sowieso nicht damit, dass er es zurückbekommt.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Das muss er nur durch die erneute Eingabe *seines eigenen Passworts* bestätigen, nicht des root-Passworts.

        Das ist aber sehr von der nach Konfiguration in /etc/sudoers abhängig. Bei Ubuntu und anderen Linux-Distries ist es so wie Du es darstellst konfiguriert, dort hat der root auch gar kein Passwort - bei anderen, z.B. bei Red-Hat-Derivaten muss das root-Passwort aber eingegeben werden.

        Und wenn wir schon bei /etc/sudoers sind:

        Dort kann man auch konfigurieren, dass ein bestimmter Befehl, also ein bestimmtes Skript auch ohne Passwort mit sudo ausgeführt werden kann. Man muss dort aber alle Optionen und Parameter wie in der Befehlszeile angeben, weshalb ggf. die Erstellung eines "wrappers" notwendig ist, der alle benötigten Daten z.B.(!) in einer Datei speichert und dann mit sudo ein weiteres Skript aufruft, welches diese Datei wieder liest und dann das eigentliche Programm startet.

        Der mit sudo ausgeführte Wrapper sollte natürlich nur vom root zu bearbeiten sein.

        Jörg Reinholz

        1. Hallo

          Das muss er nur durch die erneute Eingabe *seines eigenen Passworts* bestätigen, nicht des root-Passworts.

          Das ist aber sehr von der nach Konfiguration in /etc/sudoers abhängig. Bei Ubuntu und anderen Linux-Distries ist es so wie Du es darstellst konfiguriert, …

          Marius: Ich habe Ubuntu und will … eine Verknüpfung einrichten die so eine Abfrage nach dem Passwort einblendet

          für den konkreten Fall: perfekt ;-)

          Und wenn wir schon bei /etc/sudoers sind:

          Dort kann man auch konfigurieren, dass ein bestimmter Befehl, also ein bestimmtes Skript auch ohne Passwort mit sudo ausgeführt werden kann.

          Kannst du dir einen Fall vorstellen, bei dem dieses Verhalten, das per Definition die Sicherheitsmechanismen aushebelt, sinnvoll ist? Mir fällt (außer „Bequemlichkeit“) auf die Schnelle nichts ein.

          Tschö, Auge

          --
          Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
          Terry Pratchett, "Wachen! Wachen!"
          ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
          Veranstaltungsdatenbank Vdb 0.3
          1. Kannst du dir einen Fall vorstellen, bei dem dieses Verhalten, das per Definition die Sicherheitsmechanismen aushebelt, sinnvoll ist? Mir fällt (außer „Bequemlichkeit“) auf die Schnelle nichts ein.

            Um die Bequemlichkeit wird es in einem solchen Fall immer gehen und die hat auch ihre Berechtigung. Denn Bequemlichkeit hat letztendlich auch mit Produktivität zu tun.

            Vor Gericht würde es "Einzelfallabwägung zwischen widerstrebenden Interessen" heißen,

            Jörg Reinholz

        2. Hallo,

          Das muss er nur durch die erneute Eingabe *seines eigenen Passworts* bestätigen, nicht des root-Passworts.
          Das ist aber sehr von der nach Konfiguration in /etc/sudoers abhängig.

          diese Datei gibt es auf meinem System gar nicht - nur ein Verzeichnis /etc/sudoers.d und darin eine README, die aber auch keine wirklich brauchbare Information enthält.

          Bei Ubuntu und anderen Linux-Distries ist es so wie Du es darstellst konfiguriert, dort hat der root auch gar kein Passwort

          Hat er nicht?? - Doch, bei all meinen ubuntoiden Systemen hat/hatte er eins (xubuntu, Ubuntu bis 10.10, Linux Mint). Das war immer eine der ersten Amtshandlungen nach der Basisinstallation. Sonst könnte ich mich ja auch nicht an der Konsole oder per ssh als root anmelden.

          Dass root sich nicht lokal am Desktop anmelden darf, ist wieder eine andere Kiste - obwohl ich irgendwo gelesen habe, dass man auch diese Beschränkung aushebeln kann, wenn man unbedingt will.

          bei anderen, z.B. bei Red-Hat-Derivaten muss das root-Passwort aber eingegeben werden.

          Eigenartig. Warum verhalten sich die verschiedenen Distros da so unterschiedlich? Welcher Sinn steckt dahinter?

          Ciao,
           Martin

          --
          Küssen ist die schönste Methode, eine Frau zum Schweigen zu bringen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi,

            Das muss er nur durch die erneute Eingabe *seines eigenen Passworts* bestätigen, nicht des root-Passworts.
            Das ist aber sehr von der nach Konfiguration in /etc/sudoers abhängig.
            diese Datei gibt es auf meinem System gar nicht

            sorry, ich muss mich korrigieren, die gibt es doch. Ich habe mich durch die "blöde" Angewohnheit von ls täuschen lassen, den _Inhalt_ von Unterverzeichnissen gleich mit aufzulisten, wenn der Verzeichnisname aufs Suchmuster passt. Und so listete ein

            ls -la /etc/sudo*

            erst die Datei sudoers, und dann -durch eine Leerzeile abgetrennt- den Inhalt von sudoers.d, und ich habe den ersten Teil oben einfach übersehen.

            Ciao,
             Martin

            --
            Die Natur ist gnädig: Wer viel verspricht, dem schenkt sie zum Ausgleich ein schlechtes Gedächtnis.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          2. Dass root sich nicht lokal am Desktop anmelden darf, ist wieder eine andere Kiste - obwohl ich irgendwo gelesen habe, dass man auch diese Beschränkung aushebeln kann, wenn man unbedingt will.

            Man gebe ihm ein Heimatverzeichnis und ein Passwort. Notfalls /etc/passwd direkt bearbeiten.

            bei anderen, z.B. bei Red-Hat-Derivaten muss das root-Passwort aber eingegeben werden.

            Eigenartig. Warum verhalten sich die verschiedenen Distros da so unterschiedlich? Welcher Sinn steckt dahinter?

            Philosphiefrage. Wenn der Root kein Passwort hat kann sich niemand via ssh oder Konsole als root anmelden. Das macht es weniger wahrscheinlich, dass eine root-Sitzung vergessen wird wenn der Benutzer mal länger weg geht. Besonders groß ist der Sicherheitsgewinn aber nicht weil sich die vom sudo-Tippen genervten Benutzer dann natürlich mit sudo bash oder sudo -s eine dauerhafte Root-Konsole besorgen wodurch der Hund sich in den Schwanz beißt.

            Jörg Reinholz

            1. Hallo,

              Dass root sich nicht lokal am Desktop anmelden darf, ist wieder eine andere Kiste - obwohl ich irgendwo gelesen habe, dass man auch diese Beschränkung aushebeln kann, wenn man unbedingt will.
              Man gebe ihm ein Heimatverzeichnis und ein Passwort. Notfalls /etc/passwd direkt bearbeiten.

              nein, das meine ich nicht. Beides hat er auf meinen Rechnern, aber ein GUI-Login wird trotzdem verweigert. Das ist noch irgendwo in der User/Password-Eingabe des Window Managers (oder wer immer das macht) verankert. Ist ja auch egal, root kann eine Shell aufmachen und notfalls von dort aus beliebige andere Programme starten - auch GUI-Programme, wenn's denn sein soll.

              bei anderen, z.B. bei Red-Hat-Derivaten muss das root-Passwort aber eingegeben werden.
              Eigenartig. Warum verhalten sich die verschiedenen Distros da so unterschiedlich? Welcher Sinn steckt dahinter?
              Philosphiefrage. Wenn der Root kein Passwort hat kann sich niemand via ssh oder Konsole als root anmelden. Das macht es weniger wahrscheinlich, dass eine root-Sitzung vergessen wird wenn der Benutzer mal länger weg geht. Besonders groß ist der Sicherheitsgewinn aber nicht weil sich die vom sudo-Tippen genervten Benutzer dann natürlich mit sudo bash oder sudo -s eine dauerhafte Root-Konsole besorgen wodurch der Hund sich in den Schwanz beißt.

              Also läuft die Erklärung auf ein simples "Ha, des isch halt so" hinaus.

              Ciao,
               Martin

              --
              Kopflosigkeit schützt nicht vor Migräne.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. nein, das meine ich nicht. Beides hat er auf meinen Rechnern, aber ein GUI-Login wird trotzdem verweigert. Das ist noch irgendwo in der User/Password-Eingabe des Window Managers (oder wer immer das macht) verankert.

                Meinst Du verweigert im Sinne von "verweigert" oder "wird nicht zur Auswahl angezeigt"?

                Für die Nichtanzeige ist ETWAS WIE

                /etc/lightdm/users.conf

                verantwortlich (Ubuntu, XFCE). Es heisst übrigens DM -also Desktop Manager. Der WM (Window Manager) wird erst nach dem Anmelden aktiv.

                Jörg Reinholz

                1. Hallo,

                  nein, das meine ich nicht. Beides hat er auf meinen Rechnern, aber ein GUI-Login wird trotzdem verweigert. Das ist noch irgendwo in der User/Password-Eingabe des Window Managers (oder wer immer das macht) verankert.
                  Meinst Du verweigert im Sinne von "verweigert" oder "wird nicht zur Auswahl angezeigt"?

                  ich meine tatsächlich "verweigert" - so als hätte ich einen nicht existierenden Benutzernamen eingegeben. Ich probiere das bei nächster Gelegenheit nochmal aus. Meine Erinnerung rekrutiert sich aus einem alten Ubuntu 10.10, wo ich das Anmelden als root am Gnome-Desktop ganz rotzfrech mal probiert hatte.

                  Für die Nichtanzeige ist ETWAS WIE

                  /etc/lightdm/users.conf

                  verantwortlich (Ubuntu, XFCE).

                  Stimmt, ich erinnere mich. Dort stehen nur Anweisungen, Benutzer mit UID<500, Benutzer ohne gültige Shell sowie die Benutzer nobody und noaccess nicht anzuzeigen. Aber da geht es anscheinend wirklich nur um die Anzeige der Namen.

                  Es heisst übrigens DM -also Desktop Manager. Der WM (Window Manager) wird erst nach dem Anmelden aktiv.

                  Ja, danke, den meinte ich auch. Es heißt übrigens Display Manager, wie ich in der users.conf gelesen habe. ;-)

                  Ciao,
                   Martin

                  --
                  Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
                  Die Zivilisation hatte begonnen.
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Hi!

    Ich habe die Verknüpfung mit gksu erstellt und es funktioniert so wie ich mir das vorgestellt habe. Herzlichen Dank!
    Die anderen Vorschläge werde ich mir auch noch anschauen. Danke auch dafür!

    Wegen Sicherheitsproblemen mache ich mir weniger Sorgen. Dafür ist ist die Passwortabfrage ja da. Das Programm selbst startet und stopt mir auch nur den Apache. Also nichts was sich tief im System bewegt.

    Wen es interessiert:

    #include <gtkmm.h>  
      
    void onStart();  
    void onRestart();  
    void onStop();  
    Gtk::Label statusInfo("");  
      
    int main(int argc, char* argv[]){  
        Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "");  
      
        Gtk::Window window;  
        window.set_title("Apache Control Panel");  
        window.set_position(Gtk::WIN_POS_CENTER);  
      
        statusInfo.set_width_chars(15);  
      
        Gtk::Grid layout;  
      
        Gtk::Button startButton("Start Apache");  
        startButton.signal_clicked().connect(sigc::ptr_fun(&onStart));  
      
        Gtk::Button restartButton("Restart Apache");  
        restartButton.signal_clicked().connect(sigc::ptr_fun(&onRestart));  
      
        Gtk::Button stopButton("Stop Apache");  
        stopButton.signal_clicked().connect(sigc::ptr_fun(&onStop));  
      
        layout.attach(startButton, 0, 0, 1, 1);  
        layout.attach(restartButton, 0, 1, 1, 1);  
        layout.attach(stopButton, 0, 2, 1, 1);  
        layout.attach(statusInfo, 1, 0, 1, 1);  
        layout.show_all();  
      
        window.add(layout);  
        return app->run(window);  
    }  
      
    void onStart(){  
        statusInfo.set_text("Apache startet");  
        system("/etc/init.d/apache2 start");  
    }  
      
    void onRestart(){  
        statusInfo.set_text("Apache restartet");  
        system("/etc/init.d/apache2 restart");  
    }  
      
    void onStop(){  
        statusInfo.set_text("Apache stoped");  
        system("/etc/init.d/apache2 stop");  
    }
    

    Das ist zwar nicht besonders schön (vor allem weil es keine wirkliche Rückmeldung über Erfolg/Fehlschlag gibt), aber es erfüllt seinen Zweck für mich und reicht mir deshalb eigentlich auch.

    Danke für eure Hilfe!