[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Homeverzeichnis in /etc/passwd als relativer Pfad
[Thread Prev] | [Thread Next]
- Subject: Homeverzeichnis in /etc/passwd als relativer Pfad
- From: Raphael Eiselstein <rabe@xxxxxxxxx>
- Date: Fri, 26 Oct 2012 01:16:26 +0200
- To: uugrn@xxxxxxxxxxxxxxx
Hallo zusammen, ich habe hier ein Standard-Setup, bei dem ein bestimmter Unix-User cronjobs ausfuehren koennen soll. In der Regel sind das irgendwelche Filetransfer-Operationen, zB rsync, rsync+ssh, sftp oder whatever, auch in Kombination mit GnuPG. Das ganze Setup ist so gegliedert, dass es es fuer jeden Job ein unabhaengiges Verzeichnis gibt, unter welchem es einen sehr einfachen Unter-FHS gibt, bei dem es wenige Standard-Verzeichnisse und Symlinks gibt, zB ./conf/ ./tmp/ ./run/ ./spool/ ... Randbedinung ist: Ein Framework (Startscript) sorgt dafuer, dass direkt beim Start eines Jobs, zB /opt/foo/kram/tools/job42/blafasel.sh in das Verzeichnis gewechselt wird, in dem das Script (blafasel.sh) liegt, etwa so: #! /bin/bash cd -P "$(dirname "$0")" Eine Anforderung ist, dass alles, was im Zusammenhang mit einem Job passiert sich nur innerhalb dieses Verzeichnisses abspielt, also auch zum Beispiel die Konfiguration der eingesetzten Tools, zb ~/.ssh/ ~/.wgetrc ~/.netrc ~/.gnupg/. Das bedeutet, dass ein tool gefahrlos Daten in ./tmp/ ablegen kann, weil sicher gestellt ist, dass keine anderen Prozesse dort ebenfalls Daten hinlegen. Wenn man statt ~/.ssh/ lieber ein /opt/foo/kram/tools/job42/conf/.ssh/ verwenden will, kann man zB mit ssh -F /opt/foo/kram/tools/job42/conf/.ssh/config die dort liegende Konfiguration verwenden und dort wiederum alle Default-Dateinamen von ~/.ssh/* nach /opt/foo/kram/tools/job42/conf/.ssh/* konfigurieren, soweit moeglich. Leider laesst sich das scheinbar nicht per Umebungsvariable steuern (anders als zB bei wget, bei dem $HOME verwendet wird), sodass es zB bei einem rsync+ssh nicht ohne Weiteres moeglich ist, den Parameter "-F /opt/foo/kram/tools/job42/conf/.ssh/config" mitzugeben. Es ging in diesem Fall schon, ist aber haesslich und fehleranfaellig. Auf der Suche nach einer *einfachen* Loesung bin ich zu einem fuer mich selbst eher ueberraschenden Workaround gekommen: in /etc/passwd habe ich als Homeverzeichnis fuer den Tooluser einfach "./conf" hinterlegt. Abhaengig vom aktuellen Verzeichnis wuerde nun zB ssh oder was auch immer gerade aktiv ist ausgehend vom aktuellen verzeichnis in ./conf zugreifen. Ausserdem wird fuer alle anderen Tools auch $HOME entsprechend auf ./conf gesetzt. Tatsaechlich funktioniert das auch praechtig, zu mindest ssh(1) liess sich da relativ schmerzfrei "ueberlisten" und hat also brav per Default nach /opt/foo/kram/tools/job42/conf/.ssh/config gesucht statt in /home/tooluser/.ssh/ Die Frage ist nun: welche konkrete Gefahr besteht (unabhaengig davon, dass sich dieses Verhalten aendern koennte) grundsaetzlich bei einem "relativen Homeverzeichnis" BTW: es ist per default fuer den Tooluser nicht schreibbar, damit kein Tool durch Fehlkonfiguration sich selbst oder seine Config loeschen oder ueberscheiben kann. Kann man ssh(1) auf eine schonendere Weise beibringen, dass es per default nach $PWD/conf/.ssh/config suchen soll statt nach ~/.ssh/config Environment? Globale Konfiguration (sollte jedoch nur fuer den Tooluser zutreffen!) Neu kompilieren? Andere Moeglichkeiten, damit ssh (nur fuer den Benutzer, nicht fuer die ganze Maschine!) per default nicht in ~/.ssh/ sondern in einem variablen default-Verzeichnis sucht? Viele Gruesse Raphael -- Raphael Eiselstein <rabe@xxxxxxxxx> http://rabe.uugrn.org/ xmpp:freibyter@xxxxxx | https://www.xing.com/profile/Raphael_Eiselstein GnuPG: E7B2 1D66 3AF2 EDC7 9828 6D7A 9CDA 3E7B 10CA 9F2D .........|.........|.........|.........|.........|.........|.........|.. -- UUGRN e.V. http://www.uugrn.org/ http://mailman.uugrn.org/mailman/listinfo/uugrn Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste Archiv: http://lists.uugrn.org/