Autor Thema: fhem: Rechte für Scripte  (Gelesen 511 mal)

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
fhem: Rechte für Scripte
« am: 13 August 2019, 22:08:29 »
Hallo,

seit ich mit meinem fhem auf eine Neuinstallation unter Buster umgezogen bin, kann mein fhem keine scripte mehr aufrufen.
Es kommt folgende Fehlermeldung:
Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

    #1) Respektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach, bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Dass das mit der sudoers zu tun hat, weiß ich.
Aber was muss ich dort eintragen, damit fhem die scripte richtig aufrufen kann?

Momentan habe ich folgendes mittels "sudo visudo" eingetragen:
#
# 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
fhem ALL=(ALL) NOPASSWD:/usr/sbin/service
fhem ALL=(ALL) NOPASSWD:/sbin/shutdown
fhem ALL=(ALL) NOPASSWD:/usr/bin/hcitool
fhem ALL=(ALL) NOPASSWD:/opt/fhem/presence.sh
fhem ALL=(ALL) NOPASSWD:/opt/fhem/presenceBT.sh


# 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

Wenn ich das script händisch aufrufen, klappt es natürlich.
Und in der alten Installation unter Jessie hatte es mit den beiden ersten "fhem"-Zeilen geklappt. Kann das sein?
Die letzten 3 "fhem"-Zeilen habe ich dazu gefügt, bringt aber leider keine Abhilfe.

Könnte mir bitte jemand helfen?

Danke im Voraus
lg, Gerhard

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12961
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:fhem: Rechte für Scripte
« Antwort #1 am: 13 August 2019, 22:30:25 »
Hallo Gerhard,

meines Wissens muss ein Leerzeichen sein
NOPASSWD:/usr....
NOPASSWD: /usr....

Aber:
Ich empfehle Dir die sudoers Datei so zu lassen wie sie ist. Mach es lieber über eine include Datei!

Ich habe das hier mal notiert: https://heinz-otto.blogspot.com/2017/08/raspberry-ausschalten-mit-fhem.html

Gruß Otto
« Letzte Änderung: 13 August 2019, 22:32:52 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Zustimmung Zustimmung x 1 Liste anzeigen

Offline amenomade

  • Hero Member
  • *****
  • Beiträge: 4049
Antw:fhem: Rechte für Scripte
« Antwort #2 am: 13 August 2019, 23:06:04 »
Wenn fhem Mitglied der Gruppe sudo ist (was wahrscheinlich der Fall ist), hat die Zeile
%sudo   ALL=(ALL:ALL) ALLVorrang auf deinen fhem Zeilen, sprich... fhem, als Mitglied der Gruppe sudo darf alles "sudo-en", aber ein Passwort wird gefragt. Da fhem kein Terminal hat, bringt es dann diese Fehlermeldung

Lösung in dem Fall: deine fhem Zeilen am Ende... oder die include Lösung wie Otto geschrieben hat
FHEM 5.8 Pi 3, EchoDot, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, und HM Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten
Informativ Informativ x 1 Liste anzeigen

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12961
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:fhem: Rechte für Scripte
« Antwort #3 am: 13 August 2019, 23:11:59 »
Bezüglich der Scripte wäre da auch noch hier https://wiki.ubuntuusers.de/sudo/Konfiguration/ der 2. rote Kasten zu beachten!!!
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #4 am: 14 August 2019, 00:53:12 »
Danke für die Hinweise.

Habe das alles mal befolgt und auch die Einträge in die include ausgelagert.
Irgendwie hilft das aber alles nix.
Es kommen trotzdem die Einträge:
Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

    #1) Respektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach, bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben

Welche Programme muss ich in die Liste beim sudoers aufnehmen, damit man auch bluetooth zugreifen kann.
Ich habe nun schon das hcitool und das Script angeführt.
Gehört auch bash dazu?

lg, Gerhard

Offline amenomade

  • Hero Member
  • *****
  • Beiträge: 4049
