Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. exec mit sudo

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    exec mit sudo

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mephist0 last edited by

      Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
      Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldung

      stdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
      

      Das Passwort ist korrekt. Mein JavaScript command lautet:

      exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) {
                  console.log('stdout: ' + stdout);
                  console.log('stdout: ' + error);
       });
      

      Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch

      exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
      

      versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
      Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?

      PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.

      T OliverIO M 3 Replies Last reply Reply Quote 0
      • T
        ticaki Developer @Mephist0 last edited by ticaki

        @mephist0

        Nach diesem Befehl

        sudo cat /etc/sudoers.d/iobroker
        

        versteht man diese Zeile besser

        iobroker ALL=(ALL) NOPASSWD: /path/to/script
        

        Ist aber möglich, das der fixer oder ein Update das rauswirft also besser in eine andere Datei.

        Noch eine kleine Anmerkung:
        Du solltest das Skript so mit Rechten versehen das User iobroker es nur ausführen kann, niemals schreiben und am besten auch nicht lesen. Beim Verzeichnis muss schreiben auch verboten sein, weiß abe rnicht mehr was öffnen und lesen genau macht.

        1 Reply Last reply Reply Quote 1
        • OliverIO
          OliverIO @Mephist0 last edited by

          @mephist0

          Bitte diesen Artikel sorgfältig lesen.
          Die erwähnten Dateien nur mit vissudo bearbeoten
          Am besten aber eine neue erzeugen die werden dann zusammengefasst.
          Wennannan dieser Stelle ohne vissudo bearbeitet kann man das komplette system sperren.
          Vissudo prüft das.

          T 1 Reply Last reply Reply Quote 2
          • T
            ticaki Developer @OliverIO last edited by

            @oliverio

            Ein link damit es auch nen beleg hat.

            https://unix.stackexchange.com/questions/27594/why-do-we-need-to-use-visudo-instead-of-directly-modifying-the-sudoers-file

            OliverIO 1 Reply Last reply Reply Quote 1
            • OliverIO
              OliverIO @ticaki last edited by

              @ticaki
              stimmt,
              den hatte ich schon kopiert, aber vergessen einzufügen
              https://wiki.ubuntuusers.de/sudo/Konfiguration/

              1 Reply Last reply Reply Quote 0
              • M
                Mephist0 @Mephist0 last edited by

                Today I learned a thing - or 2. Danke schonmal für eure Antworten.

                Dokumentation / Minimum Working Example für die Nachwelt:

                Ich habe ein test script "reboot" gebaut, das einfach nur einen Reboot durchführen soll.

                #!/bin/bash
                echo "sudo shutdown -r now"
                sudo shutdown -r now
                

                Das Script liegt in /opt/iobroker/. Mein JavaScript lautet:

                 exec('sudo /opt/iobroker/reboot', function (error, stdout, stderr) {
                            console.log('stdout: ' + stdout);
                            console.log('stdout: ' + error);
                 });
                

                Über das Kommando

                sudo visudo -f /etc/sudoers.d/iobroker
                

                habe ich in /etc/sudoers.d/iobroker folgende neue Zeile ergänzt

                iobroker ALL=(ALL) NOPASSWD: /opt/iobroker/reboot
                

                Auf Basis von @ticaki Hinweis, habe ich dem Script noch die Lese-Rechte entfernt (schreiben konnte es schon vorher nicht) mit dem command sudo chmod 751 reboot

                pi@iobroker-pi: $ ls -l /opt/iobroker
                -rwxr-xr-x+   1 pi       pi          388 Jul 30 10:36 reboot
                pi@iobroker-pi: $ sudo chmod 751 /opt/iobroker/reboot
                pi@iobroker-pi: $ ls -l /opt/iobroker
                -rwxr-x--x+   1 pi       pi          388 Jul 30 10:36 reboot
                

                Ich habe sicherheitshalber iobroker neu gestartet, damit die neuen Einträge auch wirklich neu eingelesen werden.
                Nun wird das Skript ausgeführt.

                Danke euch!

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                837
                Online

                31.7k
                Users

                79.8k
                Topics

                1.3m
                Posts

                javascript security
                3
                6
                510
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo