345 votes

Exécuter un Shell Shell comme un autre utilisateur qui n'a pas de mot de passe.

Je voudrais exécuter un script à partir du script principal d'ubuntu en tant qu'utilisateur différent qui n'a pas de mot de passe.

J'ai tous les privilèges sudo, alors j'ai essayé ceci :

sudo su -c "Your command right here" -s /bin/sh otheruser

Ensuite, je dois entrer mon mot de passe, mais je ne suis pas sûr que ce script soit maintenant réellement exécuté sous cet utilisateur.

Comment puis-je confirmer que le script est réellement exécuté sous cet utilisateur maintenant ?

488voto

Steve Karg Points 11

Vous pouvez le faire avec su o sudo pas besoin des deux.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Les parties pertinentes de man sudo :

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.

-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su ne peut changer d'utilisateur sans fournir de mot de passe que si vous êtes root. Voir la réponse de Caleb

Vous pouvez modifier le /etc/pam.d/su pour permettre su sans mot de passe. Voir ce qui suit réponse .

Si vous avez modifié votre fichier auth comme suit, tout utilisateur faisant partie du groupe somegroup pourrait su a otheruser sans mot de passe.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Puis tester à partir du terminal

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

144voto

Caleb Points 1541

Si vous voulez utiliser su au lieu de sudo, je crois que vous pouvez utiliser quelque chose comme ceci :

su - <username> -c "<commands>"
  • - simulera une connexion de l'utilisateur spécifié
  • -c lui indique que vous voulez exécuter une commande

ps. Malheureusement, je ne suis pas capable d'installer ruby en utilisant rvm avec cette méthode, mais ce n'est probablement pas lié.

11voto

Samuel Åslund Points 229

Les réponses ci-dessus sont très utiles pour moi mais pour répondre à la question actuelle...

Comment puis-je affirmer que le script est réellement exécuté sous cet utilisateur maintenant ?

Utilizar:

ps -ef | grep <command-name>

La sortie devrait inclure votre script et l'utilisateur réel qui l'exécute. Les personnes sur des systèmes de type BSD, par exemple MAC, peuvent trouver des informations similaires avec :

ps aux | grep <command-name>

7voto

Reshad Zazai Points 71

Assurez-vous que vous passez à l'utilisateur root avec la commande sudo su et ensuite utiliser la commande

su user -s <command>

Par exemple : su www-data -s bin/magento cache:clean

3voto

liime Points 31

J'ai eu le même problème. Il suffit de taper la commande screen -dmS testscreen cela créera un écran détaché sur votre compte d'utilisateur non-sudo et ensuite vous pouvez vous connecter et vérifier si cet écran est présent en screen -ls .

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