Pobierz użytkownika do domu podczas wykonywania sudo w skrypcie uruchamianym przez root

2

Na stronie sudo znalazłem -Hopcję, ale nie rozumiem, jak to działa. Strona zawiera:

Opcja -H (HOME) ustawia zmienną środowiskową HOME na katalog główny użytkownika docelowego (domyślnie root), jak określono w passwd (5).

W moim rozumieniu nie powinno się zdarzyć:

root $ sudo -u sztomi -H echo $HOME
/root

Zamiast tego powinien /home/sztomiwypisać, który jest katalogiem domowym użytkownika sztomi.

Jak mogę to zrobić dobrze?

Tamás Szelei
źródło

Odpowiedzi:

4

Nie cytowałeś $HOME, więc bieżąca wartość jest zastępowana przed wykonaniem polecenia sudo . Otocz go pojedynczymi cytatami (').


EDYTOWAĆ:

Jak zauważyliśmy (patrz komentarze), sudo nie wywołuje podpowłoki w celu uruchomienia podanego polecenia (dlatego nie ma rozszerzenia powłoki $HOME). Zmienione polecenie będzie:

 sudo -u sztomi -H bash -c 'echo $HOME'

Wyjaśnione: sudoprzełącza identyfikator użytkownika, a następnie wywołuje bashpowłokę, która z kolei przyjmuje echo $HOMEzmienną, zastępuje zmienną HOMEjej wartością i ostatecznie wykonuje echopolecenie.

Zauważ, że wywołanie podpowłoki jest konieczne tylko w tym przykładzie, aby zmienna została HOMEpodstawiona po zmianie przez sudo ID użytkownika. Nie jest konieczne, jeśli chcesz uruchomić pojedynczy program bez podstawiania zmiennych w środowisku docelowym.

ktf
źródło
Daje to wynik $ HOME (bez rozszerzenia)
Tamás Szelei,
1
hmm - brzmi jak brak pośredniego procesu powłoki. Spróbuj:sudo -u sztomi -H bash -c 'echo $HOME'
ktf,
Tak, to działa. Czy to możliwe, że to kreska z powłoki, a nie walnięcie? W każdym razie proszę dodać to do odpowiedzi, abym mógł zaakceptować :)
Tamás Szelei,
0

Powinieneś być w stanie użyć ~ sztomi, aby uzyskać zmienną środowiskową.

Na przykład spowoduje to wyświetlenie zawartości do domowego katalogu sztomi.

sudo -u sztomi ls ~sztomi
jim0thy
źródło
Gdyby tylko działało z ~$username...
grawity