Esiste un collegamento simbolico standard alla home directory degli utenti attuali?


9

La shell può espandersi ~nella directory principale. $HOMEdi solito ha lo stesso affare, ma spesso si desidera fare riferimento alla home directory degli utenti correnti da un contesto che potrebbe non supportare tale espansione.

Ho avuto file di configurazione dove $HOMEfunziona ma ~non funziona e viceversa.

Immagino che la miccia possa fornire qualcosa in questo senso, qualcosa del tipo /var/myself->$HOME

Con ciò ho potuto inserire i valori nei file di configurazione per indicare cose come /var/myself/backdrops/pornography/wtf/yarly.jpg

C'è già qualcosa del genere? In caso contrario, ci sono buone ragioni per non esserci qualcosa del genere?


2
Questa in realtà sembra una buona idea e Fuse potrebbe farlo in modo abbastanza banale se ricordo correttamente l'interfaccia
Michael Mrozek

Risposte:


6

Capisco la tua preoccupazione, ma la risposta è "no" non esiste.
Il solito metodo è chiedere al SO il percorso home dell'utente o ottenere la variabile $ HOME.

Tutte queste opzioni richiedono sempre un po 'di codice dall'applicazione. Molte applicazioni, come bash, offrono "alias" ~ (open (2) non lo traduce).

Ovviamente un vfs o un modulo fusibili potrebbero essere implementati per fare questo. Probabilmente c'è qualcosa da fare, lo chiederò!

Ma è davvero necessario? È possibile utilizzare una soluzione alternativa come:



0

Un trucco (almeno su Linux) sarebbe quello di cambiare directory $HOMEprima di eseguire l'app e quindi utilizzarla /proc/self/cwd/...nel file di configurazione.


Mi piace la seccatura di questo, ma presumibilmente potrebbe incorrere in problemi se il processo cambia la directory corrente. Vorrei un / proc / PID / iwd per la directory di lavoro iniziale.
Lerc,

... e del resto a / proc / PID / home
Lerc,

@Lerc, se sta andando in un file di configurazione ha bisogno di essere /proc/selfnon /proc/PID, dal momento che non si può sapere in anticipo ciò che il PID sta per essere.
Neil Mayhew,

@Lerc, sì, se il processo cambia directory allora fallirebbe, ma in genere i programmi leggono il file di configurazione una volta all'avvio, quindi memorizzano nella cache i valori in memoria. Tutto dipende dal programma con cui stai lavorando, e se il programma non offre abbastanza flessibilità, né nella riga di comando né nella sintassi del file di configurazione, allora sei bloccato.
Neil Mayhew,

Sì, intendevo / proc / PID / home per indicare che tutte le directory proc / PID dovrebbero supportare questo e quindi includere / proc / self
Lerc,

0

La maggior parte dei programmi consente di specificare un percorso per il file di configurazione sulla riga di comando. Quindi potresti scrivere un wrapper che prende un file di configurazione standard, lo filtra per sostituire cose come $HOMEper l'utente corrente e quindi passa il file di configurazione temporaneo modificato al programma.


Se lo fai, hai effettivamente preso la possibilità di specificare un percorso per il file di configurazione lontano dall'utente. Potrebbe essere fattibile se ti piacciono i rally con un exe wrapper.
Lerc,

0

Puoi ottenere il pid dell'utente requestin e chiedere al sistema della sua directory home. Quindi è possibile

Tuttavia non sono sicuro che non ci siano programmi SUID che considerino FS statico.

Modificare:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

Il codice sopra non è l'ideale ma dovrebbe funzionare per i casi più comuni.


Come troveresti la sua home directory dopo aver saputo di che utente si tratta?
WhyNotHugo,

Utilizzando getpwuido getpwuid_r.
Maciej Piechotka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.