Autor Thema: (gelöst) fhem: sudo visudo einschränken  (Gelesen 1552 mal)

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:fhem: sudo visudo einschränken
« Antwort #15 am: 08 Juni 2018, 12:46:29 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2421
Antw:fhem: sudo visudo einschränken
« Antwort #16 am: 08 Juni 2018, 13:02:48 »
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
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4331
Antw:fhem: sudo visudo einschränken
« Antwort #17 am: 08 Juni 2018, 13:56:33 »
Und zu Deinen Beitrag 4/5 Beträge vorher:
Zitat
fhem 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

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #18 am: 08 Juni 2018, 14:33:19 »
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:
« Letzte Änderung: 08 Juni 2018, 14:36:56 von heikoh81 »

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4331
Antw:fhem: sudo visudo einschränken
« Antwort #19 am: 08 Juni 2018, 14:43:01 »
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

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #20 am: 08 Juni 2018, 14:49:05 »
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
« Letzte Änderung: 08 Juni 2018, 14:52:10 von heikoh81 »

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 4331
Antw:fhem: sudo visudo einschränken
« Antwort #21 am: 08 Juni 2018, 15:23:44 »
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

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #22 am: 08 Juni 2018, 16:14:13 »
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.
« Letzte Änderung: 08 Juni 2018, 16:15:48 von heikoh81 »

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4220
Antw:fhem: sudo visudo einschränken
« Antwort #23 am: 08 Juni 2018, 17:07:19 »
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!

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:fhem: sudo visudo einschränken
« Antwort #24 am: 08 Juni 2018, 20:14:03 »
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.

Zitat
Die 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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #25 am: 08 Juni 2018, 20:55:47 »
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.

Zitat
Die 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
« Letzte Änderung: 08 Juni 2018, 20:58:12 von heikoh81 »

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:fhem: sudo visudo einschränken
« Antwort #26 am: 08 Juni 2018, 21:31:35 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #27 am: 12 Juni 2018, 12:37:08 »
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
« Letzte Änderung: 12 Juni 2018, 12:41:40 von heikoh81 »

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:fhem: sudo visudo einschränken
« Antwort #28 am: 12 Juni 2018, 13:38:22 »
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
« Letzte Änderung: 12 Juni 2018, 14:12:46 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline heikoh81

  • Sr. Member
  • ****
  • Beiträge: 544
Antw:fhem: sudo visudo einschränken
« Antwort #29 am: 12 Juni 2018, 14:05:41 »
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

 

decade-submarginal