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@...> http://rabe.uugrn.org/
xmpp:freibyter@... | 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/