Antw:fhem: Rechte für Scripte
« Antwort #5 am: 14 August 2019, 01:11:09 »
Was sagt sudo visudo -c?
FHEM 5.8 Pi 3, EchoDot, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, und HM Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #6 am: 14 August 2019, 01:31:35 »
das sagt:
pi@fhem2:~ $ sudo visudo -c
/etc/sudoers: Analyse OK
/etc/sudoers.d/010_at-export: Analyse OK
/etc/sudoers.d/010_pi-nopasswd: Analyse OK
/etc/sudoers.d/011_fhem-nopasswd: Analyse OK
/etc/sudoers.d/README: Analyse OK

Und im "/etc/sudoers.d/011_fhem-nopasswd" steht:
fhem ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /sbin/halt, /usr/bin/hcitool, /opt/fhem/presence.sh, /opt/fhem/presenceBT.sh
fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/cpanm *
fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/perl - App\:\:cpanminus

lg, Gerhard

Offline amenomade

  • Hero Member
  • *****
  • Beiträge: 4049
Antw:fhem: Rechte für Scripte
« Antwort #7 am: 14 August 2019, 01:45:10 »
Funktioniert es mit "sudo -S <script>"?
FHEM 5.8 Pi 3, EchoDot, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, und HM Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12961
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:fhem: Rechte für Scripte
« Antwort #8 am: 14 August 2019, 07:26:10 »
Moin,

ist fhem Mitglied der Gruppe sudo?
Wenn ja, wäre das ein grober Fehler.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #9 am: 14 August 2019, 13:18:37 »
Da kann ich erst heute Abend wieder ran.

Wie prüfe ich denn, ob fhem Mitglied von %sudo ist?
Stimmt das mit "id fhem"?

lg, Gerhard

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12961
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:fhem: Rechte für Scripte
« Antwort #10 am: 14 August 2019, 13:22:32 »
Hi,
ich würde groups fhem machen.

Grüße Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #11 am: 14 August 2019, 19:59:54 »
Hallo,

groups fhem ergibt:
pi@fhem2:~ $ groups fhem
fhem : dialout audio

Und der Aufruf mit "sudo -S /opt/fhem/presenceBT.sh" funktioniert.

ein "ls -l presenceBT.sh" zeigt:
-rwxr-xr-x  1 fhem dialout    522 Aug 14 16:51 presenceBT.sh

In der Datei "/opt/fhem/presenceBT.sh" steht folgendes (ist vom presence.sh kopiert):
#!/bin/bash
# detect Iphone/Android by BT MAC address.
# returns 1 if detected or 0

