web-dev-qa-db-fra.com

Comment exécuter la commande en tant qu'utilisateur différent

Est-il possible d'exécuter une commande

  • dont les paramètres commencent par - (tiret) par exemple /usr/bin/echo -n foo
  • en tant qu'utilisateur et groupe différents, par exemple Apache:apache
  • en utilisant la commande su
  • lorsque le shell de connexion est défini sur /sbin/nologin?

J'ai essayé:

  • su -s "/usr/bin/echo" -g Apache apache -n foo
    • échoue avec su: invalid option -- 'n'. Il semble que le premier argument ne commence pas par un tiret.
  • su -c "/usr/bin/echo -n foo" -g Apache apache
    • échoue avec nologin: invalid option -- 'c'. On dirait -c ne peut pas être utilisé si le shell de connexion est /sbin/nologin
8
czerny
su -s /bin/bash -c "/usr/bin/echo -n foo" -g Apache apache
  • -s /bin/bash remplace nologin et permet d'interpréter la valeur de -c option
  • -c "/usr/bin/echo -n foo" permet d'éviter d'utiliser le premier argument commençant par un tiret
15
czerny

Sudo à la rescousse!

Sudo -u <user> -g <group> -- echo -n foo
9
Lester Cheung