Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:linuxclient:offlineusage]] 

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.

/etc/rc.local
#!/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.

/etc/linuxmuster-client/offlineuser/config
#!/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
/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
/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

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)

/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
Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos
/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
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
/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
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 23:38 von 127.0.0.1