Gastaccount unter Ubuntu?

Moin,

Hintergrund meiner Frage: Wir haben einen für Gäste zugänglichen, hoffnungslos veralteten PC unter einer nicht mehr supporteten Windows Version mit einem “normalen” Passwort geschütztem Account. Anwendungsfall ist vor allem Websurfen & Office. Aus HW, security & ideologischen Gründen würde ich den gerne durch einen neueren PC mit einem aktuellen Ubuntu LTS ersetzen. Bis Ubuntu 16.04 gab es über lightdm einen Gastnutzer.

Hat jemand Erfahrung/Beispiel/Anleitung/Link um einen Gastnutzer unter einem aktuellen Ubuntu einzurichten?
Was mir spontan als Anforderung einfällt: Standardpasswort, “frisches” Profil bei jeder Anmeldung, vorkonfiguriertes Profil (kein Amazonbutton, Startseite im Firefox, …), Einschränkung um das OS nicht zu zerstören, Updates im Hintergrund, …
Wenn niemand was weiß, würde ich vermutlich mit ein paar Bash-Scripten bei boot und shutdown anfangen…

Simon

Oh ja, habe Erfahrungen. Insgesamt gute. Und ich meine es geht auch unter 18.04 noch mit lightdm (aber musst halt lightdm installieren und konfigurieren, was nicht mehr default ist; schau mal ob das nicht bei XUbuntu noch läuft).
Ich kann in den nächsten Tagen dazu etwas schreiben, gerade zu wenig Zeit.
Wenn der Rechner genug RAM hat, kannst du dir auch schonmal overlay-fs ansehen.

Ich wollte das ganze mal paketieren, aber habe das nicht weiter verfolgt. Wäre vielleicht wert, das nun nochmal aufzufrischen: https://github.com/ecovillage/7linden-public-lxde .

Huhu,
die Funktion des Gastaccounts gab es bis 16.04 LTS. Sie wurde wegen einer Sicherheitslücke in lightdm/AppArmor zunächst deaktiviert, und es gab anschließend nicht genügend Interesse, den Fehler zu beheben. Für mich schwer nachvollziehbar, weil ich es für einen solchen Kiosk-Modus fantastisch finde.

Wir sind denn auch mit diversen “öffentlichen” PCs auf 16.04 stehengeblieben. Support gibt es ja noch bis April 2021. Eine 120GB-SSD für zwanzig Euro dazu wirkt übrigens wahre Wunder - die eingesetzten PCs sind alle um die zehn Jahre alt.

Man kann das Feature wohl auch in höheren Releases auf eigene Gefahr wieder aktivieren: https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/1663157

These patches ship LightDM with guest support disabled by default. You can re-enable it by putting a config file with higher priority containing:

[Seat:*]
allow-guest=true

e.g. put this in:

/etc/lightdm/lightdm.conf (if editing manually)
/etc/lightdm/lightdm.conf.d/enable-guest.conf (if managing with snippets)
/usr/share/lightdm/lightdm.conf.d/99-enable-guest.conf (if shipping in a package)

Mir ist das aber nicht gelungen - daher die Rolle rückwärts auf 16.04 (und Deaktivieren der Updates auf neue Major-Releases).

Bei unserem Gast-Odroid (sowas wie Raspberry 3.x, heute sollte man wohl einen Pi 4 nehmen) funktioniert das mit dem Gäste-Account und 18.04.

Und: wenn man mit (root) overlay-fs arbeitet (was mir leider im odroid nicht gelungen ist, im raspbian aber vermutlich klappt) ist die Lücke nicht mehr dramatisch, allerdings braucht man ein etwas vertrackteres Setup oder mehr RAM (der odroid hat 2GB, das reicht nicht wirklich).
Weiterer Vorteil (dafür hatte ich es damals angedacht und ziemlich viel Arbeit reingesteckt - bin letztendlich an hardcore-Kernel-Modul-kompilieren-etc gescheitert): Die SD-Karte wird weniger durch Schreibzugriffe geschrubbt und man braucht das Gerät nicht wirklich runterfahren, sondern nimmt einfach aller Hardware per Steckerleiste dem Strom (wenn kein Elektrotechniker zuguckt).

