O usuário não existe no / etc / passwd ao tentar alterar o shell padrão

22

Eu quero mudar meu shell padrão de tcsh para bash. Então eu tentei e foi o que aconteceu:

>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

Na verdade, eu não estou no / etc / passwd. Não sei porque.

O que eu posso fazer?

rmp251
fonte
11
Seu sistema está usando autenticação distribuída (por exemplo, kerberos / winbind)? Nesse caso, os detalhes do usuário não apareceriam no arquivo / etc / passwd local (mas devem estar visíveis usando getent passwd <userid>). Eu acho que se running chshé suportado nesse caso pode depender de configurações em/etc/pam.d/
steeldriver

Respostas:

15

Meu computador faz parte de uma rede usando autenticação distribuída para que meus detalhes de usuário não apareçam no arquivo local / etc / passwd (mas sejam visíveis usando getent passwd userid). (obrigado @steeldriver) No meu caso, eu tive que fazer chsh em uma máquina principal.

rmp251
fonte
11
você pode explicar o que é uma "máquina principal"?
Nerrve
No meu caso, estou me referindo a um conjunto de máquinas dedicadas fornecidas pela universidade em sua rede que os alunos podem fazer login e usar (compartilhado). Ao contrário da minha própria máquina no meu escritório.
rmp251
4
@ rmp251 Esse é exatamente o meu cenário. Não tenho acesso à máquina principal. Você encontrou uma maneira de alterar o shell caso contrário?
23418 Geek
@ Geek você encontrou o caminho como resolvê-lo?
milushov 12/08
13

Existe uma solução alternativa para gnome-terminal:

  1. Vá para Editar -> Preferências do perfil -> Título e comando
  2. Marque Executar um comando personalizado em vez do meu shell
  3. Forneça bashcomo o comando personalizado (ou fish, ou qualquer coisa)
MrMeszaros
fonte
Obrigado! Fornecer um comando para executar imediatamente quando abro meu terminal (ou nova guia do terminal) por meio das configurações trabalhadas para mim.
cacoder
Isso também funciona para o Konsole e o yakuake no KDE.
xgdgsc
6

Se você estiver usando a autenticação LDAP pelo PAM ou algo assim, precisará encontrar sua resposta no servidor LDAP. Vamos apontar para o Microsoft AD; nesse caso, sua conta de domínio não está /etc/passwdquando você faz login, mas você pode ver sua propriedade de usuário no AD, por getent passwd | grep user.

Se, no final, mostrar que o seu shell está /bin/csh, é porque no seu AD há um atributo para isso. Portanto, se você tiver uma conta de administrador no AD, poderá corrigi-la. Caso contrário, basta dizer ao administrador do AD para ativar os recursos avançados na guia Exibir dos usuários e computadores do Active Directory> Propriedades do usuário> Atributos UNIX . Lá você pode alterar o shell de login para /bin/bash.

Certifique-se de não esquecer de executar:

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

Fonte: O usuário não existe no / etc / passwd ao tentar alterar o shell padrão .

Masoud
fonte
1
A questão era mudar o shell para um usuário, enquanto a configuração do pbis muda para todos os usuários.
Kubanczyk
5

Se você deseja alterar o shell para seu usuário, não precisa se tornar root. Basta digitar:

chsh

sem sudoe sem argumentos.


Veja também man chsh:

O comando chsh altera o shell de login do usuário. Isso determina o nome
do comando de login inicial do usuário. Um usuário normal só pode alterar o
shell de login para sua própria conta ; o superusuário pode alterar o login
shell para qualquer conta.
Andrea Corbellini
fonte
A razão pela qual usei o sudo foi porque ele não fez nada sem ele. > whoami userid > chsh You may not change the shell for 'userid'.
precisa saber é o seguinte
O motivo pelo qual funciona é que o chsh não funciona com o kerberos
Lennart Rolland
2

Se você esqueceu seu nome de usuário, pode usar o whoamicomando para lembrar de você.

Então, tente com:

sudo chsh $(whoami)

Se, de fato, não existir uma linha começando com seu nome de usuário no /etc/passwdarquivo (o que parece inexplicável), você poderá adicionar uma nova como esta:

nome de usuário : x: 1000: 1000: seu nome real ,,,: / home / nome de usuário : / bin / bash

Consulte também: Noções básicas sobre o formato de arquivo / etc / passwd .

Radu Rădeanu
fonte
1
Uma razão o usuário pode não existir em / etc / passwd é se a autenticação não é tratada nessa máquina (por exemplo, ldap)
MatrixManAtYrService
1

Se você estiver tentando fazer o ssh em um host remoto com um usuário de domínio, talvez não seja possível alterar seu shell usando chshcomo o @Masoud mencionado. Mas aqui está uma solução simples para este caso - sempre que você fizer uma ssh na máquina, faça o seguinte:

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

ou

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

Se você também quiser fazer login diretamente em um diretório de trabalho diferente.

dux2
fonte