Ambiente de shell não interativo e sem login?

2

Estou tentando entender não-interativo & shell de não-login e tendo dificuldade em conceituar o processo como um não-interativo & shell não-login passa para iniciar.

A maneira como eu entendo as coisas é quando um script ou processo é iniciado: uma região de memória é criada e o processo filho replica um ambiente duplicado do pai sendo bifurcado - o que faz sentido para mim.

O que me confunde é quando o ambiente shell é definido para um processo ou script não-interativo não-login? Quando penso em como um shell interativo é iniciado, fico um pouco perdido.

A maneira como eu entendo um shell interativo é:

  1. O usuário passa o ID de login para o kernel do Linux
  2. O kernel do Linux procura o usuário no arquivo / etc / password e identifica o shell atribuído
  3. o shell é iniciado
  4. o shell lê os scripts de login para definir o ambiente do shell para o usuário
  5. O Linux produz um prompt de comando para indicar que o shell está pronto para aceitar comandos

É o processo para um não interativo & shell de não-login semelhante? É assim que eu vejo isso funcionando:

  1. O processo é bifurcado pelo processo pai
  2. O Linux identifica o ID do usuário que o processo será executado como
  3. O Linux procura o ID do usuário no arquivo / etc / password
  4. o shell é iniciado
  5. o BASH_ENV é lido (se foi definido)
  6. o processo interage com o shell para passar comandos para a API

Por alguma razão isso parece desajeitado e como se eu estivesse perdendo alguma coisa. Alguém poderia me informar se estou no caminho certo, por favor?

    
por Bodisha 16.11.2017 / 17:22

1 resposta

0

Você realmente não precisa pensar sobre o arquivo passwd . O shell geralmente não suporta autenticação de senha. É provavelmente um pouco mais simples do que você pensa. Outros programas, como init , getty e login , na verdade, executam a maior parte do processo de login que você descreveu em sua pergunta.

A maioria dos shells considera a sessão como um shell interativo se o shell for iniciado com a opção -i ou se a saída padrão estiver conectada a um dispositivo terminal (por exemplo, /dev/tty01 ) .

O shell considera a sessão como um shell de login se o primeiro caractere do argumento zero ($ 0) for um traço ( - ). Algumas shells também suportam uma opção -l para causar o mesmo efeito.

O "login shell" é geralmente e tradicionalmente iniciado desta forma através do processo de login do Linux convencional :

O programa init ou outro inicia um processo getty em cada terminal que pode ser usado para login.

O programa getty imprime uma solicitação e lê o username do terminal. Então, getty chama o programa login com o nome de usuário como argumento.

O programa login procura o nome de usuário no arquivo passwd , lê e autentica a senha do usuário, configura as IDs de usuário e grupo do usuário e as variáveis de ambiente e executa outras tarefas relacionadas ao login < em> antes iniciando o shell de login.

O processo login notifica o shell de que é um shell de login, colocando um traço ( - ) no nome do programa em argv[0] (também conhecido como $0 dentro do shell).

Para mais detalhes sobre o conceito de login e sessões interativas, você pode querer consultar a página de manual para getty , login e para o shell específico que você está usando. Shells diferentes (por exemplo, sh , ksh , bash , etc) possuem maneiras ligeiramente diferentes de ler arquivos de comando de inicialização (como .profile , .bash_rc , etc.)

    
por 16.11.2017 / 18:40