Que ambiente e credencial são usados pelos processos de inicialização, de segundo plano e de serviço

3
  • Scripts de inicialização (na inicialização)
  • Processos em execução (ou enviados para) o plano de fundo (ao usar SSH -fN por exemplo)
  • Serviços
  • etc.

Qual variável $ path eles estarão usando? Quais credenciais? Mais alguma coisa que eu deveria saber?

Tentei pesquisá-lo e encontrei muitas informações fragmentadas nos fóruns, mas nada dá uma imagem clara e completa do que está acontecendo.

FYI Estou rodando o Raspbian, que é praticamente o mesmo que o Debian.

    
por TCZ8 30.04.2014 / 15:31

2 respostas

2

Dependendo da fase em que os processos foram inicializados, eles podem não ter nenhuma variável de ambiente, herdá-los do processo pai ou usar variáveis que estavam no script de inicialização (init.d).

Você pode encontrar as variáveis de ambiente que o processo tem examinando /proc/$PID_OF_PROCESS/environ :

root@frisbee:~# xargs -n 1 -0 < /proc/1243/environ 
UPSTART_INSTANCE=
UPSTART_JOB=rsyslog
TERM=linux
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
UPSTART_EVENTS=filesystem
PWD=/

Você pode encontrar muitas informações sobre um processo examinando seu diretório /proc/ . Por exemplo:

  • O diretório de trabalho atual do processo é vinculado por /proc/$PID/cwd :

    root@frisbee:~# ls -l /proc/1243/cwd
    lrwxrwxrwx 1 root root 0 apr 30 11:20 /proc/1243/cwd -> /
    
  • O binário do qual o processo foi exec() 'ed é vinculado por /proc/$PID/exe :

    root@frisbee:~# ls -l /proc/1243/exe
    lrwxrwxrwx 1 root root 0 apr 30 11:19 /proc/1243/exe -> /usr/sbin/rsyslogd
    
  • Os descritores de arquivos (arquivos + conexões de rede + soquetes de comunicação interprocessos) podem ser encontrados em /proc/$PID/fd/ :

    root@frisbee:/proc/1243/fd# ls -l
    total 0
    lrwx------ 1 root root 64 apr 30 11:20 0 -> socket:[12362]
    l-wx------ 1 root root 64 apr 30 11:20 1 -> /var/log/syslog
    l-wx------ 1 root root 64 apr 30 11:20 2 -> /var/log/kern.log
    lr-x------ 1 root root 64 apr 30 11:20 3 -> /proc/kmsg
    l-wx------ 1 root root 64 apr 30 11:20 4 -> /var/log/auth.log
    l-wx------ 1 root root 64 apr 30 11:39 5 -> /var/log/ufw.log
    

Você pode encontrar como o usuário está executando o processo examinando ps output:

root@frisbee:/proc/1243# ps -fp 1243
UID        PID  PPID  C STIME TTY          TIME CMD
syslog    1243     1  0 11:19 ?        00:00:01 rsyslogd -c5

Anything else I should know?

Muitas, mas você tem que definir essas coisas e encontrá-las ou fazer outra pergunta sobre isso.

    
por 30.04.2014 / 15:53
2

Startup scripts (on boot)

Os processos iniciados pelo init geralmente têm pouco ou nenhum ambiente pré-existente , embora dependa de como são invocados.

Se eles forem invocados diretamente, ou seja, bifurcados e executados pelo daemon de inicialização, $PATH não será definido. Se eles forem invocados via shell, $PATH pode ser definido dependendo do shell e como ele está configurado, mas geralmente ele ainda não será configurado, razão pela qual os scripts init geralmente contêm caminhos completos.

Variáveis de ambiente como $PATH geralmente são definidas em scripts de shell que podem ser automaticamente originados quando o shell é iniciado; para uma explicação de como o bash, por exemplo, faz isso, veja INVOCATION em man bash . Para shells invocadas de forma não interativa como sh (ou seja, a maioria dos scripts de inicialização), não há arquivos automaticamente originados.

As variáveis de ambiente também são herdadas, mas, a menos que o init (o primeiro processo no sistema) defina algumas, seus filhos (como scripts init executados) não herdarão nada.

Se um serviço de inicialização específico precisar configurar o ambiente de uma determinada maneira, é responsabilidade desse serviço configurar tal ambiente para si mesmo. Tradicionalmente, isso é feito pela inicialização de variáveis em um init roteiro.

Processes running in (or sent to) the background

Os processos herdam seu ambiente de seus pais (o processo que os iniciou). Enviá-los para o plano de fundo não altera isso.

    
por 30.04.2014 / 15:48