Powłoka może rozwinąć się ~
do twojego katalogu domowego. $HOME
zwykle 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 $HOME
dział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?
Odpowiedzi:
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:
Utwórz skrypt, aby uruchomić program, który łączy $ HOME ze ścieżką względną lub znaną lokalizacją.
Użyj pam_exec, aby połączyć katalog $ HOME ze znaną lokalizacją http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
źródło
Jedną sztuczką (przynajmniej w systemie Linux) byłoby przejście do katalogu
$HOME
przed uruchomieniem aplikacji, a następnie użycie go/proc/self/cwd/...
w pliku konfiguracyjnym.źródło
/proc/self
nie/proc/PID
, ponieważ nie można z góry wiedzieć, co PID będzie.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
$HOME
dla bieżącego użytkownika, a następnie przekazuje zmodyfikowany, tymczasowy plik konfiguracyjny do programu.źródło
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ć:
Powyższy kod nie jest idealny, ale powinien działać w typowych przypadkach.
źródło
getpwuid
lubgetpwuid_r
.