Gastzugang mit temporärem home
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Gastzugang mit temporärem home
Hi Leute!
Ich möchte gerne einen Rechner so aufsetzen, dass der einen Gastzugang mit temporärem Home hat, welches nach der Abmeldung gelöscht wird.
Ich hab im Forum einen Thread aus dem Jahr 2012 gefunden, welcher eine Vorgehensweise mit tmpfs empfiehlt.
Der Rechner hat aber nur 2GB RAM, und da wirds mit ein wenig Browsen mittlerweile schon bald mal recht knapp... Die Websites werden ja immer größer...
Auf diesem Rechner soll Browsen mit Firefox oder Chromium möglich sein und das eine oder andere Dokument mit Libreoffice erstellen. Mehr wirds dort nicht geben. Und wenn die User etwas speichern wollen, sollen sie das auf mitgebrachten USB-Sticks tun.
Mittlerweile ist ja systemd ins Land gezogen. Jetzt denke ich daran, mittels tempfiles oder der User-Session das Home-Verzeichnis beim Login zu erstellen und beim Logout zu löschen.
Allfällige Konfigurationen würde ich in /etc/skel schreiben.
Mir ist nur noch nicht ganz klar, wie ich das angehen soll.
Hat dazu vielleicht jemand eine Idee?
lg scientific
Ich möchte gerne einen Rechner so aufsetzen, dass der einen Gastzugang mit temporärem Home hat, welches nach der Abmeldung gelöscht wird.
Ich hab im Forum einen Thread aus dem Jahr 2012 gefunden, welcher eine Vorgehensweise mit tmpfs empfiehlt.
Der Rechner hat aber nur 2GB RAM, und da wirds mit ein wenig Browsen mittlerweile schon bald mal recht knapp... Die Websites werden ja immer größer...
Auf diesem Rechner soll Browsen mit Firefox oder Chromium möglich sein und das eine oder andere Dokument mit Libreoffice erstellen. Mehr wirds dort nicht geben. Und wenn die User etwas speichern wollen, sollen sie das auf mitgebrachten USB-Sticks tun.
Mittlerweile ist ja systemd ins Land gezogen. Jetzt denke ich daran, mittels tempfiles oder der User-Session das Home-Verzeichnis beim Login zu erstellen und beim Logout zu löschen.
Allfällige Konfigurationen würde ich in /etc/skel schreiben.
Mir ist nur noch nicht ganz klar, wie ich das angehen soll.
Hat dazu vielleicht jemand eine Idee?
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
2 GB sind ja wohl mehr als genug. Ich habe nur 1 GB.
Du kannst den Cache des Firefox begrenzen und die Art des Cachings ändern. Entweder auf Platte oder RAM. Ok in deinen Fall wäre es ziemlich identisch
Schau dir evtl. auch /etc/xdg an.
Du kannst den Cache des Firefox begrenzen und die Art des Cachings ändern. Entweder auf Platte oder RAM. Ok in deinen Fall wäre es ziemlich identisch
Konfiguriere Firefox in /etc/firefox-esr/firefox-esr.jsAllfällige Konfigurationen würde ich in /etc/skel schreiben.
Schau dir evtl. auch /etc/xdg an.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ich denke, ich hab die Lösung gefunden...
Ich habe mittels
einen neuen Gast-User angelegt und ihm das Passwort "gast" verpasst.
Kontrolle:
Dann muss man als root in /etc/systemd/system ein neues Verzeichnis anlegen:
Die Nummer nach dem @ muss der UID aus passwd entsprechen!!
in diesem Verzeichnis legt man dann eine Datei mit der Endung .conf an und befüllt sie folgendermaßen:
/etc/skel wird normalerweise nur beim Erstellen des Userhome mit adduser kopiert. Da das Verzeichnis aber temporär ist, muss es jedesmal neu beim Start wieder kopiert werden.
Überlegenswert ist, ein eigenes Skel für den Gastuser mit speziellen Konfigurationen anzulegen (.mozilla, Gnome-Configs...)
Ein Login per ssh ist damit nicht möglich. Aber Gnome startet ohne Probleme.
Wenn ich mich in Gnome abmelde, bleibt aber die user@1001.service erhalten.
Ändere ich in /etc/passwd die Shell auf /bin/bash und melde mich per ssh an und wieder ab, ist die user@1001.service auch beendet.
Das RuntimeDirectory wird nämlich nur gelöscht, wenn das Service beendet wird.
Wie bringe ich Gnome bzw. gdm bzw. systemd dazu, den Service nach Beendigung der Gnome-session dieses Service auch zu beenden?
[EDIT]
In /etc/systemd/logind.conf
Den folgenden Punkt auskommentieren und "gast" anfügen:
Damit werden alle Prozesse von Gast beim ausloggen beendet - und damit auch das RuntimeDirectory gelöscht.
lg scientific
Ich habe mittels
Code: Alles auswählen
sudo useradd -mb /run -s /bin/bash -c "Gast" gast; passwd gast
Kontrolle:
Code: Alles auswählen
grep gast /etc/passwd
gast:x:1001:1001:Willkommen Gast:/run/gast:/bin/bash
Code: Alles auswählen
sudo mkdir /etc/systemd/system/user@1001.service
in diesem Verzeichnis legt man dann eine Datei mit der Endung .conf an und befüllt sie folgendermaßen:
Code: Alles auswählen
sudo editor /etc/systemd/system/user@1001.service/tmphome.conf
[Service]
RuntimeDirectory=gast
ExecStartPre=/bin/cp -nr /etc/skel/. %t/gast
Überlegenswert ist, ein eigenes Skel für den Gastuser mit speziellen Konfigurationen anzulegen (.mozilla, Gnome-Configs...)
Ein Login per ssh ist damit nicht möglich. Aber Gnome startet ohne Probleme.
Wenn ich mich in Gnome abmelde, bleibt aber die user@1001.service erhalten.
Ändere ich in /etc/passwd die Shell auf /bin/bash und melde mich per ssh an und wieder ab, ist die user@1001.service auch beendet.
Das RuntimeDirectory wird nämlich nur gelöscht, wenn das Service beendet wird.
Wie bringe ich Gnome bzw. gdm bzw. systemd dazu, den Service nach Beendigung der Gnome-session dieses Service auch zu beenden?
[EDIT]
In /etc/systemd/logind.conf
Den folgenden Punkt auskommentieren und "gast" anfügen:
Code: Alles auswählen
KillOnlyUsers=gast
lg scientific
Zuletzt geändert von scientific am 16.02.2017 16:28:12, insgesamt 1-mal geändert.
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Also meine Erfahrung mit 1GB RAM sind unerfreulich. Ein paar offene Tabs, und schon hängt das System, weil geswappt wird.uname hat geschrieben:2 GB sind ja wohl mehr als genug. Ich habe nur 1 GB.
Du kannst den Cache des Firefox begrenzen und die Art des Cachings ändern. Entweder auf Platte oder RAM. Ok in deinen Fall wäre es ziemlich identischKonfiguriere Firefox in /etc/firefox-esr/firefox-esr.jsAllfällige Konfigurationen würde ich in /etc/skel schreiben.
Schau dir evtl. auch /etc/xdg an.
Gerade Facebook (und ich vermute, das wird auf dem Rechner auch genutzt werden), frisst sich da ziemlich voll.
Aber ich hab die Lösung ohne tempfs eh schon gefunden.
Die anderen Konfig-Geschichten muss ich mir noch zu Gemüte führen. Vielen Dank für die Hinweise..
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
Ich denke mit der Shell /bin/false wird dein Anwender nicht wirklich glücklich
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Stimmt... Ich hab wieder /bin/bash als Shell eingetragen.uname hat geschrieben:Ich denke mit der Shell /bin/false wird dein Anwender nicht wirklich glücklich
Hab das im Ursprungsposting geändert!
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Na das hab ich jetzt gebraucht...
Ich hab die Shell doch nicht auf /bin/false gehabt, sondern auf /bin/bash.
Hab sie auf /bin/false geändert, dann ist der User in gdm verschwunden. Hab sie wieder auf /bin/bash geändert -> Der User bleibt verschwunden in gdm.
Ich hab das Password mit passwd -d gast gelöscht, mit -l gesperrt, mit -u entsperrt... der User bleibt verschwunden.
Lege ich einen weiteren User an, erscheint der sofort in GDM. (per ssh eingeloggt, und dort das Anlegen ausgeführt...)
Lösche ich beide wieder und lege nur einen neuen User an (also die selbe UID wie der ursprüngliche, nicht sichtbare user = 1001), erscheint der sofort, nachdem ich ihm ein Passwort gegeben habe (oder mit passwd -d gast2 gelöscht).
Irgendwo muss in einem Cache der User "gast" gespeichert sein, sodass gdm ihn ausblendet... nur hab ich mich schon durch /etc /var und /tmp gegreppt, aber es findet sich kein "gast"... nirgendwo...
Wo könnte das noch gespeichert sein?
[EDIT]
Ich habs endlich gefunden!!!
hatte die Information, dass es ein SystemAccount wäre... hab das ganze File gelöscht, den User auch und neu angelegt. Jetzt erscheint Gast auch wieder in GDM, nachdem ich ihm ein Passwort gegeben habe (bzw. mit passwd -d gast ein nopassword)
lg scientific
Ich hab die Shell doch nicht auf /bin/false gehabt, sondern auf /bin/bash.
Hab sie auf /bin/false geändert, dann ist der User in gdm verschwunden. Hab sie wieder auf /bin/bash geändert -> Der User bleibt verschwunden in gdm.
Ich hab das Password mit passwd -d gast gelöscht, mit -l gesperrt, mit -u entsperrt... der User bleibt verschwunden.
Lege ich einen weiteren User an, erscheint der sofort in GDM. (per ssh eingeloggt, und dort das Anlegen ausgeführt...)
Lösche ich beide wieder und lege nur einen neuen User an (also die selbe UID wie der ursprüngliche, nicht sichtbare user = 1001), erscheint der sofort, nachdem ich ihm ein Passwort gegeben habe (oder mit passwd -d gast2 gelöscht).
Irgendwo muss in einem Cache der User "gast" gespeichert sein, sodass gdm ihn ausblendet... nur hab ich mich schon durch /etc /var und /tmp gegreppt, aber es findet sich kein "gast"... nirgendwo...
Wo könnte das noch gespeichert sein?
[EDIT]
Ich habs endlich gefunden!!!
Code: Alles auswählen
/var/lib/AccountsService/users/gast
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Und natürlich ist das mit /run und einem "normalen" Verzeichnis Mist...
/run ist ebenfalls ein tmpfs...
lg scientific
/run ist ebenfalls ein tmpfs...
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
Ich würde das Kopieren vom Home mittels pam_mkhomedir automatisieren - ist portabler, weil die uid nicht bekannt sein muß und du noch weitere surf User anlegen könntest.
Über eine ~/.bash_logout mit immutable bit als Schutz vor Veränderungen, könntest du den User beim Abmelden sein ~ auch selbst löschen lassen. $SHLVL = 0 und tschüss ans Eigenheim und zur Sicherheit noch ein rm -rf /home/surf* beim Hochfahren des Systems.
Über eine ~/.bash_logout mit immutable bit als Schutz vor Veränderungen, könntest du den User beim Abmelden sein ~ auch selbst löschen lassen. $SHLVL = 0 und tschüss ans Eigenheim und zur Sicherheit noch ein rm -rf /home/surf* beim Hochfahren des Systems.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Was ist $SHLVL?ThorstenS hat geschrieben:Ich würde das Kopieren vom Home mittels pam_mkhomedir automatisieren - ist portabler, weil die uid nicht bekannt sein muß und du noch weitere surf User anlegen könntest.
Über eine ~/.bash_logout mit immutable bit als Schutz vor Veränderungen, könntest du den User beim Abmelden sein ~ auch selbst löschen lassen. $SHLVL = 0 und tschüss ans Eigenheim und zur Sicherheit noch ein rm -rf /home/surf* beim Hochfahren des Systems.
Ich bin mir grad noch nicht sicher, ob pam_mkhomedir wirklich soviel portabler ist.
Vielleicht liegt das auch daran, dass pam für mich ein ziemlich spanisches Dorf ist... in dem nochdazu Russisch gesprochen wird...
Wie unterscheide ich bei pam zwischen "normalen" Usern und "Surf-Usern"?
Ich hab jetzt mal eine Zwischenlösung, wo ich eine systemd-Unit habe, welche "home/gast" beim Login löscht, /etc/skel-gast nach /home/gast kopiert und die Benutzerrechte auf gast:gast setzt und die mittels Drop-In an die user@UID.service des Gastusers gehängt wird. Diese extra-Unit ist deswegen notwendig, weil ein User, dessen Home noch nicht besteht auf /home keine Schreibrechte hat und damit kein Verzeichnis erstellen darf.
user@UID.service wird aber mit den Benutzerrechten des User ausgeführt, deshalb muss dieser Service zuvor ein Service mit root-rechten triggern, welches das /home/gast anlegen darf.
Das funktioniert jetzt mal gut. Zufrieden bin ich aber noch nicht. Denn ich würd das gern über systemctl en/disable wie andere Services de/aktivieren können, nicht per cp eines Drop-Ins in ein für die ID zu erstellendes Verzeichnis in /etc/systemd/system...
Eventuell erscheint es mir sinnvoll, für Surfuser einen eigenen UID/GID-Kreis zu erstellen... Und genaugenommen benötigt man ohnehin realistischerweise nur einen einzigen Gast-Zugang auf einem Rechner... => Hohe UID/GID bei 64000, und die fix verdrahtet...
Das Löschen am Ende der User-Session (Reboot ist zu spät... Was ist, wenn sich ein USer ausloggt, und der nächste gleich einloggen will, dann hat er erst wieder die Daten des vorherigen in der Session!) funktioniert nur teilweise gut. Denn X logt mittlerweile nach ~/.local/share/... und solange X läuft, lässt sich natürlich das Verzeichnis nicht löschen.
Ich weiß jetzt noch nicht, wie ich ein Service aufrufe, welches NACH Beendigung von user@UID.service läuft.
lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
$SHLVL
steht wohl für shell level oder so ähnlich und gibt an in der wievielten "Tochtershell" man sich befindet. 0 ist also die Shell, die beim Anmelden gestartet wird und wenn man die beendet kann man das ganze Gerümpel, das im Homevzerzeichnis angelegt worden ist, wieder löschen.
steht wohl für shell level oder so ähnlich und gibt an in der wievielten "Tochtershell" man sich befindet. 0 ist also die Shell, die beim Anmelden gestartet wird und wenn man die beendet kann man das ganze Gerümpel, das im Homevzerzeichnis angelegt worden ist, wieder löschen.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ok.
Davon hab ich noch nie gehört...
Na dann werd ich da mal weiterforschen
Vielen Dank
Davon hab ich noch nie gehört...
Na dann werd ich da mal weiterforschen
Vielen Dank
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
zur Variablen SHLVL = SHellLeveL:
In der ~/.bash_logout steht bei mir
D.h. loggg wird ausgeführt, sobald meine login-shell beendet wird.
Das greift aber nicht bei einer grafischen Session - sorry, das hatte
ich falsch in Erinnerung.
Du kennst dich mit systemd weit besser aus als ich und hast eine für dich funktionierende Lösung erstellt.
Die pam-Geschichte brauchst du nicht unbedingt, sieh das folgende einfach als Erweiterung deines Horizonts an.
Zu pam:
Das handling ist gewöhnungsbedürftig - keine Frage. Aber seit debian/squeeze
gibt es pam-auth-update von Steve Langasek (hatte den lenny freeze nur kurz verpasst).
Ruf es einfach mal auf, da siehst du schon vorhandene Profile.
Wenn du etckeeper/git aktiviert hast, siehst du mit einem git diff direkt die Änderungen, die das deaktivieren der einzelnen Module zur Folge hat.
Das handling ist recht bequem, wie ich finde.
So kannst du ganz einfach /usr/share/pam-configs/systemd als Vorlage nehmen und /usr/share/pam-configs/mkhomedir mit folgendem Inhalt anlegen:
Vergleiche auch folgenden Bugreport: https://bugs.debian.org/cgi-bin/bugrepo ... bug=568577
man pam_mkhomedir sagt:
Daher der Verweis auf ein eigenes Skel für deinen Surf-User.
Wenn du einen normalen User anlegen möchtest, greift /etc/skel, weil in der /etc/adduser.conf SKEL=/etc/skel konfiguriert ist.
Darum gibt es für den normalen Betrieb keine Einschränkungen.
Was deine systemd-unit machen muß, ist einfach das homeverzeichnis löschen.
Falls du den lightdm benutzt, kannst du auf session-cleanup-script zurückgreifen (siehe /etc/lightdm/lightdm.conf ). Aber achte darauf, dass du in dem Script $USER auswertest und nur im Falle des/der Surfuser das Homeverzeichnis platt machst
Code: Alles auswählen
$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3
$ exit
exit
$ echo $SHLVL
2
Code: Alles auswählen
# ~/.bash_logout: executed by bash(1) when login shell exits.
# when leaving the console clear the screen to increase privacy
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
/usr/local/bin/loggg
fi
Das greift aber nicht bei einer grafischen Session - sorry, das hatte
ich falsch in Erinnerung.
Du kennst dich mit systemd weit besser aus als ich und hast eine für dich funktionierende Lösung erstellt.
Die pam-Geschichte brauchst du nicht unbedingt, sieh das folgende einfach als Erweiterung deines Horizonts an.
Zu pam:
Das handling ist gewöhnungsbedürftig - keine Frage. Aber seit debian/squeeze
gibt es pam-auth-update von Steve Langasek (hatte den lenny freeze nur kurz verpasst).
Ruf es einfach mal auf, da siehst du schon vorhandene Profile.
Wenn du etckeeper/git aktiviert hast, siehst du mit einem git diff direkt die Änderungen, die das deaktivieren der einzelnen Module zur Folge hat.
Das handling ist recht bequem, wie ich finde.
So kannst du ganz einfach /usr/share/pam-configs/systemd als Vorlage nehmen und /usr/share/pam-configs/mkhomedir mit folgendem Inhalt anlegen:
Code: Alles auswählen
Name: Create home directory during login
Default: yes
Priority: 0
Session-Interactive-Only: yes
Session-Type: Additional
Session:
optional pam_mkhomedir.so skel=/etc/skel-surf
man pam_mkhomedir sagt:
Code: Alles auswählen
pam_mkhomedir.so [silent] [umask=mode] [skel=skeldir]
Wenn du einen normalen User anlegen möchtest, greift /etc/skel, weil in der /etc/adduser.conf SKEL=/etc/skel konfiguriert ist.
Darum gibt es für den normalen Betrieb keine Einschränkungen.
Was deine systemd-unit machen muß, ist einfach das homeverzeichnis löschen.
Falls du den lightdm benutzt, kannst du auf session-cleanup-script zurückgreifen (siehe /etc/lightdm/lightdm.conf ). Aber achte darauf, dass du in dem Script $USER auswertest und nur im Falle des/der Surfuser das Homeverzeichnis platt machst
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ich hab jetzt eine schöne Lösung, rein systemd-basierend gefunden.
Ich erweitere diese noch um die Möglichkeit, das Homeverzeichnis nicht nur zu klonen mittels cp, sondern um die btrfs-Funktion snapshot, falls das auf einem system vorhanden ist.
Diese snapshots kann ich dann explizitbei meinem backupskript ausschließen.
Jetzt steh ich vor der Herausforderung, wie ich so einen Gastzugang so absichere, dass ein allfällig bewanderter User möglichst wenig anstellen kann.
Was sollte ich da beachten?
Ich poste am Abend dann meine vorläufige Lösung, damit die einmal für die Nachwelt dokumentiert bleibt.
Lg scientific
Ich erweitere diese noch um die Möglichkeit, das Homeverzeichnis nicht nur zu klonen mittels cp, sondern um die btrfs-Funktion snapshot, falls das auf einem system vorhanden ist.
Diese snapshots kann ich dann explizitbei meinem backupskript ausschließen.
Jetzt steh ich vor der Herausforderung, wie ich so einen Gastzugang so absichere, dass ein allfällig bewanderter User möglichst wenig anstellen kann.
Was sollte ich da beachten?
Ich poste am Abend dann meine vorläufige Lösung, damit die einmal für die Nachwelt dokumentiert bleibt.
Lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ich hab jetzt viel getestet.
pam_mkhomedir macht prinzipiell das, was ich möchte, jedoch bereitete mir das Löschen des Verzeichnisses größere Probleme.
Die Geschichte mit systemd user@UID.service ist so aufgebaut, dass user@UID.service gestartet bei der ersten Anmeldung eines Users gestartet wird, und nach der letzten Anmeldung wieder beendet. Ein Löschen mittels PAM würde bei einer zweiten Anmeldung und wieder Abmeldung home löschen, obwohl der User ja noch angemeldet ist... (graphisch und z.B. auf einem Text-TTY)
Außerdem legt pam_mkhomedir das Homedir zu spät für systemd an. Ich habe ein paar User-Services mit systemd gestartet, welche eine unit in ~/.config/systemd/user erwarten, sobald user@UID.service gestartet wird. Da existiert das Home aber noch nicht.
Jetzt habe ich es so gelöst. Ich habe mir eine Service-Unit erstellt
/etc/systemd/system/guest-home@.service
Diese Unit erstellt das Home-Verzeichnis des Gast-Users direkt nach dem ersten Login und löscht es wieder nach dem letzten Logout.
Die folgende Unit erstellt einen Gastuser nach dem booten und löscht den wieder vor dem Runterfahren.
/etc/systemd/system/guest-session@.service
Damit das nach dem nächsten Reboot auch passiert, ist folgendes auszuführen:
für $USERNAME ist das einzufügen, was man am GDM stehen haben will. Also z.B. "Gast" oder "Surfuser"
Damit es gleich funktioniert ist nach "enable" noch "--now" einzufügen, damit wird nicht nur der Symlink erstellt, sondern der Service auch gleich gestartet.
In der ersten Unit (guest-home@.service) wird noch ein Skript aufgerufen, welches auf das Vorhandensein eines btrfs prüft und davon abhängig von /etc/skel-gast einen Snapshot macht, oder dieses Verzeichnis nur nach /home/$username kopiert.
Den Snapshot für Home (falls möglich) benötige ich, dass ich diesen für die Backups ausschließen kann, damit da nicht irrtümlich etwas im Backup landet, oder dieses mit Surfprofilen vollgemüllt wird.
/etc/systemd/system/scripts/guest-session-homedir.sh
lg scientific
PS: Ich habe diese 3 Units/Skripte in mein Repo integriert. Das Paket heißt my-services und ist in der Sig zu finden.
pam_mkhomedir macht prinzipiell das, was ich möchte, jedoch bereitete mir das Löschen des Verzeichnisses größere Probleme.
Die Geschichte mit systemd user@UID.service ist so aufgebaut, dass user@UID.service gestartet bei der ersten Anmeldung eines Users gestartet wird, und nach der letzten Anmeldung wieder beendet. Ein Löschen mittels PAM würde bei einer zweiten Anmeldung und wieder Abmeldung home löschen, obwohl der User ja noch angemeldet ist... (graphisch und z.B. auf einem Text-TTY)
Außerdem legt pam_mkhomedir das Homedir zu spät für systemd an. Ich habe ein paar User-Services mit systemd gestartet, welche eine unit in ~/.config/systemd/user erwarten, sobald user@UID.service gestartet wird. Da existiert das Home aber noch nicht.
Jetzt habe ich es so gelöst. Ich habe mir eine Service-Unit erstellt
/etc/systemd/system/guest-home@.service
Code: Alles auswählen
[Unit]
Description=Create and delete $HOME for Guest-Session USER: %i
Before=user@%i.service
#BindsTo=user@%i.service guest-session@%i.service
Conflicts=shutdown.target
BindsTo=user@%i.service
#RefuseManualStart=true
[Service]
Type=oneshot
RemainAfterExit=true
Environment="SOURCE='/etc/skel-gast'"
ExecStartPre=/bin/sh -c '/bin/systemctl set-environment UHOME=$(getent passwd %i | cut -d: -f6)'
ExecStartPre=/etc/systemd/system/scripts/guest-session-homedir.sh create /etc/skel-gast "$UHOME"
ExecStart=/bin/chown -R %i:%i "$UHOME"
ExecStop=-/etc/systemd/system/scripts/guest-session-homedir.sh delete "$UHOME"
[Install]
WantedBy=user@%i.service
Die folgende Unit erstellt einen Gastuser nach dem booten und löscht den wieder vor dem Runterfahren.
/etc/systemd/system/guest-session@.service
Code: Alles auswählen
[Unit]
Description=Create guest-user (%i) and activate volatile $HOME for it
[Service]
RemainAfterExit=true
ExecStartPre=/bin/sh -c '/bin/systemctl set-environment UNAME=$(echo %i|tr '[:upper:]' '[:lower:]' )'
ExecStartPre=/usr/sbin/adduser --no-create-home --gecos "%i" --disabled-password $UNAME
ExecStartPre=/bin/sh -c '/bin/systemctl set-environment GUESTUID=$(/usr/bin/id -u $UNAME )'
ExecStartPre=/usr/bin/passwd -d $UNAME
#ExecStartPre=/bin/sh -c '/bin/systemctl daemon-reload'
#ExecStart=/bin/echo $GUESTUID
ExecStart=/bin/sh -c "/bin/systemctl enable guest-home@$GUESTUID.service"
ExecStop=/bin/sh -c "/bin/systemctl disable guest-home@$GUESTUID.service"
ExecStopPost=/usr/sbin/deluser --remove-home $UNAME
[Install]
WantedBy=multi-user.target
Code: Alles auswählen
systemctl enable guest-session@$USERNAME.service
Damit es gleich funktioniert ist nach "enable" noch "--now" einzufügen, damit wird nicht nur der Symlink erstellt, sondern der Service auch gleich gestartet.
In der ersten Unit (guest-home@.service) wird noch ein Skript aufgerufen, welches auf das Vorhandensein eines btrfs prüft und davon abhängig von /etc/skel-gast einen Snapshot macht, oder dieses Verzeichnis nur nach /home/$username kopiert.
Den Snapshot für Home (falls möglich) benötige ich, dass ich diesen für die Backups ausschließen kann, damit da nicht irrtümlich etwas im Backup landet, oder dieses mit Surfprofilen vollgemüllt wird.
/etc/systemd/system/scripts/guest-session-homedir.sh
Code: Alles auswählen
#!/bin/bash
#create or delete volatile homedir for a guest-session depending wheter btrfs is available or not.
BTRFS="/bin/btrfs"
RSYNC="/usr/bin/rsync"
MKDIR="/bin/mkdir"
RM="/bin/rm"
check_btrfs () {
FS=$(stat -f --format=%T "$1")
if [ "$FS" = "btrfs" ]; then
return 0
else
return 1
fi
}
check_btrfs_subvolume () {
FS=$(stat --format=%i "$1")
if [ $FS -eq 256 ]; then
return 0
else
return 1
fi
}
delete_home () {
echo "delete home $DST"
if [ -d "$DST" ]; then
if check_btrfs_subvolume "$DST"; then
$BTRFS subvolume delete -c "$DST"
else
$RM -rf "$DST"
fi
fi
}
create_home () {
echo "XXX $UID $SRC $DSTDIR $DST"
if check_btrfs "$SRC"; then
if check_btrfs "$DSTDIR"; then
if check_btrfs_subvolume "$SRC"; then
$BTRFS subvolume snapshot "$SRC" "$DST"
else
$BTRFS subvolume create "$DST"
$RSYNC -a "$SRC/" "$DST"
fi
else
$MKDIR "$DST"
$RSYNC -a "$SRC/" "$DST"
fi
else
if check_btrfs "$DST"; then
$BTRFS subvolume create "$DST"
else
$MKDIR "$DST"
fi
$RSYNC -a "$SRC/" "$DST"
fi
}
while :
do
case $1 in
create)
shift
export SRC="$(dirname "$1")/$(basename "$1")"
export DST="$(dirname "$2")/$(basename "$2")"
export DSTDIR="$(dirname $DST)"
delete_home
create_home
break
;;
delete)
shift
export DST="$(dirname "$1")/$(basename "$1")"
export DSTDIR="$(dirname $DST)"
delete_home
break
;;
*)
exit 1
esac
done
PS: Ich habe diese 3 Units/Skripte in mein Repo integriert. Das Paket heißt my-services und ist in der Sig zu finden.
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
klingt nach einer runden Lösung - danke fürs Dokumentieren.
Ich baue das mal nach, wenn ich den Rechner zu Hause auf stretch umstelle
Ich baue das mal nach, wenn ich den Rechner zu Hause auf stretch umstelle
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ein paar Kleinigkeikten fehlen noch.
Eine Default-Auswahl von /etc/skel, falls /etc/skel-gast nicht vorhanden ist, bzw. /etc/skel$username statt /etc/skel-gast, damit sind dann mehrere unterschiedliche User mit verschiedenen Einstellungen möglich.
Z. B. Voreingestellte Desktop-Sprachen ode4 unterschiedliche Dienste im Userumfeld (systemd --user...)
Die exclude-Funktion in meinem Backupskript fehlt ebenfalls noch.
Wenn ichs fertig habe, lagere ich den Gastzugang als eigenständiges Paket aus. So kannst du einfach das deb runterladen und mit dpkg -i installieren.
Lg scientific
Eine Default-Auswahl von /etc/skel, falls /etc/skel-gast nicht vorhanden ist, bzw. /etc/skel$username statt /etc/skel-gast, damit sind dann mehrere unterschiedliche User mit verschiedenen Einstellungen möglich.
Z. B. Voreingestellte Desktop-Sprachen ode4 unterschiedliche Dienste im Userumfeld (systemd --user...)
Die exclude-Funktion in meinem Backupskript fehlt ebenfalls noch.
Wenn ichs fertig habe, lagere ich den Gastzugang als eigenständiges Paket aus. So kannst du einfach das deb runterladen und mit dpkg -i installieren.
Lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
So. Ich habs in ein eigenes Paket ausgelagert.
Du findest es hier https://github.com/xundeenergie/guestsession
Achtung, das ist noch in Entwicklung.
Ich lerne gerade die deb-helper fürs Paketieren zu nutzen. Daher ist nicht jede Version sauber zu installieren.
Im Github-Repo findest du aber die notwendigen Files in /etc/systemd...
Die kannsu du auch manuell kopieren.
Lg scientific
Du findest es hier https://github.com/xundeenergie/guestsession
Achtung, das ist noch in Entwicklung.
Ich lerne gerade die deb-helper fürs Paketieren zu nutzen. Daher ist nicht jede Version sauber zu installieren.
Im Github-Repo findest du aber die notwendigen Files in /etc/systemd...
Die kannsu du auch manuell kopieren.
Lg scientific
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
Sehr schön. Du solltest aber noch die von dir gewünschte Lizenz hinzufügen.
-
- Beiträge: 3022
- Registriert: 03.11.2009 13:45:23
- Lizenz eigener Beiträge: Artistic Lizenz
-
Kontaktdaten:
Re: Gastzugang mit temporärem home
Ja ich weiß. Es wird die LGPL.
dann putze ich hier mal nur...
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie
auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main
Re: Gastzugang mit temporärem home
Dass Du statt GPL "nur" LGPL verwendest ist nachvollziehbar, da es wenig Sinn macht, dass der Anwender evtl. Änderungen an der Software offenlegt.
Trotzdem würde ich gerne wissen, ob Gründe für oder gegen die MIT License (MIT) sprechen bzw. wo die Unterschiede zur LGPL liegen.
Vielleicht kennt sich jemand damit aus.
Trotzdem würde ich gerne wissen, ob Gründe für oder gegen die MIT License (MIT) sprechen bzw. wo die Unterschiede zur LGPL liegen.
Vielleicht kennt sich jemand damit aus.