62 votes

Exécuter un Shell Shell sous un autre utilisateur.

Quel est le bon moyen d'exécuter un Shell Shell en tant qu'utilisateur différent. J'utilise Debian etch, et je sais quel utilisateur je veux usurper l'identité.

Si je le faisais manuellement, je le ferais :

su postgres
./backup_db.sh /tmp/test
exit

Comme je veux automatiser le processus, j'ai besoin d'un moyen d'exécuter backup_db.sh en tant que postgres (en héritant de l'environnement, etc.).

Merci !

94voto

baumgart Points 2403

Pour exécuter votre script comme un 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 recommande de toujours utiliser les chemins complets dans les scripts comme celui-ci - vous ne pouvez pas toujours garantir que vous serez dans le bon répertoire lorsque vous su (peut-être que quelqu'un a changé le homedir 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 modifie votre chemin et vous fasse utiliser une version compromise de su.

31voto

Sciolist Points 1481

Si l'utilisateur cible à exécuter a nologin shelll défini, alors vous pouvez utiliser l'option -s pour spécifier le Shell :

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Voir la question suivante : exécuter script comme utilisateur qui a nologin script

10voto

Kyle Brandt Points 81077

Pour automatiser cette opération selon un calendrier, vous pouvez la placer dans la crontab de l'utilisateur. Les tâches Cron n'obtiendront pas l'environnement complet cependant, mais il pourrait être mieux de mettre toutes les variables env dont vous avez besoin dans le script lui-même de toute façon.

Pour modifier la crontab de l'utilisateur :

sudo crontab -u postgres -e

4voto

nik Points 6970

Cette lecture devrait être instructive. setuid sur Shell Shell

Si vous exécutez su avec un " - username La séquence d'arguments ", il fera un login Shell pour l'utilisateur pour donner le même environnement que l'utilisateur. Habituellement, utilisé pour exécuter rapidement votre Shell avec votre environnement personnel à partir d'un login différent.

3voto

mreggen Points 2940

Essayez la page de manuel su :

su -c script_run_as_postgres.sh - postgres

Vous pouvez également utiliser sudo pour vous permettre d'exécuter cette commande en tant que postgres sans mot de passe. Cela nécessite cependant une certaine configuration dans votre /etc/sudoers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X