Direkt zum Hauptinhalt

Nutzerdatenbank laden / hashen / prüfen

Nutzerdatenbank laden / hashen

Für das Laden und ggf. Rehashen der Nutzerdatenbank (users.toml) kann folgendes Script genutzt werden. Es prüft zunächst, ob die Konfiguration bffh.dhall von BFFH valid ist. Wenn nicht, wird nichts unternommen. Im Anschluss werden die Nutzer neu geladen und anschließend in die gleiche Datei optional wieder exportiert, um etwaige unverschüsselte Passwörter automatisch zu hashen. BFFH prüft beim Laden die users.toml auf Syntaxfehler. Wem diese Checks nicht ausreichen, der kann sich dem erweiteren Validator-Script widmen,

Hinweis: Das Script basiert auf einem auf dem System aktiven systemd Service namens bffh.service

mkdir -p /opt/fabinfra/scripts/
vim /opt/fabinfra/scripts/bffh-load-users.sh
#!/bin/bash
#check config
BFFHD="/usr/bin/bffhd"
DATA="/etc/bffh"
CFG="$DATA/bffh.dhall"
USERS="$DATA/users.toml"

while [[ $# -gt 0 ]]; do
	case $1 in
		-h|--help)
			echo "-h|--help   - show help"
			echo "-r|--rehash - overwrite users.toml with hashed passwords (ensure secure secrets)"
			exit 1
			;;
		-r|--rehash)
			REHASH="y"
			shift
			;;
		-*)
			;;
	esac
done

echo "use -h|--help to show additional script options!"

$BFFHD --check --config $CFG > /dev/null
if [ $? == 0 ]; then
	#pre-check bffh.dhall
	echo "Config is valid. Loading users ..."
	$BFFHD --verbose --config $CFG --load-users=$USERS

	if [ $? == 0 ]; then
		#then load users.toml
		$BFFHD --verbose --config $CFG --dump-users /tmp/users.toml --force
	else
		echo "Error: Newly given users.toml is invalid!"
		exit 1
	fi

	#if this was successful and service is running, restart it, elso do nothing
	if [ $? == 0 ]; then
		if [[ $REHASH == "y" ]]; then #overwrite users if --rehash option is given (not null)
			echo "Rehasing users.toml!"
			cat /tmp/users.toml > $USERS
			rm /tmp/users.toml
		fi
		FAS="bffh.service"
		STATUS="$(systemctl is-active $FAS)"
		if [ "${STATUS}" = "active" ]; then
			echo "restarting $FAS"
			systemctl restart $FAS
		else
			echo -e "\n\n$FAS not active/existing. Not restarting bffh service!"
		fi
	fi

else
	echo "Error: Currently loaded users.toml is invalid!"
	exit 1
fi
chmod +x /opt/fabinfra/scripts/bffh-load-users.sh

Nutzerdankenbank prüfen (users.toml validator)

Ein Python-Script erlaubt die Auswertung einer users.toml Datei mit folgenden Features:

  • zählt die Nutzer und deren zugewiesene Rollen
  • überprüft auf Duplikate bei Nutzernamen, Passwörtern und Cardkeys
  • validiert Passwörter auf Verschlüsselung (Argon2)
  • validiert eventuell vergebene Cardkeys (UUID)
  • gibt Hinweise bei möglichen Datenbankfehler (z.B. falsche Datentypen)
  • erzeugt eine Statistik über die Verwendung von Passwörtern, Cardkeys und Rollen

Das Script benötigt mindestens Python 3.11. Erst ab dieser Version wird tomllib unterstützt!

Tool installieren:

cd /opt/fabinfra/tools/
git clone https://github.com/vmario89/fabaccess-users-toml-validator.git

Benutzen:

python3 /opt/fabinfra/tools/fabaccess-users-toml-validator/validate.py

Über den optionalen Parameter --db /opt/fabinfra/bffh-data/config/users.toml kann auch eine andere Benutzerdatenbankdatei an Stelle der Standarddatei /etc/bffh/users.toml angegeben werden!

Fehlermeldungen und deren Bedeutung

Invalid initial character for a key part (at line x, column y)

Möglicher enthält der Benutzername Sonderzeichen wie Umlaute und ist nicht in Hochkommas geführt. In diesem Falle bricht das Script ab. [Ö] ist kein gültiger Benutzername, ["Ö"] schon.