Jak mogę uzyskać sudo -u $ user do korzystania z env użytkowników?

19

Wydaje sudosię, że podczas korzystania z sudo -u $usertego środowiska root nadal jest używane. Jak mogę sudokorzystać ze środowiska użytkownika? jako specjalną notatkę nie wszyscy użytkownicy, z których będę tego używał, mają powłoki logowania.

ksenoterracid
źródło
Zdefiniuj „środowisko”. # whoami => root # sudo -u user whoami => user
alex
1
@alex I rysunek sudo -u userjest analogiczny do su userzmiany env w su musisz użyćsu - user
xenoterracide
Ale co masz na myśli przez „środowisko użytkownika”, jeśli użytkownik nie ma powłoki logowania?
Thomas Themel,
@Thomas użytkownicy mogą uruchamiać programy, nawet jeśli nie są w stanie wykonać powłoki ... Wierzę, że -urównież ignorują grupy ... Próbowałem czegoś z rootem (używając sudo -u down) i zadziałało, najwyraźniej nie zadziałało dla użytkownika. .. więc muszę się upewnić, że uruchamiam polecenia w sposób, który miałby wszystkie ograniczenia i problemy środowiskowe.
Xenoterracide

Odpowiedzi:

21

Próbować sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Gerald Schneider
źródło
niestety nie działa, jeśli nie ma powłoki w /etc/passwd:( ale chyba zrobi to ...
xenoterracide
Patrząc na stronę podręcznika, wydaje się, że -Ejest to ta, która chroni środowisko, tzn. Wszystkie zmienne środowiskowe itp. Istnieją, chociaż nadal nie jest ustawiona PATHi LD_LIBRARY_PATHdla wywołującego użytkownika.
Shahbaz
1
$SUDO_USERmożna użyć
Rahul Patil
4

man sudoersw Debianie wspomina o innej możliwości. Nie jestem pewien, w którą stronę chcesz, ale twoje pytanie brzmi, jakbyś chciał mieć env_resetopcję /etc/sudoers- przeciwnie jest w zasadzie env_keeplista. W celu ustalenia właściwego HOMEmożna użyć -Hopcji sudobezpośrednio lub ponownie sudoers, z always_set_homeopcją.

Alternatywnie możesz użyć env_filedo określenia dokładnego środowiska, które chcesz przekazać. Myślę jednak, że najlepiej jest sprawdzić env_*opcje man sudoers, ponieważ /etc/sudoerswszystko kontroluje i o to warto się zwrócić.

Oto część kontekstu, w którym używam env_resetwewnątrz mojego sudoerspliku:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
0xC0000022L
źródło
1

Kiedy sudoing zmienne środowiskowe nie są zachowywane.

W moim przypadku używam tutaj dokumentu .

Umieszczasz swoje działania np. W my_script.shTUTAJ DOKUMENCIE:

su -u some_user <<EOF
./my_script.sh
EOF

Nie powinieneś umieszczać tutaj zmiennej bezpośrednio, ponieważ byłyby one interpretowane przez bieżącego użytkownika.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Jeśli $MY_VARnie zostanie ustawione dla użytkownika uruchamiającego skrypt, nie zostanie ustawione.

Zmienna musi być wywoływana w skryptach lub musisz uciec przed nimi \.

Na przykład.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Tutaj $MY_VARbędzie miał some_userwartość kontekstową.

Juaniyyoo
źródło
Dobra odpowiedź. Jedna mała poprawka: powinna być su - some_userzamiast su -u some_user.
rudolfbyker