@Simon Willst du das Projekt Gäste-Ubuntus gerade ernsthaft angehen? Hättest du etwas dagegen, ein Topic auf englisch zu erstellen bzw ich könnte eines erstellen? Ich glaube dass das für viele Menschen von Interesse ist. Und die Skripte und Anmerkungen im o.g. git-repo mit zu verwalten (wir nutzen die skripte übrigends selber nicht, aber ich glaube das war damals schon relativ weit)?

Wenn ich vor Weihnachten noch Zeit finde, würde ich gerne mal einen PC damit aufsetzen. Wichtig wäre mir möglichst nahe am Standard zu bleiben um nicht so viel Aufwand in der Wartung zu haben. Das Ding soll da stehen und funktionieren, inkl. automatischer (Sicherheits-) Updates. :slight_smile:
Mag daher auch nicht ein altes 16.04 nehmen (zumal da die Sicherheitslücke ja nach wie vor ungepatched ist!) noch den Displaymanager wechseln. HW Specs kenne ich noch nicht, muss mal schauen was ich bei uns noch rumstehen habe…
Simon

Die Sicherheitslücke bedeutet bei einer Standard-Desktop-Installation vor allem, dass sich die Gastnutzerin - wenn sie Nutzernamen und Passwort eines anderen Nutzers kennt - via su als dieser Nutzer einloggen kann und - bei entsprechenden Permissions - auch ohne Login in andere /home/-Verzeichnisse schauen kann, oder habe ich etwas übersehen. Für einen Gästerechner (der nicht nebenbei anders produktiv genutzt wird) sind das recht verträgliche “Lücken” finde ich. Zumal ja wahrscheinlich auch die Hardware nicht völlig abgeriegelt ist und damit ebenfalls ein Einfallstor besteht.

Den Nutzer, der in der sudoers steht könnte man dann noch runterriegeln; Passwort entfernen und nur login via ssh + Schlüssel erlauben …

Mit den automatischen Updates und Wartungsfreiheit ist das so eine Sache. “Updates werden durchgeführt. Bitte schalten sie den Rechner nicht aus.” wird irgendwie meistens als dringends durchzuführende Anweisung, aber ohne das “nicht” interpretiert …

Ich fände es cool wenn wir da Wissen, Erfahrungen und Skripte zusammenschmeißen würden! Und ich habe noch ein gotcha: Die temporären Gast-Nutzer werden nicht abgeräumt, verbrauchen aber eine GID aus dem Systembereich. Wenn der auf 1000 begrenzt ist, bekommst du nach ca. 800 Gäste-Logins ein ziemlich seltsames Verhalten beim Einloggen. Ein Skript um die Gast-Nutzer und -Gruppen wieder aufzuräumen habe ich in ecovillage/operations liegen.

So, ein Ubuntu 18.04 ist auf einem i3 mit 4GB RAM und 1TB HDD aufgesetzt. Das mit dem Gastaccount-Feature scheint mir etwas buggy (GID-Verbrauch) und wenig zukunftsträchtig. Daher würde ich es lieber mit Bordmitteln und etwas Bash-Vodoo machen. Ich sehe gerade zwei prinzipielle Wege:

  1. Ein permanenter Nutzer, der ein temporäres Home-Verzeichnis bekommt, dass bei jeder Anmeldung neu erzeugt wird (aus Vorlage oder so). Ggf. via overlayFS mit einem Vorlage-Home als lower dir (wobei ich den Mehrwert von overlayFS an der Stelle noch nicht sehe). Oder auch Home nach /tmp (ggf. im RAM) legen, dann ist es mit jedem Neustart weg.
  2. Ein temporärer Nutzer, der bei jedem Booten neu erstellt wird (ggf. auch aus einem Template heraus kopiert, oder mittels Skripten ein paar Defaultdinge mitbekommt). Hier müsste ich noch überlegen was passiert, wenn sich ein Nutzer nur abmeldet, der PC in Standby geht anstatt herunter gefahren wird usw.

Gibt es eine 3. Möglichkeit? Welche der Möglichkeiten favorisiert ihr aus welchen Gründen?
Simon

