l'utilisateur n'existe pas dans / etc / passwd lors de la tentative de modification du shell par défaut

22

Je veux changer mon shell par défaut de tcsh en bash. J'ai donc essayé et c'est ce qui s'est passé:

>sudo chsh userid
Changing the login shell for userid
Enter the new value, or press ENTER for the default
        Login Shell [/xhbin/tcsh]: /bin/bash
chsh: user 'userid' does not exist in /etc/passwd

En effet, je ne suis pas dans / etc / passwd. Je ne sais pas pourquoi.

Que puis-je faire?

rmp251
la source
11
Votre système utilise-t-il une authentification distribuée (par exemple kerberos / winbind)? Dans ce cas, vos détails d'utilisateur n'apparaîtraient pas dans le fichier local / etc / passwd (mais devraient être visibles en utilisant getent passwd <userid>). Je pense que la chshprise en charge de l' exécution dans ce cas peut dépendre des paramètres de/etc/pam.d/
steeldriver

Réponses:

15

Mon ordinateur fait partie d'un réseau utilisant l'authentification distribuée, mes informations utilisateur n'apparaissent donc pas dans le fichier local / etc / passwd (mais sont visibles à l'aide de l'ID utilisateur getent passwd). (merci @steeldriver) Dans mon cas, j'ai dû faire chsh sur une machine principale.

rmp251
la source
11
pouvez-vous expliquer ce qu'est une «machine principale»?
Nerrve
Dans mon cas, je fais référence à un ensemble de machines dédiées fournies par l'université au sein de leur réseau que les étudiants peuvent se connecter et utiliser (partagées). Par opposition à ma propre machine dans mon bureau.
rmp251
4
@ rmp251 C'est exactement mon scénario. Je n'ai pas accès à la machine principale. Avez-vous trouvé un moyen de changer le shell autrement?
Geek
@Geek avez-vous trouvé le moyen de le résoudre?
milushov
13

Il existe une solution de contournement pour gnome-terminal:

  1. Allez dans Edition -> Préférences de profil -> Titre et commande
  2. Cochez Exécuter une commande personnalisée au lieu de mon shell
  3. Fournir en bashtant que commande personnalisée (ou fish, ou quoi que ce soit)
MrMeszaros
la source
Merci! Fournir une commande à exécuter immédiatement lorsque j'ouvre mon terminal (ou un nouvel onglet de terminal) via les paramètres a fonctionné pour moi.
cacoder
Cela fonctionne également pour Konsole et yakuake dans KDE.
xgdgsc
6

Si vous utilisez l'authentification LDAP par PAM ou quelque chose, vous devez trouver votre réponse dans votre serveur LDAP. Visons-le pour Microsoft AD, auquel cas votre compte de domaine n'est pas dans /etc/passwdlorsque vous vous connectez, mais vous pouvez voir votre propriété d'utilisateur dans AD, par getent passwd | grep user.

Si à la fin cela montre que votre shell est /bin/csh, c'est parce que dans votre AD il y a un attribut pour cela. Donc, si vous avez un compte administrateur sur AD, vous pouvez le réparer vous-même. Sinon, dites simplement à votre administrateur AD d'activer les fonctionnalités avancées dans l' onglet Affichage des utilisateurs et ordinateurs Active Directory> Propriétés de l'utilisateur> Attributs UNIX . Là, vous pouvez changer le shell de connexion en /bin/bash.

N'oubliez pas de courir:

sudo /opt/pbis/bin/config LoginShellTemplate /bin/bash

Source: l' utilisateur n'existe pas dans / etc / passwd lors de la tentative de modification du shell par défaut .

Masoud
la source
1
La question était de changer le shell pour un utilisateur, alors que la configuration de pbis change pour tous les utilisateurs.
kubanczyk
5

Si vous souhaitez modifier le shell de votre utilisateur, vous n'avez pas besoin de devenir root. Tapez simplement:

chsh

sans sudoet sans arguments.


Voir aussi man chsh:

La commande chsh modifie le shell de connexion utilisateur. Cela détermine le nom
de la commande de connexion initiale de l'utilisateur. Un utilisateur normal ne peut modifier
shell de connexion pour son propre compte ; le superutilisateur peut changer la connexion
shell pour tout compte.
Andrea Corbellini
la source
La raison pour laquelle j'ai utilisé sudo était qu'il ne faisait rien sans lui. > whoami userid > chsh You may not change the shell for 'userid'.
rmp251
La raison pour laquelle cela fonctionne est que chsh ne fonctionne pas avec les kerberos
Lennart Rolland
2

Si vous avez oublié votre nom d'utilisateur, vous pouvez utiliser la whoamicommande pour vous souvenir de vous.

Alors, essayez avec:

sudo chsh $(whoami)

Si en effet, il n'existe pas de ligne commençant par votre nom d'utilisateur dans le /etc/passwdfichier (ce qui semble inexplicable), vous pouvez en ajouter une nouvelle comme celle-ci:

nom d'utilisateur : x: 1000: 1000: votre vrai nom ,,,: / home / nom d'utilisateur : / bin / bash

Voir aussi: Comprendre le format de fichier / etc / passwd .

Radu Rădeanu
la source
1
Une des raisons pour lesquelles votre utilisateur pourrait ne pas exister dans / etc / passwd est si l'authentification n'est pas gérée sur cette machine (par exemple ldap)
MatrixManAtYrService
1

Si vous essayez de vous connecter à un hôte distant avec un utilisateur de domaine, vous ne pourrez peut-être pas changer votre shell en utilisant chshcomme mentionné @Masoud. Mais voici une solution de contournement simple pour ce cas - chaque fois que vous entrez dans la machine, procédez comme suit:

ssh my-host -t "zsh --login"

ou

ssh my-host -t "cd /data/repos; zsh --login"

Si vous souhaitez également vous connecter directement dans un autre répertoire de travail.

dux2
la source