(gelöst) fhem: sudo visudo einschränken

Begonnen von heikoh81, 31 Mai 2018, 18:49:58

Vorheriges Thema - Nächstes Thema

heikoh81

Hallo zusammen,

für bestimmte Aktionen auf meinem Raspi mit Raspbian Stretch benötigt mein FHEM root rechte, da z.B. ein Reload des Apache2 durchgeführt werden soll.

Es funktioniert, wenn ich in "sudo visudo" folgenden Eintrag habe:

fhem ALL=(ALL) NOPASSWD: ALL


Es funktioniert nicht, wenn ich die root-Rechte wie folgt einschränken möchte:

fhem    ALL=(root) NOPASSWD:/usr/sbin/service

oder

fhem    ALL=(ALL) NOPASSWD:/usr/sbin/service


Dann erhalte ich folgende Fehlermeldung im Log:

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: no tty present and no askpass program specified

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: no tty present and no askpass program specified
2018.05.31 18:44:43 3: Apache2-Seite wurde aktiviert: 000-default-le-ssl.conf:
2018.05.31 18:44:43 3: Apache2-Service wurde neu geladen:

Obwohl protokolliert wird, dass die Seite aktiviert und Apache2 neu geladen wurde, ist dies nicht der Fall.
Vielmehr ist miene Apache2-Konfiguration nicht verwendbar, also läuft irgendwas wohl schief.

Wo liegt mein Denkfehler?
In verschiedenen anderen Beiträgen, auch hier im fhem-Forum, wird genau diese Vorgehensweise beschrieben.

Vielen Dank für eure Hilfe,
viele Grüße,

Heiko

CoolTux


fhem    ALL = NOPASSWD:  /usr/sbin/service


So kann fhem im übrigen alle Dienste steuern.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Dr. Boris Neubert

Heiko, Du musst einmal als User fhem die Belehrung abnicken. In einer Shell. Grüße Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

heikoh81

Danke für eure Antworten.

Zitat von: CoolTux am 31 Mai 2018, 19:17:23

fhem    ALL = NOPASSWD:  /usr/sbin/service


So kann fhem im übrigen alle Dienste steuern.

Wird später noch weiter eingeschränkt. Habe es für Testzwecke so allgemein gehalten...

Zitat von: Dr. Boris Neubert am 31 Mai 2018, 19:27:31
Heiko, Du musst einmal als User fhem die Belehrung abnicken. In einer Shell. Grüße Boris

Ok, habe ich probiert.
Bin ich als root in der Shell, passiert bei "su fhem" passiert nichts.
Bin ich als pi in der Shell, fragt mich das System nach einem Passwort - welches ich nie vergeben habe.
Habe hierzu diesen Thread gefunden: https://forum.fhem.de/index.php/topic,36120.0.html
Im Thread werden nun mehrere Optionen disktuiert, ich wollte vorab klären, was für mein Problem die richtige ist:

less /etc/passwd | grep fhem
liefert
fhem:x:999:20::/opt/fhem:/bin/false


(1) Passwort für user fhem setzen?
(2) in /etc/passwd für fhem die Shell auf :/bin/bash ändern?
Wenn (2), kann ich nach einmaligem Abnicken dann die Shell wieder auf /bin/false setzen, oder muss das auf /bin/bash bleiben, damit fhem die Systembefehle absetzen kann?

Viele Grüße,
Heiko

Dr. Boris Neubert

Hallo,

/etc/passwd in Ruhe lassen und vom root-Account aus mit

su fhem -s /bin/bash

zum fhem-Account wechseln. Dann irgendwas mit sudo ausführen, die Belehrung abnicken, und mit exit wieder raus.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

heikoh81

Das funktioniert leider noch nicht.

Ich habe die Shell in Raspian geöffnet und bin erstmal user "pi".
Dann "sudo su" eingegeben, ich bin user root.

Wenn ich nun den von dir angegebenen Befehl eingebe, kommt eine Passwort-Abfrage (nicht in der Shell, sondern vom Raspian-Dektop "Authentication is required"), bei der ich nur die Benutzer "pi" oder "root" auswählen kann.
Ich habe für beide das Passwort eingegeben und OK geklickt. Der Befehl aus der Shell wird schon ausgeführt.
Aber in FHEM erscheint noch immer diesselbe Fehlermeldung im Log, wenn ich fhem dann denselben Befehl ausführen lasse.

Viele Grüße,
Heiko

Wernieman

Baue Dir beim nächsten mal bitte ein System ohne Grafische Oberfläche. Bei mir z.B: funzt es...

Du Öffnest eine Konsole, bist also pi. Wirst dann mit "sudo su" root (wobei ich immer "sudo -i" verwende). Wenn Du jetzt "su fhem -s /bin/bash" öffnest, kommt ein grafisches Fenster???

Du bist Dir sicher, in der gleichen Konsole zu sein??
Was für aliase hast Du?
alias
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

Zitat von: Dr. Boris Neubert am 31 Mai 2018, 19:27:31
Heiko, Du musst einmal als User fhem die Belehrung abnicken. In einer Shell. Grüße Boris
Hallo Boris,

