2017-06-21 13 views
0

Ich habe das folgende Bash-Skript geschrieben, das eine Datei erstellen soll, wenn die UFW-Regeln auf einem Server geändert werden. Das Vorhandensein dieser Datei wird dann mit Zabbix überprüft.Bash-Datei nicht korrekt abgeschlossen

#!/bin/bash 

file="/tmp/ports.txt" 
file_open="/tmp/open_ports.txt" 
md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }') 
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }') 
file_diff="/tmp/ports_diff" 

if [[ ! -f $file ]]; then 
    touch $file && sudo ufw status|grep ALLOW > $file 
fi 

if [ -f $file_diff ];then 
rm $file_diff 
fi 

sudo ufw status|grep ALLOW > $file_open 

if [ $md5_file != $md5_file_open ];then 
touch $file_diff 
fi 

Was ich finde, ist, dass manchmal die Datei tut erstellt oder gelöscht werden, wenn es sein sollte, aber wenn ich den Befehl, den 2. oder 3. Mal ohne weiteres Wechsel laufen, tut es.

Bitte helfen.

Dank

+0

Ist 'sudo' für den bestimmten Benutzer so konfiguriert, dass er ohne Passwort ausgeführt wird? – sjsam

+0

Ja, Befehl führt feine manuell aus. – user2099762

Antwort

1

Während der ersten die Dateien „/tmp/ports.txt“ nennen und „/tmp/open_ports.txt“ gibt es nicht. Nach dem ersten Lauf sollten beide Dateien erstellt werden und das Diff ist leer.

Afer dies ändert sich die ufw status.

In den nächsten Lauf, die Aussagen

md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }') 
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }') 

wird die Original-Dateien (ohne den geänderten Status) verarbeiten, so werden sie auf die Dateien in Betrieb sein, die gleich sind. Kein Unterschied wird gefunden.
Während dieses Laufs wird $file_open mit dem neuen Wert gefüllt, aber die md5sum-Funktion wird nach dieser Änderung nicht aufgerufen. Das diff wile wird nicht gemacht. Der nächste Lauf beginnt mit dem geänderten $file_open, und der Unterschied wird gefunden.

Wenn der Status wieder auf den ursprünglichen Wert geändert wird, führen Sie zuerst die MD5 auf den alten Dateien, Clamping, um einen Unterschied zu sehen und die Diff-Datei nicht zu löschen. Dieser Lauf schreibt auch die $file_open mit den neuen Werten, die beim nächsten Lauf erkannt werden.

Lösung: Verschieben Sie die 2 md5sum Zeilen bis nach dem letzten sudo.