Qual das opções fornecidas é VERDADEIRA sobre o shell de login?
- O shell de login varia toda vez que o usuário efetua login. O kernel decide sobre a disponibilidade do shell durante o login.
- O shell de login é fixo para todos os usuários em um sistema específico. Não pode ser configurado.
- O shell de login pode ser configurado pelo administrador no arquivo /etc/passwd.
- Nenhuma das acima.
Responder1
O kernel não sabe nada sobre os usuários além de seu ID numérico como uma tag em certas coisas (processos, arquivos). Não tem noção de “login”, que acontece no terreno do usuário.
O programa que trata do processo de login ( login
em um console em modo texto, umgerenciador de exibiçãoem um console gráfico, um daemon como sshd
ou telnetd
para logins remotos, etc.) primeiro autentica o usuário e executa outras tarefas.PAMé frequentemente usado; temmuitos recursosrelacionado à autenticação, registro, bancos de dados de usuários, etc. A última etapa do processo de login (quando bem-sucedido), depois que o programa passou da execução como root para a execução como usuário desejado, é invocar o shell de login.
O shell de login é determinado no banco de dados da conta do usuário. Existem vários tipos de bancos de dados de usuários; os mais comuns são/etc/passwd
(ou, raramente, algum outro arquivo configurado atravésNSS), que é um arquivo de texto simples encontrado na máquina local, eNEIeLDAPque são bancos de dados em rede usados em redes onde contas podem ser usadas em várias máquinas.
Os usuários podem alterar seu shell com ochsh
comando para contas locais, comypchsh
para contas NIS, ou comchsh.ldap
para contas LDAP. Em alguns lugares, o chsh
comando é configurado para funcionar com qualquer tipo de banco de dados de conta em uso. Os usuários só podem alternar entre shells listados no arquivo /etc/shells
; isso é tanto uma medida de segurança (presume-se que os usuários cujo shell não esteja listado tenham contas restritas e não possam alterá-las) quanto uma medida de segurança (mudar para um shell inexistente ou restrito pode efetivamente bloquear a conta). O administrador pode alterar o shell de login de qualquer conta executando o chsh
comando ou editando o banco de dados diretamente.
Em um sistema configurado normalmente, programas shell úteis serão listados /etc/shells
e esses programas funcionarão. (1) é tecnicamente verdadeiro porque o shell de login pode variar (o usuário ou administrador pode ligar chsh
a qualquer momento), mesmo que normalmente não o faça, e é claro que iniciar qualquer programa envolve fazer com que o kernel carregue o arquivo do programa e falhará se o arquivo não existe ou está corrompido.
O programa de login executa o shell de login com o argumento 0 definido para o nome do programa com um travessão -
antes do nome. Por exemplo, se o shell de login for /bin/bash
(o caminho completo é necessário, nenhuma pesquisa $PATH
é realizada), então o argumento 0 será -bash
. O argumento 0 normalmente é o nome do programa; o traço extra informa ao shell para agir como um shell de login. Os shells de login executam arquivos extras na inicialização, por exemplo, /etc/profile
e ~/.profile
; verDiferença entre Shell de login e Shell sem login?para mais detalhes sobre esta parte.
Este exame de múltipla escolha não é bem elaborado porque cada opção pode ser interpretada como verdadeira.
(1): de fato, o shell de login é determinado cada vez que o usuário efetua login. Também é verdade que o kernel decide se o shell está disponível durante o processo de login. Então, tecnicamente (1) é verdade (e a correção técnica é a melhor forma de correção, certo?). Mas (1) é muito enganador porque o kernel não decide qual é o shell de login, nem sequer tem um conceito de login ou shell.
(2) não é verdade em geral, pois é possível que diferentes usuários tenham diferentes shells de login. No entanto, existem configurações onde, por uma razão ou outra, todos os usuários têm o mesmo shell — por exemplo, redes heterogêneas onde as contas são compartilhadas entre máquinas e o único shell que tem garantia de estar disponível em qualquer lugar é o /bin/sh
.
(3) é provavelmente a resposta pretendida, porque /etc/passwd
é um local onde o shell de login pode ser configurado pelo administrador. No entanto, /etc/passwd
não deve ser editado diretamente, mas através do vipw
comando ou através de um comando como chsh
. Além disso, contas não locais não são armazenadas em arquivos /etc/passwd
.
Responder2
Vamos verificar alguns fatos:
Teste-o.
echo $SHELL
. Agora saia e faça login novamente.echo $SHELL
. Enxágue, lave e repita. A mesma resposta sempre.O shell de login é derivado do conteúdo de
/etc/passwd
todos os usuários. O valor definido nesse arquivo será o valor do shell de login para cada usuário no sistema. É possível que um usuário execute outro shell, mas não será seu shell de login sem que o valor seja definido em/etc/passwd
.Você pode verificar isso tentando o comando de vários shells executados manualmente:
bash -c "get-shell" sh -c "get-shell" zsh -c "get-shell"
Todos esses comandos fornecerão a mesma saída, não importa em qual shell você os execute, porque o valor do shell de login não é determinado pelo shell que o usuário escolhe executar, mas por aquele definido para ele
/etc/passwd
.Observe que se o seu sistema não tiver
get-shell
você pode substituirgetent passwd $(whoami) | cut -d: -f7
dentro dos comandos acima para determinar o shell de login do usuário.Isso dependeria muito do nível de conhecimento do administrador. Editar o
/etc/passwd
arquivo requer conhecimento de como iniciar um editor de texto como root e destreza para não bagunçar nem mesmo um único caractere do arquivo. Embora um ninja possa fazer isso, um administrador que lerman chsh
verá que esse é o programa para ajustar os shells de login:DESCRIÇÃO
chsh é usado para alterar seu shell de loginSe pelo menos uma das respostas acima for verdadeira, esta deve ser falsa.