Que arquivos o kernel do Linux acessa?

1

/init durante o início do espaço de usuário, /sbin/init e /sbin/request-key são três arquivos que o kernel do Linux acessa (e todos eles são executáveis). Existem outros arquivos, possivelmente não-executáveis, que o Linux abre? Como talvez os arquivos contendo os nomes dos usuários em um sistema?

    
por Melab 18.08.2015 / 14:29

2 respostas

3

Em geral, um kernel Linux não abre arquivos em seu próprio nome (em vez de em nome de processos). Mesmo /sbin/init (ou o programa 'init' especificado na linha de comando do kernel) é exec() ed por um processo (o processo 1 é construído diretamente a partir de uma imagem dentro do kernel, IIRC).

Ao mesmo tempo, os módulos do kernel que exigem firmware abririam diretamente os arquivos de firmware, mas este não é mais o caso, e em vez disso, o kernel faz solicitações de um programa auxiliar de modo de usuário.

Se a sua pergunta é sobre quais nomes de arquivos são compilados no kernel Linux, então vemos o seguinte na imagem 'init' que as sementes processam 1:

/init
/sbin/init
/etc/init
/bin/init
/bin/sh
/dev/console

Um grep recursivo para "/ gera alguns acessos; principalmente falsos positivos, mas vale a pena procurar por jogos reais.

    
por 18.08.2015 / 18:23
3

Em relação aos nomes de usuários, o kernel não precisa (e não se preocupa com eles), pois está lidando apenas com ids de usuário numéricos (o uid 0, também conhecido como root , pode têm status especial). Consulte as credenciais (7) & capacidades (7)

A conversão de nomes de usuários para ids de usuários é feita por libc funções como getpwnam (3) . O libc pode acessar arquivos (notavelmente /etc/passwd ) para isso, veja nsswitch.conf (5)

Em relação à abertura de arquivos dentro do kernel fora de um processo existente (que usa aberto (2) ...) AFAIK o kernel está apenas iniciando poucos processos de /sbin/init (ou então /bin/sh ), /sbin/request-key , /sbin/tomoyo-init , /sbin/modprobe , /sbin/poweroff , etc ... Você pode obter a lista completa usando strings no arquivo do kernel vmlinux não compactado.

Observe também que vários caminhos de arquivos são codificados no carregador dinâmico (consulte ld-linux (8) etc ...) ou a biblioteca C padrão (seu libc.so ) tão praticamente necessária para quase todas as aplicações.

    
por 18.08.2015 / 15:14