{{tag> }} ====== Wie man einen Linuxclient offline nutzen kann ====== Gedanken zum Setup: * linuxmuster-client pakete sind installiert * Variante 1: Auswahl per Linbo/Grub * offline Nutzung wird explizit beim Booten über GRUB-Menü ausgewählt. Nutzung sollte offline bleiben bis zum Reboot (iptables) * postsync script schiebt verschiedene Dateien hin, um offline nutzung zu ermöglichen * Variante 2: Automatisches Erkennen, ob man sich im GRÜNEN Netz befindet (ping server) * falls offline erkannt wird: automatisches Login im X-Server mit lokalem Nutzerkonto, sollte offline bleiben bis zum Neu-Anmelden (iptables) * Möglichkeit zum logoff, welches wiederum automatisch erkennen kann, ob man offline oder online ist * login-Prozess sollte möglichst alle linuxmuster-client Schritte ausführen ===== Variante 2: Automatische Offline-Erkennung mit linuxmuster-client-extras ===== == Einschränkungen == * Untenstehendes wurde momentan nur für lightdm-Windowmanager und Xubuntu 12.04 getestet. == Bootkonfiguration == Beim Bootvorgang, (am besten vor dem Start des X-Servers) muss festgestellt werden, ob man offline ist. Dementsprechend die X-Session konfigurieren. Ebenso z.B. den Profilbenutzer auf den lokalen synchronisieren. #!/bin/sh -e sleep 10 /usr/bin/linuxmuster-check-offlineity --init == Konfiguration == findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: "lehrer") in ''/etc/shadow'' wiederfindet. #!/bin/sh offlineuserenabled="yes" offlineuser="lehrer" offlineuserpw='$6$SCla3OOt$DJSgJ35o/AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0' offlinetargetdir="/lokal/lehrer_lokal" == Status Offlineity == findet sich in der Existenz der Datei ''/etc/linuxmuster-client/offlineuser/offline'' wieder. == Zwei verschiedene lightdm Konfigurationen == [SeatDefaults] greeter-session=lightdm-gtk-greeter user-session=xubuntu allow-guest=false greeter-hide-users=true session-cleanup-script=/usr/bin/linuxmuster-check-offlineity [SeatDefaults] greeter-session=lightdm-gtk-greeter user-session=xubuntu allow-guest=false greeter-hide-users=true #session-setup-script= session-cleanup-script=/usr/bin/linuxmuster-check-offlineity autologin-user=%offlineuser% autologin-user-timeout=0 #pam-service=lightdm Leider funktioniert bei mir der pam-service "lightdm" nicht beim Kaltstart. D.h. es wird beim ersten Start immer "lightdm-autologin" verwendet. Also muss man ''/etc/pam.d/lightdm-autologin'' editieren und mindestens das pam_group.so Modul hinzufügen. Alternative ist per Befehl "adduser $offlineuser dialout" etc.. den offlineuser im Image in die entsprechenden Gruppen einzufügen. (/etc/group editieren reicht nicht, da /etc/gshadow auch gefragt wird) #%PAM-1.0 auth requisite pam_nologin.so auth required pam_permit.so auth optional pam_group.so @include common-account session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close session required pam_limits.so @include common-session session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open session required pam_env.so readenv=1 session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale @include common-password == Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos == #!/bin/bash # # linuxmuster-client-offline # # Tobias Küchel 2014, # 04.11.2014 # GPLv2 . /etc/linuxmuster-client/offlineuser/config [ "x$offlineuserenabled" != "xyes" ] && exit 0 # files involved: # /etc/linuxmuster-client/offlineuser/config # lightdm.conf.online,offline # -> session-cleanup-script=/usr/bin/linuxmuster-check-offlineity # /etc/rc.local (workaround for boot.d not working) # /usr/bin/linuxmuster-setup-offlineuser # linuxmuster-client-extras-setup --type login --order 020 --on /usr/local/bin/linuxmuster-setup-offlineuser # leoclient-vm-printer.conf # run-vm-printer-splitter # run-vm-printer-spooler # functions log_msg() { logger -t check-offlineity "$1" } STATUSFILE=/etc/linuxmuster-client/offlineuser/offline PROFILE_USER=linuxadmin HOMEDIR=/home/$offlineuser ## save the old status of offlineity [ -e $STATUSFILE ] && OLDSTATUS=1 || OLDSTATUS=0 log_msg "Offlineity was: $OLDSTATUS" ## ## check if we are offline ## if ! ping -c 1 10.16.1.1 >/dev/null ; then ## we should be offline echo 1 > $STATUSFILE else ## we should be online, revert changes rm -f $STATUSFILE fi ## Debugging FORCE offline #echo 1 > $STATUSFILE #printenv >> /tmp/asdfasdf.$$ ## ## check, if change is needed ## restart=0 if [ -e $STATUSFILE -a $OLDSTATUS -eq 0 ]; then restart=1 fi if [ ! -e $STATUSFILE -a $OLDSTATUS -eq 1 ]; then restart=1 fi if [ -n "$1" -a "x$1"="x--init" ]; then restart=1 log_msg "Called using --init. We set current status offline/online." fi ## no change needed, get out [ $restart -eq 0 ] && { log_msg "No change needed."; exit 0; } || log_msg "Changing offline/online status." log_msg "Lokales Verzeichnis erstellen/überprüfen" mkdir -p $offlinetargetdir chown $offlineuser $offlinetargetdir if [ -e $STATUSFILE ]; then log_msg "Seem to be offline. Change to offline." #pw="$offlineuser"':$6$SCla3OOt$DJSgJ35o/AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0:16091::::::' pw="${offlineuser}:${offlineuserpw}:16091::::::" ## Repair leoclient-vm-printer log_msg "Fix leoclient-vm-printer to point to Home_lokal" sed -i "s/Home_auf_Server/Home_lokal/g" /etc/leoclient/leoclient-vm-printer.conf log_msg "Disable network on firewall" iptables -A OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP log_msg "autologin lightdm config" unlink /etc/lightdm/lightdm.conf sed -i "s/%offlineuser%/$offlineuser/" /etc/linuxmuster-client/offlineuser/lightdm.conf.offline ln -s /etc/linuxmuster-client/offlineuser/lightdm.conf.offline /etc/lightdm/lightdm.conf else log_msg "Seem to be online. Change to online." pw="$offlineuser"':*:16091:::::' ## Repair leoclient-vm-printer log_msg "Fix leoclient-vm-printer to point to Home_auf_Server" sed -i "s/Home_lokal/Home_auf_Server/g" /etc/leoclient/leoclient-vm-printer.conf log_msg "Enable network on firewall" iptables -D OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP unlink /etc/lightdm/lightdm.conf ln -s /etc/linuxmuster-client/offlineuser/lightdm.conf.online /etc/lightdm/lightdm.conf fi ## replace the lehrer pw log_msg "Replace the $offlineuser pw" sed -i "s@^$offlineuser:.*@${pw}@" /etc/shadow ## workaround fast VNC log_msg "Background setzen" sed -i 's@@@' $HOMEDIR/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml ## ## Restart X and lightdm, if status changed ## ## if the service is running, grep returns 0, then stop lightdm if service lightdm status | grep running >/dev/null ; then service lightdm stop sleep 2 fi ## workaround: printer-spooler stays after logout pkill 'run-vm-printer' ## Sync the PROFILE_USER to the offlineuser ## This only works, if the $offlineuser is not logged in, thus when lightdm is down log_msg "Synching: rsync -rlpt --force --delete /home/$PROFILE_USER/ $HOMEDIR/ " rsync -rlpt --force --delete /home/$PROFILE_USER/ $HOMEDIR/ chown -R $offlineuser:$offlineuser $HOMEDIR ## now start (again) service lightdm start == Loginskripte beim X Login == Beim Login wollen möglicherweise einige Skripte aus ''/etc/linuxmuster-client/{pre,post}-mount.d/'' ausgeführt werden. Dies ist lokalen Benutzern verboten, kann aber über ''extras'' re-implementiert werden. Natürlich macht das nur für die Skripte Sinn, die kein Netzwerk/Tauschordner erfordern. # linuxmuster-client-extras-setup --type login --order 020 --on /usr/local/bin/linuxmuster-setup-offlineuser #!/bin/bash # # Tobias Küchel # # with code from # frank@linuxmuster.net # # 15.04.2012 # GPL v2 # # default value for PROFILE_USER PROFILE_USER="linuxadmin" # if the package linuxmuster-client-profile is installed, # configuration is stored in /etc/linuxmuster-client/profile.conf if [ -f /etc/linuxmuster-client/profile/profile.conf ]; then . /etc/linuxmuster-client/profile/profile.conf # source profile functions #. /var/lib/linuxmuster-client-profile/functions.inc || exit 1 fi . /etc/linuxmuster-client/offlineuser/config ## proceed, if offline if [ ! -e /etc/linuxmuster-client/offlineuser/offline ]; then exit 0 fi # args #SERVER="offline" #VOLUME="$offlineuser" #MNTPT="not_set" USER="$offlineuser" HOMEDIR="/home/$offlineuser" #OPTIONS="not_set" # functions log_msg() { logger -t setup-offlineuser "$1" } ## Problem: ## Grundsätzlich sollte linuxadmin -> $offlineuser schon mal gesynct sein, ## sonst funktioniert das login nicht, weil diese Skripte hier nicht ## wie die pam_mount scripte vor dem eigentlichen Login ausgeführt werden, ## sondern erst nach dem login beim autostart ## Lsg: beim Booten sync. starten in /usr/bin/linuxmuster-check-offlineity log_msg "Bookmarks des Dateimanagers setzen" echo "file://$HOMEDIR/Home_lokal" > $HOMEDIR/.gtk-bookmarks chown $USER:$USER $HOMEDIR/.gtk-bookmarks ## replace the Home_auf_Server Folder in the config if not done yet WINXP=`echo $HOMEDIR/.VirtualBox/Machines/winXP/winXP.xml` if [ -e $WINXP ]; then log_msg "Replace leoclient WinXP -> Home_auf_Server link in $WINXP" sed -i "/Home_auf_Server/s%hostPath=\"/home/linuxadmin/Home_auf_Server%hostPath=\"$HOMEDIR/Home_lokal%" $WINXP fi log_msg "Replace Home_auf_Server mit Home_lokal" [ ! -e /home/$offlineuser/Home_lokal ] && ln -s $offlinetargetdir /home/$offlineuser/Home_lokal ## remove Home_auf_Server [ -e /home/$offlineuser/Home_auf_Server ] && rm -rf /home/$offlineuser/Home_auf_Server ## remove Desktop-link [ -e /home/$offlineuser/Desktop/Home_auf_Server.desktop ] && unlink /home/$offlineuser/Desktop/Home_auf_Server.desktop ## add Desktop-link if [ ! -e /home/$offlineuser/Desktop/Home_lokal.desktop ]; then mkdir -p /home/$offlineuser/Desktop cp /home/linuxadmin/Desktop/Home_auf_Server.desktop /home/$offlineuser/Desktop/Home_lokal.desktop sed -i "s/Home auf Server/Home lokal/g;" /home/$offlineuser/Desktop/Home_lokal.desktop sed -i "s/Home_auf_Server/Home_lokal/g" /home/$offlineuser/Desktop/Home_lokal.desktop chown $offlineuser /home/$offlineuser/Desktop/Home_lokal.desktop fi == Ausloggen == Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen.