Seite 1 von 2
[GELÖST] OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 14:17
von thomas_w
viewtopic.php?p=15350#p15350
Problem:
An obigem Beispiel von @PeterA ich habe versucht dies hier nachzubauen und bekomme die Meldung:
Code: Alles auswählen
2020-06-27 14:09:40.703 [WARN ] [ng.exec.internal.handler.ExecHandler] - Tried to execute '/etc/openhab2/scripts/./getText.sh', but it is not contained in whitelist.
Frage:
Wie geht denn das mit der
exec.whitelist genau? In folgendem Link steht, das gesamte Kommando soll da drin stehen:
https://www.openhab.org/addons/bindings ... ec-binding
In meinem Fall also
getText.sh:
Code: Alles auswählen
#!/bin/bash
TODAY=$(date)
HOST=$(hostname)
echo "Date: $TODAY Host:$HOST" >> /etc/openhab2/html/getText.txt
exec.whitelist:
Code: Alles auswählen
# For security reasons all commands that are used by the exec binding or transformation need to be whitelisted.
# Every command needs to be listed on a separate line below.
echo "Date: $TODAY Host:$HOST" >> /etc/openhab2/html/getText.txt
Klappt aber nicht...
Danke für Tipps...
Thomas
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 14:42
von peter-pan
In der Whitelist sollte das Kommando so stehen, wie du es in deinem Things-File definiert hast.
Beispiel:
.things
Code: Alles auswählen
Thing exec:command:my_user "Angemeldet ist" @ "Buero"
[command="/bin/bash /etc/openhab2/scripts/test.sh", interval=120, timeout=30, transform="REGEX((.*?))"]
Thing exec:command:cpu_temp "OH2-PI Temperatur" @ "Buero"
[command="/bin/bash /etc/openhab2/scripts/cpu_temp.sh", interval=120, timeout=30, transform="REGEX((.*?))"]
Die passende exec.whitelist würde dann so aussehen:
Code: Alles auswählen
/bin/bash /etc/openhab2/scripts/cpu_temp.sh
/bin/bash /etc/openhab2/scripts/test.sh
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:03
von thomas_w
peter-pan hat geschrieben: ↑27. Jun 2020 14:42
In der Whitelist sollte das Kommando so stehen, wie du es in deinem Things-File definiert hast.
Danke... sieht logisch aus...
bei mir passiert
log:
Code: Alles auswählen
2020-06-27 14:58:01.539 [WARN ] [ng.exec.internal.handler.ExecHandler] - Tried to execute '/bin/bash /etc/openhab2/scripts/./getText.sh', but it is not contained in whitelist.
Things:
Code: Alles auswählen
Thing exec:command:gettext [command="/bin/bash /etc/openhab2/scripts/./getText.sh", interval=60, timeout=5, autorun=false] // Text lesen für die Sitemap
misc/exec.whitelist:
Code: Alles auswählen
# For security reasons all commands that are used by the exec binding or transformation need to be whitelisted.
# Every command needs to be listed on a separate line below.
/bin/bash /etc/openhab2/scripts/./getText.sh
Habe ich was übersehen?
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:09
von peter-pan
sieht eigentlich gut aus. Aber das "gettext" in deinem Thing-File kenn ich nicht ????
Edit: Sorry vergiss es

Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:17
von peter-pan
Noch 'ne kleine Ergänzung:
das Bash-Script "cpu_temp.sh" sieht dann so aus:
Code: Alles auswählen
#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
TEMP=$(echo "scale=2; $INPUT / 1000" | bc)
echo $TEMP
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:27
von thomas_w
peter-pan hat geschrieben: ↑27. Jun 2020 15:17
das Bash-Script "cpu_temp.sh" sieht dann so aus:
Code: Alles auswählen
#!/bin/bash
INPUT=$(/bin/cat /sys/class/thermal/thermal_zone0/temp)
TEMP=$(echo "scale=2; $INPUT / 1000" | bc)
echo $TEMP
Ja, dass mit der CPU Temperatur kann ich auch gleich gut gebrauchen...
Wie kommen die Daten von $TEMP dann in die Sitemap? Per Webview oder per Items?
Danke und Grüße
Thomas
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:29
von thomas_w
peter-pan hat geschrieben: ↑27. Jun 2020 14:42
In der Whitelist sollte das Kommando so stehen, wie du es in deinem Things-File definiert hast.
Die passende exec.whitelist würde dann so aussehen:
Code: Alles auswählen
/bin/bash /etc/openhab2/scripts/cpu_temp.sh
/bin/bash /etc/openhab2/scripts/test.sh
Ich mußte auch noch die
RegEx Transformation in OpenHAB installieren.
So, dass war die Lösung. Ich hatte in der Zwischenzeit natürlich wieder was wegoptimiert..
Nun aber tut's !!!
Danke und Grüße
Thomas
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:30
von udo1toni
Bitte entferne das /./ aus der Zeile (sowohl im exec-Aufruf als auch in der whitelist). Der einzelne Punkt zeigt auf das aktuelle Verzeichnis und die Auflösung des Befehls läuft dann nicht sauber. Ebenso ist es nicht erlaubt, ein Leerzeichen vor dem ersten Befehl einzufügen, obwohl das in der Konsole tadellos funktioniert (und verhindert, dass der Befehl in der History landet). Der Aufruf muss also so aussehen:
Re: OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:33
von thomas_w
udo1toni hat geschrieben: ↑27. Jun 2020 15:30
Bitte entferne das /./ aus der Zeile (sowohl im exec-Aufruf als auch in der whitelist). Der einzelne Punkt zeigt auf das aktuelle Verzeichnis und die Auflösung des Befehls läuft dann nicht sauber. Ebenso ist es nicht erlaubt, ein Leerzeichen vor dem ersten Befehl einzufügen, obwohl das in der Konsole tadellos funktioniert (und verhindert, dass der Befehl in der History landet). Der Aufruf muss also so aussehen:
Erledigt! Den Punkt "." hatte ich sowieso nicht verstanden...
Danke und Grüße
Thomas
Re: [GELÖST] OH 2.5.5 - Frage zu Shellscript und Whitelist
Verfasst: 27. Jun 2020 15:34
von peter-pan
Du legst ein String-Item an und wenn du es numerisch haben willst, dann auch noch ein Number-Item. Dann brauchst du aber noch eine Regel zum umwandeln.
.items:
Code: Alles auswählen
String CPU_Temp "OH2_CPU Temp-String EXEC [%s °C]" <temperature> (gSystem) { channel="exec:command:cpu_temp:output"}
Number CPU_Temp_num "CPU-OH2-Pi Temperatur EXEC[%.2f °C]" <temperature> (gSystem)
und die Regel zum umwandeln in numerisch:
.rules:
Code: Alles auswählen
rule "OpenhabPi Temperature String to Number"
when
Item CPU_Temp changed
then
CPU_Temp_num.postUpdate(Float::parseFloat(String::format("%s",CPU_Temp.state).replace(' ','')))
end
Nun kannst du das Item in die Sitemap übernehmen, welches du willst
