Pi-Hole kann sudo nicht ausführen... WebInterface speichert keine Einstellugen

Das schaut mir nach einer migrierten /etc/sudoers aus, beispielsweise von einem Buster => Bullseye upgrade, oder erstellt als Teil deiner Setup Skripte oder so? Da ist dieses requiretty enthalten, was in Bullseye standardmäßig nicht vorhanden ist (auch in Buster nicht). requiretty sorgt dafür dass für sudo eine Konsole benötigt wird (offensichtlich unabhängig davon ob ein Password abgefragt wird), welche in Serviceumgebungen nicht existiert.

Generell empfehle ich diese Datei unangetastet zu lassen und eigene sudoers Einstellungen als separate Datei zu erstellen:

echo -e 'fhem ALL=(ALL) NOPASSWD: ALL\nfhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/cpanm *' > /etc/sudoers.d/fhem

Das hat den Vorteil dass im Falle von einem Upgrade, insbesondere Distributionsupgrades, die neuen Standarddateien automatisch installiert werden. Sobald eine Datei in /etc manuell geändert wurde, wird APT diese nicht mehr automatisch überschreiben.

Möglicherweise gibt es bereits eine Paketversion der Datei die du nach obigem nutzen kannst:

mv /etc/sudoers.dpkg-dist /etc/sudoers

Falls nicht, hier ist das Bullseye-Original:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "@include" directives:

@includedir /etc/sudoers.d

Wie du siehst mit @ anstatt #, was die neuere Syntax ist, wobei noch beides funktioniert, jedoch vor allem ohne requiretty.

EDIT: Falls du aus Sicherheitsgründen oder so requiretty weiter nutzen möchtest, muss Defaults:www-data !requiretty als weitere Ausnahme hinzugefügt werden.