Wydaje się, że dzieje się tu coś zaskakującego…
Backticks oczywiście robią to, co wyjaśnili inni, rozwijając się whoamiprzed wywołaniem „sudo” i pozostawiając backticks off zwracają „root”, zgodnie z oczekiwaniami.
Ale warto zrozumieć, co tak naprawdę dzieje się z sudo (8). Więc faktycznie spojrzałem na stronę podręcznika!
„Rzeczywisty i skuteczny identyfikator UID i GID są ustawione tak, aby pasowały do docelowych użytkownika…”
Wygląda więc na to, że obserwowane zachowanie nie ma nic wspólnego z różnicą między efektywnym a rzeczywistym identyfikatorem użytkownika.
Ilustruje to także wykonanie „sudo printenv” i porównanie do samego „printenv”, co mnie trochę zaskoczyło. Pokazuje, że [i] niektóre [/ i] wyeksportowane zmienne są dostępne, a inne nie: zgłasza HOME, ŚCIEŻKA, PS1, SHELL, TERM i EDYTORA wywołującego użytkownika, ale nie inne, takie jak MANPATH, CVSROOT, LD_LIBRARY_PATH lub ENV. Wydaje się to nieco dziwne, ponieważ może powodować, że programy zachowują się inaczej niż jako pierwotny użytkownik lub jako root.
whoami? Po prostu powiedz sudo whoami .. zwraca root