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

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

Vorheriges Thema - Nächstes Thema

Otto123

Das ist richtig weil es falsch ist.  :D
Warum drehst Du an dem Knopf und veränderst nicht einfach Deinen Aufruf?
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

JoWiemann

Zitat von: heikoh81 am 08 Juni 2018, 12:38:32
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


Sudoers erwartet immer den vollständigen Pfad.

Beispiel

nopasswd: /etc/init.d  -> für alles im Verzeichnis
nopasswd: /usr/sbin/service * -> für alle Parameter
nopasswd: /usr/sbin/service apache2 * -> für alle Parameter
nopasswd: /usr/sbin/service apache2 reload -> genau nur hierfür

Grüße Jörg

https://kofler.info/sudo-ohne-passwort/
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

Wernieman

Und zu Deinen Beitrag 4/5 Beträge vorher:
Zitatfhem ALL=(ALL) NOPASSWD: ALL

Damit darf FHEM ALLES, was auch root darf. Da FHEM selber relativ offen ist (von Grundgedanken her), ist damit Dein Server nicht mehr Sicher!
Es ist als ob fhem als root läuft

Kurzfassung: NICHT verwenden!
- 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

#18
Deshalb will ich die root-Rechte ja stark einschränken.
Aber auch so funktioniert es wieder nicht:


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


Das sind die Funktionen in meiner myUtils:

######## Apache2 Enable Site ############
#26.04.2015
sub
fhema2ensite
{
my $seitenname = shift;
my $ret = "";
$ret .= qx(sudo /usr/sbin/a2ensite $seitenname);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 3, "Apache2-Seite wurde aktiviert: $seitenname: $ret";
}

######## Apache2 Disable Site ############
#26.04.2015
sub
fhema2dissite
{
my $seitenname = shift;
my $ret = "";
$ret .= qx(sudo /usr/sbin/a2dissite $seitenname);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 3, "Apache2-Seite wurde deaktiviert: $seitenname: $ret";
}

######## Apache2 Reload ############
#27.04.2015
sub
fhema2reload
{
my $ret = "";
$ret .= qx(sudo /usr/sbin/service apache2 reload);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 3, "Apache2-Service wurde neu geladen: $ret";
}


Liefert im Log:

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


Und die Apache-Konfiguration funktioniert danach nicht mehr.

Lasse ich das "sudo" in meinen 3 oben gezeigten Funktionen weg, steht das im Log:

sudo: no tty present and no askpass program specified
Can't ignore signal CHLD, forcing to default.
2018.06.08 14:35:24 3: Apache2-Seite wurde aktiviert: 000-default-le-ssl.conf: Site 000-default-le-ssl already enabled
Failed to reload apache2.service: Interactive authentication required.
See system logs and 'systemctl status apache2.service' for details.
2018.06.08 14:35:24 3: Apache2-Service wurde neu geladen:

Wernieman

Und die Apache-Konfiguration funktioniert danach nicht mehr.

Funktioniert es den  nach einem manellen reset wieder?
Funktioniert es als User FHEM?

Siehe auch:
https://forum.fhem.de/index.php/topic,88282.msg808034.html#msg808034
- 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

#20
Die Apache-Konfiguration funktioniert dann wieder, wenn ich in sudo visudo folgende Zeile aktiviere und meinen Test wieder auskommentiere:

fhem ALL=(ALL) NOPASSWD: ALL

Dadurch bastelt fhem mir wieder eine korrekte Default-Datei zusammen und aktiviert diese.

Immerhin, der Befehl von Boris

root@fhem:~# su fhem -s /bin/bash

liefert jetzt mehr als das letzte Mal und führt nun nicht mehr zu dem Popup auf dem Bildschirm, sondern im Terminal:

fhem@fhem:/root$ /usr/sbin/service apache2 reload
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to reload 'apache2.service'.
Multiple identities can be used for authentication:
1.  ,,, (pi)
2.  root
Choose identity to authenticate as (1-2): 2
Password:
==== AUTHENTICATION COMPLETE ===


