GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter un script shell en tant qu'utilisateur différent

Solution 1 :

Pour exécuter votre script en tant qu'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 des chemins complets dans des 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 vers su (/bin/su) parce que je suis paranoïaque. Il est possible que quelqu'un puisse modifier votre chemin et vous amener à utiliser une version compromise de su.

Solution 2 :

Si l'utilisateur cible à exécuter a défini un shell nologin, 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 le script en tant qu'utilisateur qui n'a pas de shell de connexion

Solution 3 :

Pour automatiser cela selon un calendrier, vous pouvez le mettre dans la crontab de l'utilisateur. Les tâches cron n'obtiendront pas l'environnement complet, mais il serait peut-être préférable de mettre toutes les variables d'environnement 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

Solution 4 :

Cela devrait être une lecture informative -- setuid sur les scripts shell

Si vous exécutez su avec un "- username " séquence d'arguments, il créera un shell de connexion pour que l'utilisateur donne le même environnement que l'utilisateur. Habituellement, utilisé pour exécuter rapidement votre script avec votre environnement d'accueil à partir d'une connexion différente.

Solution 5 :

Essayez la page de manuel su :

su -c script_run_as_postgres.sh - postgres

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


Linux
  1. D'où est exécuté un script Shell ?

  2. Comment exécuter des scripts Python à partir du shell

  3. UNIX / Linux :Qu'est-ce qu'un Shell ? Quels sont les différents coquillages ?

  4. Exécuter un script shell en parallèle

  5. Comment exécuter une commande en tant qu'utilisateur spécifique dans un script d'initialisation ?

Comment exécuter une commande / un script Linux Shell en arrière-plan

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment créer et exécuter un script shell dans Ubuntu 22.04

Exécutez la commande shell dans jenkins en tant qu'utilisateur root ?

Inviter l'utilisateur à se connecter en tant que root lors de l'exécution d'un script shell

Vérifier le mot de passe de l'utilisateur avec un script shell