Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:linuxclient:offlineusage]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

anwenderwiki:linuxclient:offlineusage [2014/11/07 22:38] (aktuell)
Zeile 1: Zeile 1:
 +{{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.
 +<code bash /​etc/​rc.local>​
 +#!/bin/sh -e
 +
 +sleep 10
 +/​usr/​bin/​linuxmuster-check-offlineity --init
 +</​code>​
 +
 +== Konfiguration ==
 +findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: "​lehrer"​) in ''/​etc/​shadow''​ wiederfindet.
 +<code bash /​etc/​linuxmuster-client/​offlineuser/​config>​
 +#!/bin/sh
 +
 +offlineuserenabled="​yes"​
 +offlineuser="​lehrer"​
 +offlineuserpw='​$6$SCla3OOt$DJSgJ35o/​AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0'​
 +offlinetargetdir="/​lokal/​lehrer_lokal"​
 +</​code>​
 +
 +== Status Offlineity ==
 +findet sich in der Existenz der Datei ''/​etc/​linuxmuster-client/​offlineuser/​offline''​ wieder.
 +
 +== Zwei verschiedene lightdm Konfigurationen ==
 +<code none /​etc/​linuxmuster-client/​offlineuser/​lightdm.conf.online>​
 +[SeatDefaults]
 +greeter-session=lightdm-gtk-greeter
 +user-session=xubuntu
 +allow-guest=false
 +greeter-hide-users=true
 +session-cleanup-script=/​usr/​bin/​linuxmuster-check-offlineity
 +</​code>​
 +
 +<code none /​etc/​linuxmuster-client/​offlineuser/​lightdm.conf.offline>​
 +[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
 +</​code>​
 +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)
 +
 +<code none /​etc/​pam.d/​lightdm-autologin>​
 +#%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
 +</​code>​
 +
 +== Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos ==
 +<code bash /​usr/​bin/​linuxmuster-check-offlineity>​
 +#!/bin/bash
 +#
 +# linuxmuster-client-offline
 +#
 +# Tobias Küchel 2014, <​tobias@linuxmuster.net>​
 +# 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@<​property name="​image-show"​ type="​empty"/>​@<​property name="​image-show"​ type="​bool"​ value="​false"/>​@'​ $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
 +</​code>​
 +
 +== 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.
 +
 +<​code>​
 +# linuxmuster-client-extras-setup --type login --order 020 --on /​usr/​local/​bin/​linuxmuster-setup-offlineuser
 +</​code>​
 +
 +<code bash /​usr/​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
 +
 +</​code>​
 +
 +
 +== Ausloggen ==
 +Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen.
 +
  
 [[anwenderwiki:linuxclient:offlineusage]] anwenderwiki/linuxclient/offlineusage.txt · Zuletzt geändert: 2014/11/07 22:38 (Externe Bearbeitung)