1 Like

Bitte nicht alle auf einmal, @felix & @Lennart, einer nach dem anderen bitte mit eurer Meinung. :slight_smile:

Hallo @Simon, danke fürs Nachhaken :wink:
Ich glaube, ich hatte dein Eindruck, dass dein Anspruch an die Lösung meinen deutlich übersteigt und wollte mit meinem Pragmatismus nicht im Weg stehen…
Das mit dem GID-Verbrauch lasse ich entspannt auf mich zukommen. Einer groben Hochrechnung zufolge träte dieses Ereignis bei uns erst nach dem Supportende von Ubuntu 16.04 ein :wink: Und wenn es doch anders käme, spiele ich halt das Standard-Internetcafé-Image zurück (das sich als erfreulich hardwareunabhängig erwiesen hat).
By the way @felix: Wo kann ich ablesen, bei welcher GID meine PCs angelangt sind?

Ich wurschtel mich mit Linux halt immer wieder so durch und habe die Hoffnung aufgegeben, es da zu höheren Weihen zu bringen. Wenn ich gefragt würde, wie ich nach dem Supportende von 16.04 weiterzugehen gedenke, würde ich vermutlich auf das dann aktuelle Release upgraden und das Gast-Feature wieder freischalten. Ich teile Felix’ Einschätzung zur geringen Bedeutung des Bugs in unserem Szenario.

Da antworte ich mal an Felix’ Statt: ich würde einfach in eingeloggtem Zustand in einem Terminal das sinnige Kommando id eingeben.

Man kann natürlich noch ein live-system nutzen, aber du willst ja auch automatische updates. Das “Standby”-Problem hast du natürlich in beiden Fällen - wenn sich ein* Nutzer* nicht ausloggt, kann der/die nächste natürlich auf die Historie zugreifen.
Meine Idee war halt, dass der Rechner nie heruntergefahren sondern über den Stromschalter ausgeschaltet wird und ich die updates manuell fahre.

