# Ermoeglicht Passwortaenderung durch Unraid-SMB/Share-User per SSH
# Getestet mit Unraid 6.12.6
#
# 1. Script ablegen als /boot/config/allowsmbpwchange
# 2. echo bash /boot/config/allowsmbpwchange >> /boot/config/go
# 3. In Unraid unter Settings -> Management Access: Use ssh aktivieren
# 4. Unraid neu starten
# 5. SMB-Passwortaenderung z.B. von Windows mit "ssh servername -l username", Passwort s.u.
#
# Konfiguration
#
# SMB-Mindestpasswortlaenge bei Aenderung durch User.
# Soll der hier waehrend der ersten Ausfuehrung gesetzte Wert veraendert werden, muss nach
# Aenderung die Datei /tmp/.allowsmbpwchange_1strun geloescht werden.
#
MINPASSWORDLENGTH=8
#
# Alle wie viel Minuten sollen geaenderte SMB-Passwoerter auf den USB-Stick gesichert werden,
# um bei einem reboot erhalten zu bleiben? Dieser Wert gibt auch an, alle wie viel Minuten
# die SMB-Passwortaenderung durch User fuer neu angelegte User freigeschaltet wird.
# Soll der hier waehrend der ersten Ausfuehrung gesetzte Wert veraendert werden, muss nach
# Aenderung die Datei /tmp/.allowsmbpwchange_1strun geloescht werden.
#
UPDATEINTERVAL=30
#
# Zur SMB-Passwortaenderung melden sich User mit ihrem Namen und dem folgenden Passwort per SSH an.
# Dieses Passwort kann auch leer sein, dies hat allerdings zur Folge, dass die User
# im Dashboard als "unprotected" angezeigt werden, was irrelevant ist, da sie ja ein SMB-Passwort haben.
# Ohne aktuelles SMB-Passwort kann natuerlich auch kein neues vergeben werden. Deshalb spielt
# es auch keine Rolle, dass das hier definierte Passwort fuer alle identisch ist.
#
PASSWORD="pwchg"
#
# Ende Konfiguration
#
allow () {
if [ "$1" != "root" ]
then
chsh -s /usr/bin/smbpasswd $1
if [ ! -z $PASSWORD ]
then
echo "$1:$PASSWORD" | chpasswd
else
echo "$1:" | chpasswd -e
fi
fi
}
if [ ! -f /tmp/.allowsmbpwchange_1strun ]
then
pdbedit -P "min password length" -C $MINPASSWORDLENGTH
echo /usr/bin/smbpasswd >> /etc/shells
sed -i.bak '/^UsePAM .*/s/^#*/#/g ; /^AllowUsers .*/s/^#*/#/g ; /^#PermitEmptyPasswords no$/s/^#*//g ; /PermitEmptyPasswords no/s/no/yes/' /etc/ssh/sshd_config
/etc/rc.d/rc.sshd reload
echo -e "# allowsmbpwchange\n*/$UPDATEINTERVAL * * * * /bin/bash /boot/config/allowsmbpwchange > /dev/null 2>&1" > /boot/config/plugins/dynamix/allowsmbpwchange.cron
/usr/local/sbin/update_cron
touch /tmp/.allowsmbpwchange_1strun
fi
/usr/bin/pdbedit -L -w > /boot/config/smbpasswd
while read line ; do
user=$( echo "$line" |cut -d\: -f1 )
allow $user
done < /boot/config/smbpasswd