Hauptmenü

fhem: Rechte für Scripte

Begonnen von gestein, 13 August 2019, 22:08:29

Vorheriges Thema - Nächstes Thema

gestein

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

Otto123

#1
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
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

amenomade

Wenn fhem Mitglied der Gruppe sudo ist (was wahrscheinlich der Fall ist), hat die Zeile
%sudo   ALL=(ALL:ALL) ALL
Vorrang 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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

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  ⇉  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

gestein

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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

gestein

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

amenomade

Funktioniert es mit "sudo -S <script>"?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Moin,

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

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

gestein

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

Otto123

Hi,
ich würde groups fhem machen.

Grüße 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

gestein

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

gestein

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

Otto123

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  ⇉  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

gestein

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 error
Aber 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