Wenn du sowieso Bash-Fu machst, kannst du auch die GIDs aufräumen (https://github.com/ecovillage/operations/blob/master/doc/it/remove_guest_users_groups.md).

Das Vorgehen bei guest-session hier ist: wir haben einen Stamm-Nutzer (mit entsprechend konfigurierter Oberfläche, Firefox-Plugins, Language-Chooser glaube ich, etc). Die Guest-Session klont diesen Nutzer.

Ansonsten sind beide deiner Ansätze valide finde ich. Persönlich würde ich das mit dem overlay ausprobieren, aber nur aus Neugier :slight_smile:

Theoretisch kann man die max. Gruppen ID für die System-Nutzer (diese Range wird zumindest auf unserem odroid-System für die Guest-Nutzer genutzt) auch anpassen: https://linuxacademy.com/guide/12659-understanding-linux-users-and-groups/

Die Gruppen und Nutzer wieder aufräumen kann man ungefähr so: https://github.com/ecovillage/operations/blob/master/doc/it/remove_guest_users_groups.md .

Mit cut -f 4 -d':' /etc/passwd | sort -n | tail -n1 würdest du die höchste Gruppen-ID finden, aber das ist wenig aussagekräftig. Ein Blick in /etc/passwd wird dir aber helfen.

Wie oben geschrieben, ich freue mich, wenn ihr irgendwelche skripte oder Verbesserungen habt (für guest-logins hatte ich ja mal mit https://github.com/ecovillage/7linden-public-lxde angefangen).

Es gibt natürlich noch “kiosk”-Distributionen und -Skripte. Dabei ist idR dann nur ein Browser-Fenster nutzbar (also kein LibreOffice und Co). https://porteus-kiosk.org/index.html zB, da kann man auch nach Belieben andere Pakete dazustöpseln.
Automatische Updates muss man allerdings bezahlen, dafür hat man recht coole Features wie zentrale Verwaltung der Kioske, wenn man will und einige nette Personalisierungsoptionen.

Hm :thinking:
Hab mir das mit der höchsten Gruppen-ID mal auf unseren drei Internetcafé-PCs angeschaut.
Die uid scheint heruntergezählt zu werden - auf dem PC mit der niedrigsten uid fiel sie nach einem Neustart von 159 auf 158. Den sollte ich mir also gelegentlich vornehmen.
/etc/passwd liefert ein ähnliches Bild: dort finde ich den Admin-Account (1000), guest-prefs (1001) sowie darauf folgend Gast-Accounts ab 999 absteigend bis zur aktuellen uid. Anscheinend werden “normale” Accounts also ab 1001 hochgezählt bis 65534 (das ist das Ergebnis von cut -f 4 -d':' /etc/passwd | sort -n | tail -n1, und die darunterliegenden 999 sind reserviert für Gast-Accounts.

Jup, bzw system-user-accounts (also nutzer z.B. für services, ist auch bestimmt in einem von den weiter oben verlinkten artikeln erklärt). Welche ID-Bereiche gewählt/genutzt werden kann man theoretisch über Konfigurationsdateien festlegen (wovon vermutlich abzuraten ist).

Da es nur um einen einzelnen PC geht brauche ich (erst Mal) keine zentrale Verwaltung (wer weiß ob in ein paar Jahren dann nicht eher eine zentrale Nutzer- & PC-Verwaltung für alle genossenschaftlichen PCs dran ist). Der Nutzer muss wie gesagt mit einem Passwort gesichert sein, was auch gegen Kiosk und auch gegen Gastnutzer spricht.
Damit schwanke ich immer noch zwischen den beiden von mir genannten Varianten. Den Standbybutton in Ubuntu/Gnome durch eine Config auszublenden habe ich nach etwas Suchen leider noch nicht gefunden. :-/

Dann vielleicht doch ein permamenter Nutzer. Und anstatt Suspend/Standby zu verstecken könntest du vielleicht ein script einhaken (https://askubuntu.com/questions/92218/how-to-execute-a-command-after-resume-from-suspend ?), dass den X-Server neu startet oder die Session freundlich beendet.

Ein paar Voreinstellung etc sollten schon sein, oder (zB Privacy Badger und Adblocker im Firefox)? Macht das starten auch schneller. Da würde dann OverlayFS helfen, da du /home/<xyz> nicht erst jedes Mal neu erstellen/kopieren und Rechte fixen musst. Solltest du wirklich im Standby/Sleep-Scripten herumwerkeln müsste dann natürlich auch das overlay sauber geputzt werden.

Bin einen Schritt weiter.

Für die Nachwelt: das einfachste um Suspend & Hibernate für (normale) Nutzer zu deaktivieren und damit automatisch auch die Buttons zu verstecken habe ich mit https://askubuntu.com/questions/972114/ubuntu-17-10-cant-disable-suspend-with-systemd-hybrid-sleep und https://sites.google.com/site/easytipsforlinux/disable-hibernate-and-suspend gefunden und geht über polkit.

Jetzt mal schauen wie ich am elegantesten automatisiert einen Nutzer beim Hochfahren anlege und beim herunterfahren lösche. Sowie per Cron jede Nacht um 4h oder so einen Shutdown durchführen lassen, falls jemand den PC nicht aus macht.

Das ist für mich auch noch eine offene Baustelle. Denn einerseits sind so persönliche Einstellungen bspw. im Firefoxprofil sinnvoll, andererseits soll Firefox sich auch updaten können, auch wenn sich dabei das Nutzerprofil ändert. Sprich, ich muss vermutlich eher schauen wie eine automatische Provisionierung von Firefox aussehen könnte… Hat da jemand Erfahrung? :slight_smile:

So, wir nähren uns dem Ziel. Anbei mal die Doku wie ich gedenke den PC einzurichten. Gerne Feedback dazu! Das Ausloggen (ohne herunterfahren) zu verbieten habe ich bisher nicht geschafft. Wenn jemand einen Tipp, gerne melden. :slight_smile:
(Der Anhang ist nur eine Markdowndatei und kein PDF. Musste aber die Endung ergänzen, da .md nicht erlaubt ist, @felix vielleicht kannst du das ändern :slight_smile: )
Simon

1 Like

*.md ist jetzt als Dateiendung für uploads erlaubt.