[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Homeverzeichnis in /etc/passwd als relativer Pfad


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/