Hallo,
ich habe heute mein Postsync-Skript “localuser” zum Anlegen lokaler Benutzer überarbeitet. Nach ersten Tests unter Mint17 (Ubuntu 14.04) läuft es gut durch. Wer möchte kann es gerne einmal ausprobieren und berichten, z.B. ob es auch unter Xenial (16.04) läuft.
Features:
- Profil wie bei den anderen Benutzern
- Mehrere lokale Benutzer sind möglich
- Internetzugang wird unterbunden
- Automatische Bereinigung des Home_auf_Server-Ordners (nur sinnvoll, wenn die lokalen Dateien nicht durch den LINBO-Sync gelöscht werden, z.B. weil der Home_auf_Server-Ordner des lokalen Benutzers auf einer anderen Partition ist.)
- Warnung vor Bereinigung des Home_auf_Server-Ordners für den Benutzer beim Login (könnte auch angepasst werden als allgemeine Warnung vor Datenlöschung)
- Empfehlung: Eigene Partition für die Home_auf_Server-Ordner der lokalen Benutzer anlegen
Funktionsweise:
Per Postsync werden alle nötigen Skripte erstellt bzw. Anpassungen vorgenommen, um einen lokalen Benutzer zu erstellen:
- Per rc.local-Eintrag wird ein Skript zum Anlegen des Benutzers gestartet
- Das Profil vom linuxadmin dient als Profilvorlage
- Per Autostart-Eintrag wird ein Skript zur Bereinigung des Home_auf_Server-Ordners des Benutzers gestartet
- Der Internetzugang wird unterbunden durch das Verwerfen aller Pakete
Dateisystem:
Es wird auf dem Client eine Ordnerstruktur mit den Skripten erstellt unter /var. Darunter die Ordner:
- /var/localuserdata für den Home_auf_Server-Ordner
- /var/localuser/boot für das Skript zum Anlegen des Benutzers per rc.local
- /var/localuser/autostart für das Skript zum Bereinigen des Home_auf_Server-Ordners des Benutzers
Außerdem wird eine Datei erstellt in
- /etc/xdg/autostart zum Starten der Bereinigung des Home_auf_Server-Ordners
Und es wird eine Systemdatei angepasst:
- /etc/rc.local zum Starten des Skripts zum Anlegen des Benutzers
Die Home-Ordner der lokalen Benutzer liegen Ubuntu-standardgemäß unter
Wenn man eine eigene Partition für die Home_auf_Server-Ordner der lokalen Benutzer anlegt, muss man folgendes tun:
- start.conf entsprechend der Partitionierung ändern am Server
- Ordner /var/localuserdata am Client erstellen mit 744 root:root
- /etc/fstab am Client ergänzen um die Partition als /var/localuserdata einzubinden
– z.B. /dev/sda6 /var/localuserdata ext4 defaults 0 0
Login:
- Standardeinstellung: Benutzername und Passwort: keinnetz
Probleme:
- Betrieb über LAN-Kabel an einem fremden Netzwerken z.B. 192.168.1.x
– LINBO sucht 2 Minuten vergeblich nach Aktualisierungen
– Die Benutzeranmeldung mit eingestecktem LAN-Kabel scheitert nach etlichen Minuten
=> Ohne LAN-Kabel starten und Anmelden funktioniert aber gut.
Code:
Im Skript habe ich einige Zeilen auskommentiert mit ###case###. Diese dienen in meinem Produktivsystem zur Verteilung der lokalen Benutzerkonten auf bestimmte Clients.
Hier die Datei zum Download:
ENTFERNT (s. unten)
Hier der Inhalt:
ENTFERNT (s. unten)
Hier ein Link zu einem verwandtem Thema im Wiki:
http://www.linuxmuster.net/wiki/anwenderwiki:linuxclient:offlineusage
Gruß
Stefan
1 „Gefällt mir“
Update:
Aufgrund eines einmaligen Problems beim Anlegen des Benutzers, das ich nicht reproduzieren konnte, habe ich noch eine Zeile eingefügt in der Hoffnung, dass dies hilft:
echo sleep 3 >> /mnt/$localuserpath/boot/$localuser.sh
Hier die Datei zum Download:
ENTFERNT (s. unten)
Hier der Inhalt:
ENTFERNT (s. unten)
Gruß
Stefan
Hallo,
wer den lokalen Benutzer testen möchte, kann den Code einfach in den Postsync kopieren.
Für alle, die Ubuntu 14.10 oder höher verwenden: Man muss wohl erst rc.local wieder aktivieren, damit systemd diese boot-Skripte ausführt:
https://wiki.ubuntuusers.de/rc.local/
Update:
Ich habe noch einige Einstellungen verändert:
-
Internetzugang immer unterbinden:
echo iptables -A OUTPUT -m owner --uid-owner $localuser -j DROP >> /mnt/$localuserpath/boot/$localuser.sh
-
Symlink zum Home auf dem Desktop erstellen
echo '[ $HOME = /home/'$localuser' ] && ln -s "$HOME/Home_auf_Server" "$HOME/Desktop/Home" || exit 0' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
Hier die Datei zum Download:
postsync-keinnetz-ohne_case.txt (5,6 KB)
Hier der Inhalt:
########################################################################################################
# localuser - Lokale Benutzer anlegen ##################################################################
########################################################################################################
# Postsync-Skript für LINBO
# Getestet unter Linux Mint 17.0 Xfce 64bit (Ubuntu 14.04)
# Stefan Senft
# 2017-08-30
# GPL v3
### Verzeichnis für Dateien (für alle lokalen Benutzer) ################################################
localuserpath=var/localuser # Pfad zu den Skripten; Standard: var/localuser (kein / am Anfang)
localuserdata=var/localuserdata # Pfad zu den lokalen Ordnern Home_auf_Server; Standard: var/localuserdata (kein / am Anfang)
### Lokaler Benutzer Nr.1 ##############################################################################
# Anlegen des lokalen Benutzers Nr.1
###case###usertype="${HOSTNAME:7:1}"
###case###case $usertype in
###case### i)
###case### echo Image-PC: Kein lokaler Benutzer wird angelegt.
###case### ;;
###case### o)
# Benutzerdaten
localuser=keinnetz # Benutername - Standard ist keinnetz
localuserpsw=sakvXOddUgl9M # Kennwort verschlüsselt mit perl -e "print crypt('keinnetz','sa');" - Standard ist keinnetz
localuserdel=90 # Anzahl Tage nach denen unbenutzte Dateien aus Home gelöscht werden - Standard ist 90
localuserbasedir=home # Basis für Homeverzeichnis - Standard: home
# Info bei Postsync
echo Ein lokaler Benutzer wird angelegt: $localuser
# Ordner erstellen
[ ! -d "/mnt/$localuserpath" ] && mkdir /mnt/$localuserpath
[ ! -d "/mnt/$localuserpath/autostart" ] && mkdir /mnt/$localuserpath/autostart
[ ! -d "/mnt/$localuserpath/boot" ] && mkdir /mnt/$localuserpath/boot
[ ! -d "/mnt/$localuserdata" ] && mkdir /mnt/$localuserdata
# Skript erstellen zum Anlegen des lokalen Benutzers
echo '#!/bin/bash' > /mnt/$localuserpath/boot/$localuser.sh
echo rm -rf /home/$localuser >> /mnt/$localuserpath/boot/$localuser.sh
echo useradd --create-home --skel /home/linuxadmin --base-dir /$localuserbasedir --password $localuserpsw $localuser >> /mnt/$localuserpath/boot/$localuser.sh
echo sleep 3 >> /mnt/$localuserpath/boot/$localuser.sh
echo rm -rf /home/$localuser/Home_auf_Server >> /mnt/$localuserpath/boot/$localuser.sh
echo mkdir /$localuserdata/$localuser >> /mnt/$localuserpath/boot/$localuser.sh
echo ln -s /$localuserdata/$localuser /home/$localuser/Home_auf_Server >> /mnt/$localuserpath/boot/$localuser.sh
echo chmod -R 700 /$localuserdata/$localuser >> /mnt/$localuserpath/boot/$localuser.sh
echo chown -R $localuser:$localuser /$localuserdata/$localuser >> /mnt/$localuserpath/boot/$localuser.sh
echo iptables -A OUTPUT -m owner --uid-owner $localuser -j DROP >> /mnt/$localuserpath/boot/$localuser.sh
echo 'exit 0' >> /mnt/$localuserpath/boot/$localuser.sh
chmod 744 /mnt/$localuserpath/boot/$localuser.sh
# rc.local-Eintrag erstellen für Anlegeskript
sed -i "/\/boot\/$localuser.sh/d" /mnt/etc/rc.local
sed -i "s#exit.*#/$localuserpath/boot/$localuser.sh#" /mnt/etc/rc.local
echo 'exit 0' >> /mnt/etc/rc.local
# Skript erstellen zur Bereinigung der Homes der lokalen Benutzer nach Tagen
echo '#!/bin/bash' > /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo '[ $HOME = /home/'$localuser' ] && ln -s "$HOME/Home_auf_Server" "$HOME/Desktop/Home" || exit 0' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo 'datsek=$(date +%Y-%m-%d-%H%M%S)' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo count=0 >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo while ! test -w /$localuserdata/$localuser >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo do >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo sleep 1 >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo count=\`expr '$count' + 1\` >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo 'if test $count -eq 60' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo then exit 1 >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo fi >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo done >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo find /$localuserdata/$localuser -atime +$localuserdel -delete >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo 'echo Letzte Bereinigung: $datsek - $count Sekunden nach Skriptstart > "'/$localuserdata/$localuser'/WARNUNG - Unbenutzte Dateien werden nach '$localuserdel' Tagen geloescht"' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo 'zenity --warning --text "\\n Unbenutzte Dateien des Benutzers '$localuser' \\n werden nach '$localuserdel' Tagen automatisch geloescht"' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
echo 'exit 0' >> /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
chmod 775 /mnt/$localuserpath/autostart/$localuser-cleanhas.sh
# Autostarteintrag erstellen für Bereinigungskript
echo [Desktop Entry] > /mnt/etc/xdg/autostart/localuser_$localuser.desktop
echo Name=localuser_$localuser >> /mnt/etc/xdg/autostart/localuser_$localuser.desktop
echo Exec=/$localuserpath/autostart/$localuser-cleanhas.sh >> /mnt/etc/xdg/autostart/localuser_$localuser.desktop
###case### ;;
###case### *)
###case### echo Kein lokaler Benutzer wird angelegt.
###case### ;;
###case###esac
# Löschen der Home_auf_Server-Ordner von entfernten lokalen Benutzern Nr.1 #############################
[ ! -f "/mnt/$localuserpath/boot/$localuser.sh" ] && rm -rf /mnt/$localuserdata/$localuser
Gruß
Stefan