Skrypt wykonywany, gdy inny użytkownik z katalogu głównego tworzy pliki w niewłaściwym katalogu (root)

0

Uruchamiam skrypt bash z perspektywy roota, która następnie uruchamia program w skrypcie

su -c "sh /home/user2/script.sh" -m user2

Problem polega na tym, że program uruchamiany przez ten skrypt, mimo że jest uruchamiany jako użytkownik2 , nadal próbuje utworzyć pliki w katalogu /root/.config/ , co oczywiście kończy się niepowodzeniem, ponieważ nie jest dozwolone przez użytkownika2 .

Czy robię coś źle? Czy istnieje inny lepszy sposób na faktyczną zmianę użytkownika w skrypcie, wprowadzenie hasła użytkownika i uruchomienie programu?

NaturalBornCamper
źródło
2
Ten -mparametr zachowuje środowisko powłoki wywołującej, więc $HOMEpozostanie ustawiony na, /rootjeśli zostanie wywołany z powłoki root. Dlaczego go używałeś? I dlaczego dzwonisz do powłoki Bourne'a, aby uruchomić bashskrypt?
AFH
Och, wow, dziękuję. Myślałem, że parametr „m” był zbyt precyzyjny dla użytkownika, całkowicie niezrozumiany, gdy wziąłem to polecenie z innego pytania o przepełnienie skrytki.
NaturalBornCamper
O skorupie Bourne'a… to wszystko, czego kiedykolwiek użyłem, nie wiedziałem, że nie powinienem zawsze jej używać
NaturalBornCamper
Twoje pytanie jest otagowane [bash]i zaczyna się od: „Uruchamiam skrypt bash ...”. W dzisiejszych czasach nie jest używane Bash, ponieważ jest to domyślna powłoka w większości dystrybucji Linuksa. Jeśli twój skrypt zaczyna się od #!/bin/bashlub #!/bin/sh, to określi, która powłoka jest używana, niezależnie od powłoki, z której został uruchomiony. Na marginesie, jest to wspólny program shi bashjest to ten sam program, z przełącznikami określającymi, jakiej składni należy użyć. Odpowiem na twoje pytanie, aby inni mogli zobaczyć, że jest odpowiedź,
AFH

Odpowiedzi:

2

Jeśli użyjesz -mparametru z su, przekaże on twoje aktualne środowisko do wykonywanego polecenia lub powłoki. W szczególności $HOMEzmienna zostanie ustawiona na wartość w powłoce wywołującej i nie będzie określana przez wywoływanego użytkownika.

Tak więc, jeśli jesteś zalogowany jako root, $HOMEpozostanie /rooti pozostanie taki, kiedy wykonasz script.shpod su -m. O ile nie istnieją inne elementy środowiska, które chcesz zachować, można po prostu pominąć -mz surozmowy.

AFH
źródło
Wow, wielkie dzięki! +1 za pełne wyjaśnienia, mam nadzieję, że ktoś może tego użyć. Używam Linuksa od jakiegoś czasu, ale jako amator, więc nie znam takich szczegółów, bardzo pomocne!
NaturalBornCamper