Recentemente, descobri que se eu editar o GRUB antes de inicializar e adicionar rw init=/bin/bash
, acabarei com um shell raiz.
Estar em uma condição que eu quero entender tudo o que eu gostaria de saber por que isso acontece. Quero dizer, é um bug? é uma característica? existe para ajudar os administradores a consertar as coisas, pois só funciona se você tiver acesso físico a um computador?
É fornecido pelo GRUB ou pelo kernel real?
Respostas:
Esse é um recurso e é usado para manutenção do sistema: permite que um administrador de sistema recupere um sistema de arquivos de inicialização desarrumados ou altere uma senha esquecida.
Este post na lista de discussão do Red Hat explica algumas coisas:
Portanto, você não está explorando nada, apenas está usando um recurso padrão do kernel.
Além disso, como observado em um comentário, o
rw
sinalizador é separadoinit=
, apenas informa ao sistema para montar o sistema de arquivos raiz como leitura / gravação (para que você possa, por exemplo, editar o arquivo mal configurado ou alterar uma senha).fonte
rw
é completamente separado deinit=
. O primeiro diz ao kernel para montar a leitura / gravação do sistema de arquivos raiz.Seu sistema possui mecanismos para execução e depuração (como o parâmetro init) e provavelmente possui mecanismos de segurança para impedir que usuários indesejados tirem proveito deles. Estes são recursos, não bugs.
O carregador de inicialização é responsável por iniciar o sistema operacional. A segurança do sistema operacional obviamente não se aplica nesse ponto. Você pode simplesmente carregar um kernel diferente, initrd, root fs ou definir opções diferentes (como o caminho init). Se você deseja impedir que os usuários façam isso, isso deve ser feito no gerenciador de inicialização.
Seu sistema (provavelmente um PC, portanto o BIOS) carrega o carregador de inicialização e, portanto, obviamente, a segurança do carregador de inicialização não se aplica a ele. Se você deseja impedir que os usuários façam o BIOS inicializar a partir do USB, você precisa fazer isso nesse nível.
Seu sistema pode estar em uma mesa em algum lugar. Se você deseja impedir que os usuários abram o coputer e troquem o disco rígido por um deles ou removam a unidade para montá-lo em suas máquinas, é necessário fazê-lo em nível físico. E isso não os impedirá de pegar a mesa inteira e ir embora na van de fuga ...
É assim que a segurança é. Elefantes por todo o caminho.
fonte
Quando o computador inicia, ele executa um programa chamado "init", geralmente encontrado em
/bin/init
ou/sbin/init
. Este programa é responsável por toda a inicialização do sistema e pela criação de um ambiente utilizável.Especificar
init=/bin/bash
diz ao kernel para rodar/bin/bash
(que é um shell). A especificaçãorw
diz ao kernel para inicializar com o disco rígido no modo de leitura e gravação em vez do modo somente leitura. Tradicionalmente, o kernel inicia com o disco no modo somente leitura e, posteriormente, um processo verifica a integridade do disco antes de mudar para leitura e gravação.fonte
Reunidos no kernel.org :
fonte
Este é um recurso do kernel: permite ao seu "chamador", ou seja, o carregador de inicialização, uma grande flexibilidade. O Grub fornece os meios para usar essa flexibilidade durante a inicialização, mas também fornece os meios para restringir esse tipo de violação . Isso faz sentido principalmente nos casos em que usuários não autorizados podem se apossar do processo de inicialização, mas, de outra forma, têm acesso negado ao próprio disco rígido.
fonte
init=
pode levar qualquer executávelinit=
pode levar qualquer executável, incluindo scripts de shell .Aqui, por exemplo, demonstro como criar um C arbitrário mínimo compilado
init
: Como criar uma distribuição Linux personalizada que executa apenas um programa e nada mais?Então, por que não aceitaria
/bin/bash
, de todas as coisas, que é apenas um executável regular e pode realmente ser útil? :-)Em seguida, você também deve tentar entender quais serão as compensações com o seu regular
init
, como systemd ou Busybox 'Basicamente, com uma matéria prima
/bin/bash
, você:init
existiaO controle de tarefas pode ser restaurado no init do Busybox e em outras unidades semelhantes, com destaque
-
noinittab
:As
inittab
entradas mais normais , que usam login e mantêm conchas de desova se você pressionar Ctrl + D, são:que usam o
getty
executável, mas TODO: Eu não consegui gerar esses sem o Busyboxinit
: getty iniciar a partir da linha de comando?Você pode usar essa configuração para brincar com ela e chegar às conclusões acima.
fonte