Question lance le script en tant qu'utilisateur ayant le shell nologin


Tout ce que j'ai à faire est d'exécuter un script spécifique en tant qu'utilisateur particulier ayant le nologin / false shell indiqué dans / etc / passwd.

Je voudrais exécuter le script en tant que root et cela devrait fonctionner en tant qu'un autre utilisateur. Fonctionnement:

~# su -c "/bin/touch /tmp/test" testuser

fonctionnerait mais j’ai besoin d’un shell valide pour le testuser. Je sais que je peux désactiver le mot de passe avec passwd -d testuser et laisser le shell à / bin / bash de cette façon me sécuriserait un peu, mais j'ai besoin de nologin / false shell.

Ce dont j'ai besoin en fait, c’est ce que crontab doit faire lorsque nous configurons des tâches pour qu’elles s’exécutent en tant qu’utilisateur particulier, que celui-ci ait nologin / false shell.

p.s j'ai trouvé ce fil Exécuter une commande en tant qu'utilisateur nologin mais je ne sais pas comment "concaténer" la commande su -s /bin/sh $user au script dont j'ai besoin pour courir

Merci


78
2018-01-18 13:56


origine




Réponses:


Vous pouvez utiliser le commutateur -s en su pour exécuter un shell particulier

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

(Préfini sudo à ce qui précède si testuser est un utilisateur sans mot de passe.)


109
2018-01-18 18:49



Et si su est root:root -rwsr-x--- ? - Patryk
Que faire si l'utilisateur n'a pas de mot de passe? - CMCDragonkai
@Wesley a découvert que vous devez être root pour exécuter cette commande pour un utilisateur sans mot de passe. - CMCDragonkai
@lain, si l'utilisateur est supposé ne pas avoir de shell, le processus lié à la commande ne doit pas être un enfant d'un processus bash. Ainsi, vous devriez également utiliser exec pour remplacer le shell par le script. Et si vous aimez faire du script un enfant d'init, utilisez simplement &, à titre d'exemple. su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
Depuis que j'ai passé les 20 dernières minutes à chercher comment obtenir le même résultat en utilisant runuser, Je tiens à souligner que su -s SHELL Ce paramètre rend la commande runuser pratiquement inutile :) Merci Jan! - jirka


Vous pouvez le faire avec sudo -u si vous l'avez installé:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

7
2018-01-18 14:03



Comment passez-vous les paramètres à sudo -u apache whoami? - CMCDragonkai
@CMCDragonkai Tous les paramètres après la commande seront transmis. Vous pouvez penser à cela comme "sudo [-u apache] [whoami <param1> <param2>]". - Handyman5
Je pense en utilisant sudo -u n’est probablement pas une bonne idée pour exécuter des commandes en tant qu’utilisateur nologin, car cela expose le SUDO_USER dans l'environnement qui est le vrai invoque la commande. Peut-être que je réfléchis trop. - Meow


En fournissant le script en tant qu'argument à exécuter sur / bin / sh:

su -s "/bin/sh /your/script/location" username

4
2018-01-18 14:01





à peine réalisé :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

Peut-être y a-t-il un meilleur moyen?!


2
2018-02-16 07:18





en fait, la meilleure façon de le faire est via runuser

voir la page de manuel pour plus de détails

cet outil est utilisé pour faire face à la situation comme l'a dit le développeur dans son bolg

Lorsqu'un service s'exécute en tant que root et veut modifier l'UID à l'aide du shell, il doit utiliser runuser.

http://danwalsh.livejournal.com/55588.html

J'ai posté cette réponse dans de nombreux palais, pardonnez-moi si vous trouvez cela ennuyeux


0
2017-12-07 19:19



Merci de ne pas publier de réponses sous forme de liens uniquement pour éviter la pourriture des liens Au lieu de cela, ajoutez les informations les plus pertinentes du lien à votre réponse ou publiez le lien en tant que commentaire au lieu d'une réponse. Regarde ça serverfault.com/help/how-to-answer article du centre d'aide pour plus d'informations. - Federico Galli
@FedericoGalli, les informations les plus pertinentes ont déjà été ajoutées, il n'est pas nécessaire de copier et coller l'utilisation, la page de manuel fournit suffisamment d'informations. - Z-Y00


Utilisez sudo -u pour spécifier l'utilisateur. Utilisez également l'indicateur -i pour définir les variables d'environnement de l'utilisateur cible.

sudo -i -u user command

-1



cela donne This account is currently not available. - knocte