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


88

Tout ce que je dois faire est d’exécuter un script spécifique en tant qu’utilisateur particulier qui a le nologin/falseshell 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 testuseret laisser le shell de /bin/bashcette façon sécuriser un peu, mais j'ai besoin d'un nologin/falseshell.

Ce dont j'ai besoin, en gros, c'est de savoir quoi crontabfaire lorsque nous configurons des tâches pour qu'elles soient exécutées en tant qu'utilisateur particulier, indépendamment du fait que celui-ci possède un nologin/falseshell.

ps j'ai trouvé ce fil Exécuter une commande en tant qu'utilisateur nologin , mais je ne sais pas du tout comment exécuter concatenatela commande su -s /bin/sh $userdu script que je dois exécuter.

Réponses:


119

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

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

(Ajoutez sudoce qui précède s'il testusers'agit d'un utilisateur sans mot de passe.)


Et si su est root:root -rwsr-x---?
Patryk

1
Que faire si l'utilisateur n'a pas de mot de passe?
CMCDragonkai

3
@Wesley Découvrez que vous devez être root pour exécuter cette commande pour un utilisateur sans mot de passe.
CMCDragonkai

1
@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, il vous suffit d'utiliser &, à titre d'exemplesu -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
Depuis que j'ai passé les 20 dernières minutes à chercher comment obtenir le même résultat runuser, je tiens à souligner que ce su -s SHELLparamètre rend la commande runuser pratiquement inutile :) Merci Jan!
Jirka

12

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

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

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>]".
Bricoleur5

Je pense que l’utilisation sudo -un’est probablement pas une bonne idée pour exécuter des commandes en tant qu’utilisateur nologin, car elle expose SUDO_USERle véritable environnement qui invoque la commande. Peut-être que je réfléchis juste.
Miaou

5

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

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

2

à peine réalisé :

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

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


0

en fait, la meilleure façon de 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 souhaite 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


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. Consultez cet article serverfault.com/help/how-to-answer 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

-1

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 donneThis account is currently not available.
knocte

-3

Utilisez la commande su avec les commandes shell -s et -c. Comme indiqué ci-dessous

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
C'est exactement la solution de la réponse la mieux notée.
Gerald Schneider
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.