WSL sudo Problem

  • Folgendes Problem:

    Ich arbeite unter dem WSL (Debian). Jeden Tag brauche ich dort diverse Dienste, da aber der PC immer wieder abends ausgeschaltet wird und am darauffolgenden morgen gestartet wird, müssen auch sämtliche Dienste neugestartet werden. Das betrifft nginx, php5.6-fpm, php7.2-fpm, php7.3-fpm, php7.4-fpm und mysql.

    Bis dato habe ich jeden morgen in der Shell erstmal "sudo service nginx start" und alle anderen Dienst gestartet. Mit der Zeit ist das irgendwann echt blöd.

    Deswegen die Idee das automatisieren.


    Die Lösung:

    Ein file /opt/startup.sh der Inhalt:

    Code
    sudo service postfix start
    sudo service nginx start
    sudo service php5.6-fpm start
    sudo service php7.2-fpm start
    sudo service php7.3-fpm start
    sudo service php7.4-fpm start
    sudo service mysql start


    In der /etc/sudoers wurde folgendes eingetragen:


    Code
    username ALL=NOPASSWD:service postfix start
    username ALL=NOPASSWD:service nginx start
    username ALL=NOPASSWD:service php5.6-fpm start
    username ALL=NOPASSWD:service php7.2-fpm start
    username ALL=NOPASSWD:service php7.3-fpm start
    username ALL=NOPASSWD:service php7.4-fpm start
    username ALL=NOPASSWD:service mysql start


    Damit das ganze nun auch automatisch startet, habe ich mittels RegEdit unter "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

    einen Schlüssel erstellt mit dem Wert "C:\Windows\System32\wsl.exe sudo /opt/startup.sh"


    Folgendes Problem trat auf:


    Obwohl in der Sudoers freigegeben, wird trotzdem beim Windows-Start nach dem Passwort gefragt (cmd erscheint mit der Aufforderung zur Eingabe des Sudo PW)


    Erster Versuch dies zu fixen:


    Eine Bash zu forcen und mittels parameter -c einen command zu übergeben. Das sieht so aus, /opt/startup.sh wurde umgeschrieben in:


    Code
    #! /bin/sh
    /bin/bash -c "sudo service postfix start"


    Problem besteht, immer noch wird nach dem Passwort verlangt. Uns gehen da die Ideen aus, da weder Systemd noch init.d anscheinend von wsl offiziel unterstützt werden und daher nicht anständig funktionieren.


    Hat da wer eine Idee, wie man dieses Problem umgehen kann, dass das Passwort nicht mehr abgefragt wird.

  • Isaac:

    Wichtig ist, an welcher Stelle du deine NOPASSWD Einträge in der sudoers-Datei ablegst. Sie wird von oben nach unten geparsed und der letzte Treffer zählt.


    Sollten also deine Einträge beispielsweise VOR der Zeile %sudo ALL=(ALL:ALL) ALL stehen, so matched letztendlich der eben genannte Eintrag über die sudo-Gruppe und es wird nach einem Passwort gefragt.


    Du kannst das ganz einfach austesten, indem du mit dem betroffenen User die Rechte abfragst: sudo -l. Der letzte aufgelistete Eintrag zählt.

    Habe es eben im WSL (Debian Buster) nachgestellt, klappt einwandfrei, wenn es an der korrekten Stelle steht.


    PS: Ich glaube es ist auch ratsam vollständige Pfade zu verwenden, Beispiel: username ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt update


    ThomasChr: Ich finde übrigens, dass WSL schon seine Daseisberechtigung hat, wenn man sonst eher im Windows-Universum zuhause ist. Bequem mit dem Gewohnten Explorer oder Entwicklungsumgebung direkt aufs Linux zuzugreifen hat schon seine Vorteile. Wer es nicht mag, nimmt halt direkt ein Linux. :) Aber das führt hier sonst wieder zu einer seitenlangen Offtopic-Diskussion. ;)

  • Einfach ne virtuelle Linux Maschine oder nen Docker Container nehmen? WSL klingt doch schon irgendwie nach Flickwerk...

    Kurzes Zitat aus dem Wiki:


    Zitat

    Der Nachfolger WSL 2 setzt stattdessen auf einen Virtualisierungsansatz mittels Hyper-V.

    WSL 1 war nichts halbes und nichts ganzes, aber mit 2 ist das "erwachsen" geworden.

  • Vielen Dank, das hat das Problem gelöst.