Czy istnieje standardowy symboliczny link do bieżącego katalogu domowego użytkowników?


9

Powłoka może rozwinąć się ~do twojego katalogu domowego. $HOMEzwykle ma tę samą ofertę, ale często chcesz odwoływać się do katalogu domowego bieżących użytkowników z kontekstu, który może nie obsługiwać takiego rozszerzenia.

Miałem pliki konfiguracyjne, w których $HOMEdziała, ale ~nie działa i odwrotnie.

Domyślam się, że bezpiecznik może zapewnić coś w tym stylu, coś w stylu /var/myself->$HOME

Dzięki temu mogłem umieszczać wartości w plikach konfiguracyjnych, aby wskazywały na takie rzeczy /var/myself/backdrops/pornography/wtf/yarly.jpg

Czy jest już coś takiego? Jeśli nie, to czy istnieją dobre powody, aby czegoś takiego nie było?


2
To naprawdę wydaje się być naprawdę dobrym pomysłem, a bezpiecznik mógłby to zrobić dość trywialnie, jeśli dobrze pamiętam interfejs
Michael Mrozek

Odpowiedzi:


6

Rozumiem twoją troskę, ale odpowiedź brzmi „nie”, nie ma czegoś takiego.
Typową metodą jest zapytanie systemu operacyjnego o ścieżkę domową użytkownika lub uzyskanie zmiennej $ HOME.

Wszystkie te opcje wymagają zawsze trochę kodowania z aplikacji. Wiele aplikacji, takich jak bash, oferuje „alias” ~ (open (2) tego nie tłumaczy).

Oczywiście w tym celu można zaimplementować moduł VFS lub moduł bezpieczników. Prawdopodobnie jest coś do zrobienia, zapytam o to!

Ale czy to naprawdę potrzebne? Możesz użyć obejścia takiego jak:



0

Jedną sztuczką (przynajmniej w systemie Linux) byłoby przejście do katalogu $HOMEprzed uruchomieniem aplikacji, a następnie użycie go /proc/self/cwd/...w pliku konfiguracyjnym.


Podoba mi się hackactwo tego, ale przypuszczalnie miałoby to problemy, gdy proces zmienia bieżący katalog. Chciałbym / proc / PID / iwd dla początkowego katalogu roboczego.
Lerc

... a jeśli o to chodzi, to / proc / PID / home
Lerc

@Lerc, jeśli to się dzieje w pliku konfiguracyjnym to musi być /proc/selfnie /proc/PID, ponieważ nie można z góry wiedzieć, co PID będzie.
Neil Mayhew

@Lerc, tak, jeśli proces zmieni katalog, to się nie powiedzie, ale zwykle programy czytają plik konfiguracyjny raz, gdy się uruchamiają, a następnie buforują wartości w pamięci. Wszystko zależy od programu, z którym pracujesz, a jeśli program nie oferuje wystarczającej elastyczności, czy to w wierszu poleceń, czy w składni pliku konfiguracyjnego, utkniesz.
Neil Mayhew

Tak, miałem na myśli / proc / PID / home, co oznaczało, że wszystkie katalogi proc / PID powinny to wspierać, a tym samym obejmują / proc / self
Lerc

0

Większość programów pozwala określić ścieżkę do pliku konfiguracyjnego w wierszu poleceń. Możesz więc napisać opakowanie, które pobiera standardowy plik konfiguracyjny, filtruje go, aby zastąpić rzeczy takie jak $HOMEdla bieżącego użytkownika, a następnie przekazuje zmodyfikowany, tymczasowy plik konfiguracyjny do programu.


Jeśli to zrobisz, skutecznie zabierzesz możliwość określenia ścieżki do pliku konfiguracyjnego od użytkownika. Może być wykonalne, jeśli masz ochotę na rajd z exe opakowania.
Lerc

0

Możesz uzyskać identyfikator pid użytkownika i zapytać system jego katalogu domowego. Więc jest to możliwe.

Nie jestem jednak pewien, czy nie ma programów SUID, które zakładałyby FS jako statyczny.

Edytować:

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
} 

Powyższy kod nie jest idealny, ale powinien działać w typowych przypadkach.


Jak znajdziesz jego katalog domowy po tym, jak dowiesz się, jaki to użytkownik?
WhyNotHugo

Za pomocą getpwuidlub getpwuid_r.
Maciej Piechotka,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.