Por padrão, o BusyBox não faz nada de especial com relação aos applets que ele embutiu (os comandos listados com busybox --help
).
No entanto, se as opções FEATURE_SH_STANDALONE
e FEATURE_PREFER_APPLETS
estiverem habilitadas em tempo de compilação, quando BusyBox sh¹ executa um comando que é um nome de applet conhecido, ele não executa a% normalPATH
lookup, mas executa seus applets integrados por meio de um atalho:
- Os applets declarados como “noexec” no código-fonte são executados como chamadas de função em um processo bifurcado. A partir do BusyBox 1.22, os seguintes applets são noexec:
chgrp
,chmod
,chown
,cksum
,cp
,cut
,dd
,dos2unix
,env
,fold
,hd
,head
,hexdump
,ln
,ls
,md5sum
,mkfifo
,mknod
,sha1sum
,sha256sum
,sha3sum
,sha512sum
,sort
,tac
,unix2dos
. - Os applets declarados como “nofork” no código-fonte são executados como chamadas de função no mesmo processo. A partir do BusyBox 1.22, os seguintes applets são nofork:
[[
,[
,basename
,cat
,dirname
,echo
,false
,fsync
,length
,logname
,mkdir
,printenv
,printf
,pwd
,rm
,rmdir
,seq
,sync
,test
,true
,usleep
,whoami
,yes
. - Outros applets são realmente executados (com
fork
eexecve
), mas em vez de fazer uma pesquisaPATH
, BusyBox executa/proc/self/exe
, se disponível (o que normalmente é o caso no Linux), e um caminho definido em tempo de compilação.
Isso está documentado em mais detalhes em docs/nofork_noexec.txt
. As declarações do applet estão em include/applets.src.h
no código-fonte.
A maioria das configurações padrão desativa esses recursos, para que o BusyBox execute comandos externos como qualquer outro shell. O Debian ativa esses recursos nos pacotes busybox
e busybox-static
.
Portanto, se você tiver um executável do BusyBox compilado com FEATURE_SH_STANDALONE
e FEATURE_PREFER_APPLETS
, poderá executar todos os comandos do BusyBox a partir de um shell do BusyBox, mesmo que o executável seja excluído (exceto os applets que não estão listados acima, se/proc/self/exe
não está disponível).
¹ Na verdade, existem duas implementações de "sh" no BusyBox - ash e hush - mas elas se comportam da mesma maneira a esse respeito.