Allerdings merkt sich das System meine korrekte Authentifizierung nicht.
Führe ich den Befehl nochmal in der Shell aus, kommt dieselbe Abfrage.

"sudo visudo" als Benutzer fhem führt übrigens zu einer Passwort-Abfrage.
Ich habe aber nie eins für Benutzer fhem vergeben.
Könnte es doch notwendig sein, ein Passwort für Benutzer fhem zu vergeben?

Viele Grüße,
Heiko

Wernieman

Du hast ein "komisches" System ....

Kann Dir nur erst wieder am Montag helfen ...
- 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

#22
Danke nochmal an alle für die Hilfe bisher.
Vielleicht bekommen wir es ja noch gemeinsam hin, so dass fhem nicht vollumfängliche root-Rechte besitzt.

Mein System ist eigentlich nicht komisch.
Es ist ein Standard Raspbian Stretch mit Standard-Desktop, frisch installiert ca. Sommer 2017. Kernel-Update wegen Raspi3b+ irgendwann im März/April 2018, sonst sind alle Pakete auf dem neuesten Stand gehalten.
Es ist nur fhem, Apache2, fail2ban, Samba für einen USB-Stick und OpenVPN installiert, sonst sind keine Veränderungen vorgenommen.

Dr. Boris Neubert

Nach sudo fhem bash mal mit whoami schauen wer Du bist. Oder den Befehl direkt mit sudo ausführen. Manpages von su und sudo studieren.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Otto123

Hallo Heiko,

ich kann mich nur wiederholen, so wie ich es hier aufgeschrieben habe funktioniert es auf einem raspbian stretch lite (auch wenn es schon ein Jahr alt ist) aus dem "Stand"!

Dort steht auch drin wie mit sudoers auf dem pi normalerweise umgegangen wird, ohne manipulation der Original /etc/sudoers mit visudo.

Da wird kein user fhem manipuliert, da ist kein sudo visudo als fhem nötig (was sowieso totaler quatsch ist), da wird kein passwort für fhem nötig, da muss auch nicht einmalig ein Passwort abgefragt werden.

ZitatDie Apache-Konfiguration funktioniert dann wieder, wenn ich in sudo visudo folgende Zeile aktiviere und meinen Test wieder auskommentiere:
Code: [Auswählen]
fhem ALL=(ALL) NOPASSWD: ALL
Dadurch bastelt fhem mir wieder eine korrekte Default-Datei zusammen und aktiviert diese.