wirklich? Ist das System abhängig?
Musste ich noch nicht machen. Ich richte meine Pi  Systeme so ein, damit funktioniert das ohne Umschweife.

Aber wie Werner empfiehlt: nur -lite- ohne graphischen Desktop.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Dr. Boris Neubert

Mannomann. Jetzt bin ich seit Tagen mal wieder an meinem Rechner, habe 30 Sekunden gegoogelt, und die folgende Lösung aufgetrieben:

In die Datei

/etc/sudoers.d/privacy

die Zeile

Defaults        lecture = never

reinschreiben. Test ist dem Verwender überlassen. Ich hoffe, dass das Thema damit erledigt ist. Ansonsten hilft

man sudoers

in einer Shell weiter.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

JoWiemann

Wobei ich letztens noch einmal festgestellt habe, das Google uns sehr unterschiedlich behandelt. Bei einem Bekannten, der wenig im IT Bereich googelt, habe ich die ersten Seiten ganz andere Treffer gehabt. Erst nachdem ich mich mit meinem Account angemeldet hatte war mir Google wieder gnädig...


Gesendet von iPhone mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

heikoh81

Danke für eure Antworten.

Zitat von: Dr. Boris Neubert am 07 Juni 2018, 18:23:34
Mannomann. Jetzt bin ich seit Tagen mal wieder an meinem Rechner, habe 30 Sekunden gegoogelt, und die folgende Lösung aufgetrieben:
Naja, ich habe wesentlich länger erfolglos gegoogelt, bevor ich hier gepostet habe. Wenn man weiß, wonach man sucht, findet man die Lösung sicher auch schneller.

Zitat
In die Datei
/etc/sudoers.d/privacy
die Zeile
Defaults        lecture = never
reinschreiben. Test ist dem Verwender überlassen. Ich hoffe, dass das Thema damit erledigt ist.

Habe ich gemacht, Test morgen (Haussteuerung kann ich zu dieser Zeit nicht neu starten, da um diese Zeit viele Timer anstehen).

Zitat von: Wernieman am 06 Juni 2018, 08:12:10
Baue Dir beim nächsten mal bitte ein System ohne Grafische Oberfläche. Bei mir z.B: funzt es...
Du Öffnest eine Konsole, bist also pi. Wirst dann mit "sudo su" root (wobei ich immer "sudo -i" verwende). Wenn Du jetzt "su fhem -s /bin/bash" öffnest, kommt ein grafisches Fenster???
Du bist Dir sicher, in der gleichen Konsole zu sein??
Was für aliase hast Du?
alias

Ich habe auch headless-raspis im Einsatz, aber grundsätzlich muss es ja auch mit grafischer Oberfläche funktionieren.
Ich habe schon meine Gründe für den grafischen Desktop: Der Raspi 3b+ hat genug Leistung, um neben fhem auch noch als "management station" für meine Headless Raspis zu dienen.
Auf dem Tablet geht ssh eher schlecht als recht und ein Notebook oder PC möchte ich dafür nicht hochfahren.

Alias als user pi liefert:
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ls='ls --color=auto'

Alias als user root liefert nichts.

Viele Grüße,
Heiko

Wernieman

Leider unterscheiden sich die Distris mit/ohne Grafischer Oberfläche gerade in solchen Details ....

Und bei den aktuellen PIs würde ich für Grafik eher noch einen Pi zulegen
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

heikoh81

ZitatIn die Datei
/etc/sudoers.d/privacy
die Zeile
Defaults        lecture = never
reinschreiben.

Funktioniert zwar für "shutdown -r now", nicht aber für "Service apache2 reload".
Folgenden Eintrag habe ich in visudo:


fhem    ALL=(ALL) NOPASSWD:/sbin/shutdown,/usr/sbin/a2ensite,/usr/sbin/a2dissite,/usr/sbin/service apache2 reload


Log:

sudo: no tty present and no askpass program specified
Can't ignore signal CHLD, forcing to default.
2018.06.08 11:55:06 3: Apache2-Seite wurde aktiviert: 000-default-le-ssl.conf: Site 000-default-le-ssl already enabled
2018.06.08 11:55:06 3: Apache2-Service wurde neu geladen:


Mit diesem visudo funktioniert alles auch ohne Eintrag in /etc/sudoers.d/privacy:

fhem ALL=(ALL) NOPASSWD: ALL


Viele Grüße,
Heiko

Otto123

Hallo Heiko,

du rufst dann aber auch exakt diese Zeile auf?sudo /usr/sbin/service apache2 reload

Mit Service apache2 reload wird es wirklich nicht gehen. So mein Verständnis  :D was nicht richtig sein muss.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

heikoh81

#14
In fhem rufe ich dann tatsächlich nur "sudo service apache2 reload" auf.
Nachfolgend lässt mich sudo visudo aber gar nicht speichern und weißt mich auf einen Fehler hin:

fhem    ALL=(ALL) NOPASSWD: service apache2 reload