# exit immediately if no parameters supplied
if [ $# -lt 1 ]
  then
    echo "UNDEF"
  exit 1
fi

# Set variables
MAC=$1

PRECHECK=`hcitool -i hci0 info ${MAC} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
  # exit when phone is detected
  echo "1"
  exit 0
  fi

PRECHECK=`sudo hcitool -i hci0 leinfo ${MAC} | grep -o "${MAC}"`
if [ ${#PRECHECK} -eq ${#MAC} ]; then
  # exit when phone is detected
  echo "1"
  exit 0
  fi

In der "99_myUtils.pm" steht:
sub
CheckPresenceBT($) {
  my $mac = @_;
  my $ret = "";

  $mac = lc($mac);

  $ret = qx( /opt/fhem/presenceBT.sh $mac);

  $ret =~ s,[\r\n]*,,g; # remove CR from return-string

  if ($ret != 0 && $ret != 1) {
    Log3 "CheckPresenceBT", 2, "CheckPresenceBT: $ret";
    return 0;
   }

  return $ret;
}

Und im entsprechenden PRESENCE-Device steht:
Internals:
   CHANGED   
   DEF        function {CheckPresenceBT("40:98:AD:80:76:BB")} 30 30
   FUUID      5d51d1ab-f33f-0b7a-9324-30bfb464d31a3427
   FVERSION   73_PRESENCE.pm:0.183140/2019-01-18
   INTERVAL_NORMAL 30
   INTERVAL_PRESENT 30
   MODE       function
   NAME       iPhone_Barbara_BT2
   NOTIFYDEV  global
   NR         1273
   NTFY_ORDER 50-iPhone_Barbara_BT2
   STATE      error
   TYPE       PRESENCE
   READINGS:
     2019-08-12 22:52:59   command_accepted yes
     2019-08-14 19:44:07   model           function
     2019-08-14 19:56:24   state           error
   helper:
     ABSENT_COUNT 0
     PRESENT_COUNT 0
     call       {CheckPresenceBT("40:98:AD:80:76:BB")}
Attributes:
   event-on-change-reading state
   room       Anwesenheiten
   verbose    5



Sinn des Ganzen ist es, eine Anwesenheitserkennung meines iPhones zu bekommen.
Ich habe gemerkt, dass es sich immer wieder verabschiedet und sich bei einem Scan nicht mehr meldet (auch nicht bei WLAN).
Aber ein info-Aufruf klappt bisher immer.

Danke im Voraus
lg, Gerhard

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #12 am: 14 August 2019, 20:01:20 »
Und im log-file steht:
2019.08.14 20:00:25.990 5: PRESENCE (iPhone_Barbara_BT2) - stopping timer
2019.08.14 20:00:25.994 5: PRESENCE (iPhone_Barbara_BT2) - starting blocking call for mode function
2019.08.14 20:00:26.050 5: PRESENCE (iPhone_Barbara_BT2) - execute perl function: iPhone_Barbara_BT2|{CheckPresenceBT("40:98:AD:80:76:BB")}|0
Can't create connection: Operation not permitted
Can't create connection: Operation not permitted
Could not create connection: Input/output error
Could not create connection: Input/output error
2019.08.14 20:00:26.147 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at ./FHEM/99_myUtils.pm line 74.
2019.08.14 20:00:26.179 1: PERL WARNING: Argument "" isn't numeric in numeric ne (!=) at ./FHEM/99_myUtils.pm line 74.
2019.08.14 20:00:26.180 5: PRESENCE (iPhone_Barbara_BT2) - function returned with:
2019.08.14 20:00:26.185 5: PRESENCE (iPhone_Barbara_BT2) - blocking scan result: iPhone_Barbara_BT2|0|error|unexpected function output (expected 0 or 1):
2019.08.14 20:00:26.186 2: PRESENCE (iPhone_Barbara_BT2) - error while processing check: unexpected function output (expected 0 or 1):
2019.08.14 20:00:26.186 4: PRESENCE (iPhone_Barbara_BT2) - rescheduling next check in 30 seconds

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12961
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:fhem: Rechte für Scripte
« Antwort #13 am: 14 August 2019, 20:23:17 »
Hallo Gerhard,

deine Scripte werden doch gar nicht mit sudo aufgerufen, müssen sie auch nicht!
Aber in deinem Script wird sudo hcitool mit Parametern aufgerufen!
Ich habe mir aufgeschrieben:
Zitat
/usr/sbin/service * -> für alle Parameter
Also sollte der Eintrag in Deiner etc/sudoers.d/011_fhem-nopasswd" sein:
fhem ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /sbin/halt, /usr/bin/hcitool *

Ohne einen Eintrag für die Scripte, der ist gefährlich!

abschließend chmod 0440 für die 011_fhem-nopasswd hattest Du gemacht?

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Online gestein

  • Full Member
  • ***
  • Beiträge: 284
Antw:fhem: Rechte für Scripte
« Antwort #14 am: 14 August 2019, 22:44:32 »
Hallo Otto,

vielen Dank. Da hätte ich nicht durchgeblickt.
Das mit dem "*" steht zwar eine Zeile drunter auch, dessen war ich mir aber nicht bewusst.

Damit ist nun das Zugriffsproblem gelöst.
Vielen herzlichen Dank!

Nun habe ich zwar immer noch das Problem, dass der interne Bluetooth-Adapter RPi 4 folgendes meldet:
Can't create connection: Input/output errorAber das scheint ein anderes Problem zu sein.

Die Meldung kommt, wenn ich das Script über fhem aufrufe.
Wenn ich es 20x händisch aufrufe, kommt die Fehlermeldung nie.
Ist schon eigenartig.

lg, Gerhard

 

decade-submarginal