Como se autenticar automaticamente sem digitar o nome de usuário ou a senha root no Buildroot BusyBox init?

2

Se eu fizer:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
make BR2_JLEVEL=2
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user

Eu tenho que digitar root no QEMU antes de poder usar o shell.

Como configurar o buildroot para pular isso e logar diretamente?

Testado no Ubuntu 16.04.

    

1 resposta

2

::respawn:-/bin/sh

Usando BR2_ROOTFS_OVERLAY , deixe o convidado /etc/inittab conter:

::respawn:-/bin/sh

em vez da linha padrão de formulário:

console::respawn:/sbin/getty -L console 0 vt100

Você pode copiar o inittab padrão de output/target/etc/inittab após a criação.

Achei isso enquanto estudava o examples/inittab no Busybox 1_28_3 e descobri isso , tentei e funcionou, então é a melhor solução que encontrei até agora.

Não esqueça o traço principal - , ou as ações de controle de trabalho, como Ctrl + C, não funcionam como mencionado abaixo.

O traço principal - é magicamente analisado pelo init da BusyBox: link e configura o TTY para o comando que segue.

O BusyBox também acrescenta - ao início ou arg[0] , que /bin/sh interpreta como indicando um shell de login, o que faz com que ele crie alguns arquivos init, como /etc/profile . Veja também: link

O seguinte é equivalente, pois console é o valor padrão:

console::respawn:-/bin/sh

Para fazer login como outro usuário por padrão, você pode usar:

::respawn:-/bin/login -f user0

Aqui está uma configuração de amostra .

Resposta anterior: getty -l

Depois de quase dois anos, eu encontrei! : -)

Usando BR2_ROOTFS_OVERLAY , substitua / crie os seguintes arquivos:

/ etc / inittab: comece pelo link e edite a linha do console a ser :

console::respawn:/sbin/getty -n -L -l /loginroot.sh console 0 vt100

/loginroot.sh:

#!/bin/sh
exec /bin/login root

/bin/login é o executável padrão se -l não for fornecido. O que fizemos para criar um executável que chama /bin/login com o usuário root já especificado.

Isso faz com que init tente fazer login como o usuário root por padrão e, como a senha padrão está vazia ( BR2_TARGET_GENERIC_ROOT_PASSWD ), ele efetua login automaticamente.

Esta técnica basicamente reimplementa a opção -a <user> presente no getty do Ubuntu 14.04, que a implementação do BusyBox 'não possui.

Depois, para fazer o login como um usuário diferente, basta executar:

/bin/login

Aqui está uma configuração de amostra .

Resposta anterior: console::respawn:/bin/sh

Eu perguntei na lista de discussão e Thomas Petazzoni respondeu que:

/etc/inittab

deve conter:

console::respawn:/bin/sh

em vez de:

console::respawn:/sbin/getty -n -L  console 0 vt100 # GENERIC_SERIAL

Com qemu_x86_defconfig , o inittab está sendo usado pelo sistema% init do Busybox, devido a BR2_INIT_BUSYBOX=y .

Este método tem um lado negativo: logo após o login, a mensagem mostra:

/bin/sh can't access tty; job control turned off

e como anunciado, coisas como Ctrl+C não terão efeito.

    
por 04.08.2016 / 00:25