Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | anwenderwiki:linuxclient:offlineusage [2014/11/07 23:38] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
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, | ||
+ | * 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, | ||
+ | Dementsprechend die X-Session konfigurieren. | ||
+ | Ebenso z.B. den Profilbenutzer auf den lokalen synchronisieren. | ||
+ | <code bash / | ||
+ | #!/bin/sh -e | ||
+ | |||
+ | sleep 10 | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | == Konfiguration == | ||
+ | findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: " | ||
+ | <code bash / | ||
+ | #!/bin/sh | ||
+ | |||
+ | offlineuserenabled=" | ||
+ | offlineuser=" | ||
+ | offlineuserpw=' | ||
+ | offlinetargetdir="/ | ||
+ | </ | ||
+ | |||
+ | == Status Offlineity == | ||
+ | findet sich in der Existenz der Datei ''/ | ||
+ | |||
+ | == Zwei verschiedene lightdm Konfigurationen == | ||
+ | <code none / | ||
+ | [SeatDefaults] | ||
+ | greeter-session=lightdm-gtk-greeter | ||
+ | user-session=xubuntu | ||
+ | allow-guest=false | ||
+ | greeter-hide-users=true | ||
+ | session-cleanup-script=/ | ||
+ | </ | ||
+ | |||
+ | <code none / | ||
+ | [SeatDefaults] | ||
+ | greeter-session=lightdm-gtk-greeter | ||
+ | user-session=xubuntu | ||
+ | allow-guest=false | ||
+ | greeter-hide-users=true | ||
+ | # | ||
+ | session-cleanup-script=/ | ||
+ | autologin-user=%offlineuser% | ||
+ | autologin-user-timeout=0 | ||
+ | # | ||
+ | </ | ||
+ | Leider funktioniert bei mir der pam-service " | ||
+ | Also muss man ''/ | ||
+ | Alternative ist per Befehl " | ||
+ | |||
+ | <code none / | ||
+ | #%PAM-1.0 | ||
+ | auth requisite | ||
+ | auth required | ||
+ | auth optional | ||
+ | @include common-account | ||
+ | session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close | ||
+ | session required | ||
+ | @include common-session | ||
+ | session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open | ||
+ | session required | ||
+ | session required | ||
+ | @include common-password | ||
+ | </ | ||
+ | |||
+ | == Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos == | ||
+ | <code bash / | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | # linuxmuster-client-offline | ||
+ | # | ||
+ | # Tobias Küchel 2014, < | ||
+ | # 04.11.2014 | ||
+ | # GPLv2 | ||
+ | |||
+ | . / | ||
+ | |||
+ | [ " | ||
+ | |||
+ | # files involved: | ||
+ | # / | ||
+ | # | ||
+ | # -> session-cleanup-script=/ | ||
+ | # / | ||
+ | # / | ||
+ | # linuxmuster-client-extras-setup --type login --order 020 --on / | ||
+ | # leoclient-vm-printer.conf | ||
+ | # run-vm-printer-splitter | ||
+ | # run-vm-printer-spooler | ||
+ | |||
+ | # functions | ||
+ | log_msg() { | ||
+ | logger -t check-offlineity " | ||
+ | } | ||
+ | |||
+ | STATUSFILE=/ | ||
+ | PROFILE_USER=linuxadmin | ||
+ | HOMEDIR=/ | ||
+ | |||
+ | ## save the old status of offlineity | ||
+ | [ -e $STATUSFILE ] && OLDSTATUS=1 || OLDSTATUS=0 | ||
+ | log_msg " | ||
+ | |||
+ | ## | ||
+ | ## check if we are offline | ||
+ | ## | ||
+ | if ! ping -c 1 10.16.1.1 >/ | ||
+ | ## 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 >> / | ||
+ | |||
+ | ## | ||
+ | ## 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 " | ||
+ | restart=1 | ||
+ | log_msg " | ||
+ | fi | ||
+ | ## no change needed, get out | ||
+ | [ $restart -eq 0 ] && { log_msg "No change needed."; | ||
+ | |||
+ | log_msg " | ||
+ | mkdir -p $offlinetargetdir | ||
+ | chown $offlineuser $offlinetargetdir | ||
+ | |||
+ | if [ -e $STATUSFILE ]; then | ||
+ | log_msg "Seem to be offline. Change to offline." | ||
+ | # | ||
+ | pw=" | ||
+ | ## Repair leoclient-vm-printer | ||
+ | log_msg "Fix leoclient-vm-printer to point to Home_lokal" | ||
+ | sed -i " | ||
+ | log_msg " | ||
+ | iptables -A OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP | ||
+ | log_msg " | ||
+ | unlink / | ||
+ | sed -i " | ||
+ | ln -s / | ||
+ | else | ||
+ | log_msg "Seem to be online. Change to online." | ||
+ | pw=" | ||
+ | ## Repair leoclient-vm-printer | ||
+ | log_msg "Fix leoclient-vm-printer to point to Home_auf_Server" | ||
+ | sed -i " | ||
+ | log_msg " | ||
+ | iptables -D OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP | ||
+ | unlink / | ||
+ | ln -s / | ||
+ | fi | ||
+ | |||
+ | ## replace the lehrer pw | ||
+ | log_msg " | ||
+ | sed -i " | ||
+ | |||
+ | ## workaround fast VNC | ||
+ | log_msg " | ||
+ | sed -i ' | ||
+ | |||
+ | ## | ||
+ | ## Restart X and lightdm, if status changed | ||
+ | ## | ||
+ | |||
+ | ## if the service is running, grep returns 0, then stop lightdm | ||
+ | if service lightdm status | grep running >/ | ||
+ | service lightdm stop | ||
+ | sleep 2 | ||
+ | fi | ||
+ | |||
+ | ## workaround: printer-spooler stays after logout | ||
+ | pkill ' | ||
+ | |||
+ | ## Sync the PROFILE_USER to the offlineuser | ||
+ | ## This only works, if the $offlineuser is not logged in, thus when lightdm is down | ||
+ | log_msg " | ||
+ | rsync -rlpt --force --delete / | ||
+ | chown -R $offlineuser: | ||
+ | |||
+ | ## now start (again) | ||
+ | service lightdm start | ||
+ | </ | ||
+ | |||
+ | == Loginskripte beim X Login == | ||
+ | Beim Login wollen möglicherweise einige Skripte aus ''/ | ||
+ | Dies ist lokalen Benutzern verboten, kann aber über '' | ||
+ | Natürlich macht das nur für die Skripte Sinn, die kein Netzwerk/ | ||
+ | |||
+ | < | ||
+ | # linuxmuster-client-extras-setup --type login --order 020 --on / | ||
+ | </ | ||
+ | |||
+ | <code bash / | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | # Tobias Küchel | ||
+ | # | ||
+ | # with code from | ||
+ | # frank@linuxmuster.net | ||
+ | # | ||
+ | # 15.04.2012 | ||
+ | # GPL v2 | ||
+ | # | ||
+ | |||
+ | # default value for PROFILE_USER | ||
+ | PROFILE_USER=" | ||
+ | # if the package linuxmuster-client-profile is installed, | ||
+ | # configuration is stored in / | ||
+ | if [ -f / | ||
+ | . / | ||
+ | # source profile functions | ||
+ | #. / | ||
+ | fi | ||
+ | |||
+ | . / | ||
+ | |||
+ | ## proceed, if offline | ||
+ | if [ ! -e / | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # args | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | USER=" | ||
+ | HOMEDIR="/ | ||
+ | # | ||
+ | |||
+ | # functions | ||
+ | log_msg() { | ||
+ | logger -t setup-offlineuser " | ||
+ | } | ||
+ | |||
+ | ## 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 / | ||
+ | |||
+ | log_msg " | ||
+ | echo " | ||
+ | chown $USER:$USER $HOMEDIR/ | ||
+ | ## replace the Home_auf_Server Folder in the config if not done yet | ||
+ | WINXP=`echo $HOMEDIR/ | ||
+ | if [ -e $WINXP ]; then | ||
+ | log_msg " | ||
+ | sed -i "/ | ||
+ | fi | ||
+ | |||
+ | log_msg " | ||
+ | [ ! -e / | ||
+ | ## remove Home_auf_Server | ||
+ | [ -e / | ||
+ | ## remove Desktop-link | ||
+ | [ -e / | ||
+ | ## add Desktop-link | ||
+ | if [ ! -e / | ||
+ | mkdir -p / | ||
+ | cp / | ||
+ | sed -i " | ||
+ | sed -i " | ||
+ | chown $offlineuser / | ||
+ | fi | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | == Ausloggen == | ||
+ | Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen. | ||
+ | |||