O Dropbear chama a getpwnam
função de biblioteca padrão para obter informações sobre contas de usuários. Em sistemas com GNU libc (a biblioteca padrão para sistemas Linux não embarcados), esta função pode consultar vários tipos de bancos de dados através do Mecanismo NSS , incluindo /etc/passwd
. Os sistemas embarcados podem executar uma variedade de libc (uClibc, dietlibc,…) e tendem a ter o caminho /etc/passwd
cozido.
Falta de correção e recompilação de dropbear (ou sua libc), você terá que fornecer esse arquivo /etc/passwd
de alguma forma. Existem maneiras de fazer com que arquivos extras apareçam sobre um sistema de arquivos de somente leitura, não modificando o sistema de arquivos, mas instruindo o kernel a fornecer arquivos de um sistema de arquivos diferente nesses locais. O mecanismo genérico é uma união montada , mas os sistemas Linux incorporados muitas vezes não possuem um bom recurso de união.
Uma maneira relativamente simples de substituir uma localização do sistema de arquivos com conteúdo diferente é mount --bind
. Depois de executar o comando mount --bind /else/where
/ some / onde , any access to a file
/ algum / onde / somefile actually accesses the file
/ else / onde / somefile ; any file in the “true”
/ else / onde is hidden. However, you cannot directly make a file appear this way: both
/ else / onde and
/ some / where have to exist (although they don't have to be directories). So you can't make
/ etc / passwd come into existence, but you can override
/ etc '.
-
Crie um diretório que contenha seu substituto para
/etc
. Digamos que seja/custom/etc
.mkdir /custom/etc
-
Crie um ponto de montagem onde você irá realocar o original
/etc/
.mkdir /custom/original-etc
-
Crie links simbólicos na substituição
etc
para arquivos no original.cd /etc for x in *; do ln -s "../original-etc/$x" "/custom/etc/$x"; done
-
Crie um arquivo
passwd
na sua hierarquiaetc
de substituição.echo "root:x:0:0:root:/:/bin/sh" >/custom/etc/passwd
No momento da inicialização, primeiro execute uma montagem de ligação para criar uma exibição da hierarquia /etc
original em /custom/original-etc
e, em seguida, execute uma montagem de ligação para criar uma exibição de sua substituição /etc
at /etc
. Coloque esses comandos em um script que é executado durante a inicialização (o mesmo script onde você inicia o servidor dropbear, obviamente antes de iniciar o dropbear).
mount --bind /etc /custom/original-etc
mount --bind /custom/etc /etc