Řešení 1:
Chcete-li skript spustit jako jiný uživatel jako jeden příkaz, spusťte:
/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres
Breaking it down:
/bin/su : switch user
-c "/path/to..." : command to run
- : option to su, make it a login session (source profile for the user)
postgres : user to become
Doporučuji vždy používat úplné cesty ve skriptech, jako je tento - nemůžete vždy zaručit, že budete ve správném adresáři, když jste su (možná vám někdo změnil homedir, kdo ví). Také vždy používám úplnou cestu k su (/bin/su), protože jsem paranoidní. Je možné, že někdo může upravit vaši cestu a způsobit, že použijete kompromitovanou verzi su.
Řešení 2:
Pokud má cílový uživatel, který má být spuštěn, definován shelll nologin, můžete použít volbu -s k určení shellu:
/bin/su -s /bin/bash -c '/path/to/your/script' testuser
Viz následující otázka:spusťte skript jako uživatel, který má nologin shell
Řešení 3:
Chcete-li to zautomatizovat podle plánu, můžete to umístit do crontab uživatele. Úlohy Cron sice nezískají úplné prostředí, ale i tak by mohlo být lepší umístit všechny proměnné env, které potřebujete, do samotného skriptu.
Chcete-li upravit crontab uživatele:
sudo crontab -u postgres -e
Řešení 4:
Toto by mělo být informativní čtení -- setuid na skriptech shellu
Pokud spustíte su s "- username
" argument sekvence, vytvoří přihlašovací shell pro uživatele, který poskytne stejné prostředí jako uživatel. Obvykle se používá k rychlému spuštění skriptu s vaším domácím prostředím z jiného přihlášení.
Řešení 5:
Zkuste manuálovou stránku su:
su -c script_run_as_postgres.sh - postgres
Alternativně můžete použít sudo, které vám umožní spustit právě tento příkaz jako postgres bez hesla. Chce to však nějaké nastavení ve vašem /etc/sudoers.