Die beiden Sätze verstehe ich überhaupt nicht!?  :-[

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

#25
Zitat von: Otto123 am 08 Juni 2018, 20:14:03
Da wird kein user fhem manipuliert, da ist kein sudo visudo als fhem nötig (was sowieso totaler quatsch ist), da wird kein passwort für fhem nötig, da muss auch nicht einmalig ein Passwort abgefragt werden.

Den Weg von Ottos Technik Blog werde ich morgen probieren und dann berichten.

ZitatDie beiden Sätze verstehe ich überhaupt nicht!?  :-[
Mein fhem bastelt in Abhängigkeit bestimmter Checkboxen (On/Off) aus unzähligen .txt-Dateien mittels cat-Befehl eine Gesamt-TXT-Datei zusammen, die dann die Default-Config für Apache ist.
Ich verwende dies, um einen ReverseProxy für meine IPCams zu konfigurieren, d.h. wenn wir daheim sind, sind die IPCams Apache-Seitig schon mal nicht mehr zu erreichen. Die Innenkameras werden zusätzlich auch per Funksteckdose stromlos, aber wenn die Rolläden unten sind, schaue ich ggf. gern auch mal nach, ob draußen alles in Ordnung ist :-) (ich bin Datenschutz-konform! Alle Kameras sind selbstverständlich nur auf mein Eigentum und Grundstück gerichtet, Hinweisschilder auf Videoüberwachung gemäß DIN sind an der Haustür vorhanden und eine Speicherung findet gar nicht erst statt...).

Wenn fhem vollumfängliche root-Rechte hat, dann klappt das.
Wenn die root-Rechte eingeschränkt werden, klappt das nicht mehr.

Wo ich das jetzt so schreibe, habe ich auch die Datei-Rechte nochmal geprüft.
Der User fhem darf sowohl auf die Quell-Textdateien als auch die 000-default-le-ssl.conf zugreifen.

Natürlich ist der Zugriff durch FHEM auf die Apache-Konfig ein Sicherheitsrisiko (da über FHEM jeder beliebige Befehl in die Konfig geschrieben werden könnte, aber ich habe keinen anderen Weg gefunden, den Zugriff auf die Kameras anders dynamisch zu steuern...

Viele Grüße,
Heiko

Otto123

Dafür wäre dann wichtig, dass Deine /etc/sudoers im Originalzustand ist.
Ich habe mal eine Jungfrau vom aktuellen, frischen Pi angehangen.  ;)

Bitte mit sudo visudo vergleichen und eventuell korrigieren!

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

#27
Hallo Otto,

ich habe den jungfräulichen Zustand von "sudo visudo" wiederhergestellt (bei mir leicht möglich, da ich meine Einträge immer Kennzeichne und Originaleinträge nicht lösche, sondern mit ##### auskommentiere).

Danach wie unter dem Link beschrieben die Datei "/etc/sudoers.d/011_fhem-nopasswd" angelegt mit chown 0440 und folgendem Inhalt:

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


Der Reboot funktioniert schon mal!

Apache2 neu starten macht aber weiterhin Probleme, ich erhalte folgende Fehlermeldung:

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


Ist meine Syntax bzgl. "service apache2 reload" oder "a2ensite"/"a2dissite" noch falsch?




"whoami" nach "su fhem -s /bin/bash" liefert übrigens "fhem".

Viele Grüße,
Heiko

Otto123

#28
Moin Heiko,

ich habe das erstmal mit ser2net probiert, da funktionierte es sofort ohne Probleme.
Inhalt der /etc/sudoers.d/11_fhem-nopasswd
fhem ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /sbin/halt, /usr/sbin/service ser2net reload, /usr/sbin/service apache2 reload

Mit dem FHEM Kommando
"sudo /usr/sbin/service ser2net reload" habe ich keinen Eintrag im Log und der status liefert mir die Info das neu geladen wurde.
Jun 12 13:31:39 mymachine systemd[1]: Reloading LSB: Allows network connections
Jun 12 13:31:39 mymachine ser2net[541]: Got SIGHUP, re-reading configuration
Jun 12 13:31:39 mymachine ser2net[1625]: Reloading Serial port to network proxy:
Jun 12 13:31:39 mymachine systemd[1]: Reloaded LSB: Allows network connectio


Dann habe ich apache2 installiert, "sudo /usr/sbin/service apache2 reload"verhält sich genauso:
Jun 12 13:21:43 mymachine systemd[1]: Starting The Apache HTTP Server...
Jun 12 13:21:43 mymachine systemd[1]: Started The Apache HTTP Server.
Jun 12 13:36:04 mymachine systemd[1]: Reloading The Apache HTTP Server.
Jun 12 13:36:04 mymachine systemd[1]: Reloaded The Apache HTTP Server.
lines 1-14/14 (END)


Der Befehl {qx(sudo /usr/sbin/service apache2 reload)}
in der FHEM Kommandozeile funktioniert genauso. Du rufst es ja damit aus deiner 99_myUtils.pm auf

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

Ich habe fhem ganz normal wie in der Wiki beschrieben aus dem Repository installiert.
Gerade habe ich für den Benutzer fhem ein Passwort vergeben. Auch dann funktioniert es nicht.
Wenn ich als Benutzer fhem in die Bash gehe, wird fhem auch nicht als Benutzer angeboten, weiterhin nur pi und root.

Wenn es in sudo visudo mit

fhem ALL=(ALL) NOPASSWD: ALL

funktioniert, wieso funktioniert es dann mit der Einschränkung nicht?

Viele Grüße,
Heiko