Comment puis-je obtenir un shell interactif en tant qu'un autre utilisateur non root?

14

J'utilise le serveur Ubuntu 10.04 LTS, avec le modèle de sécurité par défaut (root verrouillé, utilisant sudopour élever les privilèges). J'apprécie de temps en temps de l'utiliser sudo -ilorsque je devrai exécuter une série de commandes avec des privilèges élevés, ou quand je devrai fouiller dans des répertoires avec des privilèges root uniquement.

Parfois, lors de la configuration d'un logiciel qui s'exécutera comme son propre compte système non privilégié ( adduser --system --group --no-create-home --disabled-login some-daemon-user), je trouve que j'ai besoin d'exécuter une séquence de commandes en tant qu'utilisateur , plutôt que moi-même ou root. J'ai essayé d'utiliser sudo -i -u some-daemon-user, mais il renvoie simplement un 1état sans aucun message d'erreur.

Je l' ai vérifié le syslog, messages, auth, et debugfichiers journaux /var/loget aucun d'entre eux comprennent des messages référence sudoou le compte en question.

Alors, est-il possible de devenir un autre utilisateur non root, de type sudo sans simplement définir un mot de passe et se connecter (comme eux)? Mon système est-il «cassé» d'une manière ou d'une autre?

Calrion
la source

Réponses:

14

Ahmm .. le problème est que le shell standard de ces utilisateurs est normalement réglé sur /bin/falseet pour des raisons de sécurité, vous ne devriez pas changer cela. Mais vous pouvez toujours exécuter par exemple:sudo -u www-data /bin/sh

Paul Hänsch
la source
1
Pouvez-vous donner plus de détails sur les "raisons de sécurité"? Est-ce différent si j'utilise sudopour exécuter un shell en tant qu'utilisateur, comme Florian le suggère ci-dessus?
Calrion
1
La raison en est que tout attaquant effectuant une connexion en tant qu'utilisateur système, c'est-à-dire en exploitant un bogue dans le programme de connexion, est moins susceptible de se retrouver avec un shell valide. Donc, vous devez laisser le paramètre tel qu'il est dans le fichier / etc / passwd, même si c'est juste pour un bon karma. L'appel du shell directement via sudo n'a rien à voir avec cela.
Paul Hänsch
Le problème est donc de définir un shell dans le passwdfichier, et non d' exécuter un shell en tant qu'utilisateur. Je t'ai eu!
Calrion
9

sudo -iexécute le shell spécifié par l'entrée de la base de données de mots de passe de l'utilisateur cible, qui est /bin/falsedestinée à votre utilisateur système.

Utilisation

 sudo -u some-daemon-user bash

ou

sudo -u some-daemon-user -H bash

si vous souhaitez définir la variable d'environnement $ HOME définie pour l'utilisateur cible.

Florian Diesch
la source