Pour exécuter votre script en tant qu'autre utilisateur en une seule commande, exécutez:
/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
Je vous recommande de toujours utiliser des chemins d'accès complets dans les scripts tels que celui-ci - vous ne pouvez pas toujours garantir que vous serez dans le bon répertoire lorsque vous suivez (quelqu'un a peut-être changé le répertoire personnel sur vous, qui sait). J'utilise aussi toujours le chemin complet de su (/ bin / su) parce que je suis paranoïaque. Il est possible que quelqu'un puisse modifier votre chemin et vous obliger à utiliser une version compromise de su.
-
(ou--login
) avec--command, -c
ne démarre pas réellement une session de connexion, car-c
force toujours un shell non connecté.- postgress
devrait apparaître à la fin de la commande. De la page de manuel:When - 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.
Si l'utilisateur cible à exécuter a défini nologin shelll, vous pouvez utiliser l'option -s pour spécifier le shell:
Voir la question suivante: lancer le script en tant qu’utilisateur disposant du shell nologin
la source
Pour automatiser cela selon un planning, vous pouvez le mettre dans la crontab de l'utilisateur. Les tâches cron n'obtiendront cependant pas l'environnement complet, mais il serait peut-être préférable de mettre de toute façon toutes les variables d'environnement dont vous avez besoin dans le script lui-même.
Pour éditer la crontab de l'utilisateur:
la source
Cela devrait être une lecture informative - setuid sur les scripts shell
Si vous exécutez su avec une
- username
séquence d'arguments " ", un shell de connexion sera créé pour permettre à l'utilisateur de fournir le même environnement que l'utilisateur. Habituellement, utilisé pour exécuter rapidement votre script avec votre environnement domestique à partir d’un nom de connexion différent.la source
Essayez la page de manuel su:
su -c script_run_as_postgres.sh - postgres
Enfin, vous pouvez utiliser sudo pour vous permettre d’exécuter uniquement cette commande en tant que postgres sans mot de passe. Cela prend cependant quelques réglages dans vos / etc / sudoers.
la source
La méthode "su -c ..." publiée par d’autres est une bonne méthode. Pour l’automatisation, vous pouvez ajouter le script à la crontab de l’utilisateur sur lequel vous souhaitez l’exécuter.
la source
Si l'utilisateur a déjà une entrée dans sudo et que vous ne connaissez pas le mot de passe du superutilisateur, vous pouvez essayer de suivre: Celui-ci redémarre le postgres initialisé à /data/my-db/pgsql/9.6/data
la source
Vous pouvez aussi utiliser:
la source