Possible d'ignorer le shell des utilisateurs dans la commande "su"?

9

Si je fais

su - -c 'mkdir bin' user1

alors je reçois

su: /usr/bin/ksh: No such file or directory

car le shell des utilisateurs est défini sur kshin /etc/passwdet kshn'est pas installé.

Question

Comment exécuter des commandes en tant qu'utilisateur dans un tel cas?

Sandra
la source
Pourquoi le shell d'un utilisateur est-il défini sur quelque chose qui n'existe pas?
MDMarra
1
/etc/passwdvient de NIS.
Sandra
1
Eh bien, cela explique cela.
MDMarra

Réponses:

18

Si vous ne mettez pas l' -after, suil ne chargera pas l'environnement de cet utilisateur, mais les commandes seront toujours exécutées en tant que cet utilisateur.


Il semble que j'ai mal compris votre problème réel. Comme d'autres l'ont dit, -sc'est l'option que vous souhaitez probablement.

MDMarra
la source
Cela tentera toujours d'utiliser le shell qui se trouve dans / etc / passwd, ce qui semble être le plus gros problème.
freiheit
Le shell met sa propre identité dans la variable d'environnement $ SHELL, mais / etc / passwd est l'endroit où su recherche le shell à exécuter. `-` est transmis à l'invocation du shell lui indiquant d'agir comme un shell de "connexion" (bash exécute un fichier de profil au lieu d'un fichier bashrc, modifie le répertoire de travail, etc.)
freiheit
8

Vous pouvez utiliser:

su -s /bin/sh -c 'mkdir bin' user1

L' -soption à su spécifie le shell à utiliser, remplaçant tout ce qui se trouve dans / etc / passwd.

J'ai laissé tomber la -commande car, en plus de charger le profil, il changera probablement le répertoire de travail en répertoire personnel de l'utilisateur pour la commande, donc vous créeriez 'bin' dans le répertoire personnel de user1, pas votre actuel annuaire.

freiheit
la source
5

Je crois que l'option -s / - shell de su vous permet de choisir le shell à utiliser tout en conservant les autres parties de l'environnement des utilisateurs, / bin / sh est spécifié par posix et devrait donc être disponible partout.

Roman A. Taycher
la source