Como entender o shell de login não interativo?

0

Um shell não-interativo não-interativo é fácil de entender, simplesmente executar um script de shell no Terminal lançará um shell não-interativo não-interativo que executará este shell script.

Mas eu não entendo como o shell de login não interativo funciona, se o shell não é interativo, então você não pode inserir suas credenciais de login quando o shell é executado, então você coloca suas credenciais de login no shell roteiro ou algo assim?

    
por Tom 25.09.2017 / 12:28

1 resposta

1

Eu consigo lembrar dessa confusão da minha primeira vez que comecei a investigar os componentes internos de um sistema UNIX. Esta é uma explicação muito simplificada; entender os sistemas modernos requer muito conhecimento de fundo que seja muito amplo para caber em uma resposta do StackExchange como esta.

As credenciais de login são solicitadas por um processo privilegiado chamado login e você pode ver o executável com ls -l /bin/login . (A fonte também está disponível, é claro). Mais informações de man login .

Entre outras coisas, esse processo usará várias chamadas de biblioteca (através da biblioteca PAM, veja man 7 pam ) para verificar suas credenciais, garantir que não haja restrições de tempo, que seu diretório pessoal exista, etc. critérios foram satisfeitos que irá descartar seus privilégios e iniciar uma cópia do seu shell preferido. Muitas vezes (mas não exclusivamente) isso é definido como o último campo em /etc/passwd .

Você pode ver sua própria entrada de senha (que, estranhamente, talvez não inclua nem mesmo uma cópia criptografada de sua senha) com o comando getent :

getent passwd "$USER"
roaima:x:1001:1001:Roaima:/home/roaima:/bin/bash

Mais informações sobre a estrutura deste arquivo podem ser encontradas em man 5 passwd .

Observe que não há requisito rígido e rápido para o seu shell ser /bin/bash . Pode ser algo totalmente personalizado, pois é executado apenas com seus próprios privilégios de conta.

Espero que isso explique que o próprio shell não sabe nada sobre suas credenciais. É apenas um programa normal (talvez complexo) que, quando executado em modo interativo, lê de stdin e grava em stdout . O mesmo programa pode ser usado no modo não interativo para ler e gravar em arquivos, pipes ou soquetes.

Em princípio, há pouco para você escrever seu próprio shell que lê uma linha a partir de sua entrada, divide as palavras por espaço em branco e então bifurca um processo filho para chamar execvpe() e executar um programa. (Na prática, há muitos obstáculos extras a serem superados, como não dividir strings entre aspas, executar chdir ( cd ) diretamente no pai e sinalizar.)

    
por 25.09.2017 / 13:16

Tags