Lokaler Benutzer - offline arbeiten - "localuser"

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

  • /home

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