Jaki jest dobry sposób uruchamiania skryptu powłoki jako inny użytkownik. Używam etiudy Debiana i wiem, którego użytkownika chcę podszyć się.
Gdybym robił to ręcznie, zrobiłbym:
su postgres
./backup_db.sh /tmp/test
exit
Ponieważ chcę zautomatyzować proces, potrzebuję sposobu na uruchomienie backup_db.sh jako postgres (dziedziczenie środowiska itp.)
Dzięki!
-
(lub--login
) razem z--command, -c
tak naprawdę nie uruchamia sesji logowania, ponieważ-c
zawsze wymusza powłokę niezalogowaną.- postgress
powinien pojawić się na końcu polecenia. Ze stronyWhen - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Jeśli docelowy użytkownik do uruchomienia ma zdefiniowaną powłokę nologin, możesz użyć opcji -s, aby określić powłokę:
Zobacz następujące pytanie: uruchom skrypt jako użytkownik, który ma powłokę nologin
źródło
Aby zautomatyzować to zgodnie z harmonogramem, możesz umieścić go w crontab użytkownika. Zadania Crona nie uzyskają pełnego środowiska, ale może być lepiej umieścić wszystkie potrzebne zmienne env w samym skrypcie.
Aby edytować crontab użytkownika:
źródło
Powinien to być informacyjny read - setuid w skryptach powłoki
Jeśli uruchomisz su z
- username
sekwencją argumentów, spowoduje to, że użytkownik zaloguje się do powłoki w takim samym środowisku jak użytkownik. Zwykle służy do szybkiego wykonania skryptu w środowisku domowym z innego loginu.źródło
Wypróbuj stronę man su:
su -c script_run_as_postgres.sh - postgres
Alternatywnie, możesz użyć sudo, aby pozwolić ci uruchamiać tylko ten comman jako postgres bez hasła. Jednak wymaga to trochę konfiguracji w / etc / sudoers.
źródło
Metoda „su -c ...” opublikowana przez innych jest dobra. W celu automatyzacji możesz dodać skrypt do crontab użytkownika, którego potrzebujesz, aby go wykonać jako.
źródło
Jeśli użytkownik ma już wpis do sudo i nie znasz hasła administratora, możesz spróbować wykonać następujące czynności: Ten uruchamia ponownie postgres zainicjowany na /data/my-db/pgsql/9.6/data
źródło
Możesz także użyć:
źródło