Jeśli utworzę skrypt /root/bin/whoami.sh
zawierający:
#!/bin/bash
whoami
a ten skrypt jest wywoływany przez użytkownika z odpowiednio skonfigurowanym sudo, to wskaże
root
Czy istnieje szybki sposób uzyskania rzeczywistego użytkownika w skrypcie, czy też będę musiał uciekać się do parametrów przekazanych wraz z tą nazwą użytkownika?
who am i
to odpowiedź tutaj.who am i
jestwho mom likes
. Twój wybór.who
zwraca dla mnie 2 wiersze, oba zawierają moje imię i nazwisko, iwho am i
nie zwraca żadnego. Jakaś pomoc?who am i
nic nie robi, wydaje się prostewho
, więcwho | awk '{print $1}'
działa zgodnie z oczekiwaniami;)awk
zainstalował, możesz również użyćcut
:who mom likes | cut -d' ' -f1
lubsed
z jakiegoś powodu:who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
Myślę, że $ SUDO_USER jest ważny.
źródło
sudo env
pokazuje,SUDO_USER
alesudo echo $SUDO_USER
nic nie drukuje ...sudo echo $SUDO_USER
, bash ocenia $ SUDO_USER przed wykonaniem sudo. wypróbuj skrypt zamieszczony w tym rozwiązaniu, działa.echo ${SUDO_USER:-$USER}
aby złapać zarównosudo
bieganie, jak i inne niż sudo. Ale odpowiedźlogname
evana brzmi łatwiej$SUDO_USER
nie działa zsudo su -
, alelogname
zawsze działa.Oto jak uzyskać nazwę użytkownika osoby, która wywołała skrypt, bez względu na to, czy sudo, czy nie:
lub krótsza wersja
źródło
user=${SUDO_USER:-$(whoami)}
lubuser=$(logname)
who am i | awk '{print $1}'
nie działał dla mnie, alewho|awk '{print $1}'
będzie służył tej pracyźródło
Co dziwne, system rozróżnia rzeczywiste i skuteczne identyfikatory UID , ale nie mogę znaleźć programu, który eksportuje to na poziomie powłoki.
źródło
Korzystanie
whoami
,who am i
,who
,id
lub$SUDO_USER
nie jest tutaj.Właściwie
who
nigdy nie jest rozwiązaniem tego pytania, ponieważ zawiera tylko listę zalogowanych użytkowników, których może być dziesiątki ...Moim zdaniem jedyną cenną odpowiedzią jest użycie
logname
.Mam nadzieję że to pomoże
Obrabować
źródło
Jeśli jest to UID, którego szukasz (przydatny do szaleństw dokerów), to działa:
źródło