AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 698017
Accepted
Krackout
Krackout
Asked: 2022-04-05 22:58:01 +0800 CST2022-04-05 22:58:01 +0800 CST 2022-04-05 22:58:01 +0800 CST

Desmontar /boot após a inicialização

  • 772

Para algumas VMs de bastiões altamente seguras que implementarei em breve, estou pensando em desmontar /bootapós a inicialização - entre outras medidas, é claro. Será montado apenas para atualização do kernel.

  • Testando isso, nenhum problema parece aparecer; pode ter algum efeito colateral que estou perdendo?
  • Os sistemas provavelmente serão baseados no Debian Linux (outro cenário, no Redhat). Ambos são systemd. Qual é a maneira correta de desmontar /bootem um sistema systemd após a reinicialização? Para testar eu apenas sudo umount /boot.
  • Estou me debatendo se vou usar BIOS ou UEFI. Como serão VMs, é uma questão de escolha. UEFI parece ser uma escolha mais sensata quanto mais moderna. Mas não tenho certeza em relação aos benefícios de segurança, se houver. Pelo contrário, por ser mais complicado, mais chances de vulnerabilidades talvez.
  • No caso de UEFI, e quanto à efipartição? Ele é montado internamente /bootpor padrão, embora eu ache que /efipossa ser usado (não tentei), para separá-los e manuseá-los de forma mais transparente, do lado do administrador. Pode /boot/efiou /efiser desmontado também após a inicialização sem efeitos colaterais?
systemd boot
  • 6 6 respostas
  • 3193 Views

6 respostas

  • Voted
  1. Philip Couling
    2022-04-06T00:34:16+08:002022-04-06T00:34:16+08:00

    Em teoria, nem /boot/nem /boot/efisão comumente usados ​​após a inicialização. Os dois formam uma ponte entre o BIOS (ou similar) e o sistema operacional. Eles geralmente não são usados ​​em tempo de execução.

    Eles são montados para que você possa reconfigurar sua inicialização e para que seu sistema operacional possa atualizar/atualizar sua sequência de inicialização. Ou seja, no Debian, apt/ dpkgdesencadeará alterações em ambos.

    Além do dpkg (ou rpm em derivados redhat), seria improvável que qualquer coisa quisesse acessar a /bootárvore de arquivos.


    Do ponto de vista da segurança, eu desafiaria a sabedoria de desmontar o . Ambos devem ser somente leitura para todos os usuários, exceto root. Se um usuário obtiver acesso root, ele poderá apenas montá-los. Por outro lado, impedir que seu sistema aplique atualizações (incluindo patches de segurança) pode abrir mais brechas do que você fecha.

    Em vez disso, você considerou isolar o acesso ao bastião com chrootetc.? Chroot permite que aqueles logados acessem apenas uma árvore de arquivos filho e um namespace pid e namespace de usuário podem proteger contra algo escapando ( chrootsomente não é suficiente).

    A maneira mais fácil de fazer isso pode ser substituir seu servidor SSH por docker (ou podman ) executando openssh dentro de um contêiner. Isso deixaria qualquer cliente SSH dentro de um contêiner docker que não teria visão do sistema host. O sistema de arquivos dentro desse contêiner pode ser realmente mínimo, como um contêiner linux alpino com quase nada além de uma linha de comando mínima.


    Nota para maior clareza: chroot não é suficiente para isolar um processo. Com acesso root, um processo pode escapar do chroot. No entanto, outros isolamentos, como pid e namespaces de usuário e recursos de descarte, devem fazer muito para proteger um processo dentro de uma jaula chroot... Daí a sugestão de usar o docker.

    • 23
  2. MC68020
    2022-04-06T00:55:45+08:002022-04-06T00:55:45+08:00

    Efeitos colaterais: Nenhum que eu tenha notado. Além, é claro, do fardo trazido pela necessidade de ter certeza de montá-lo antes de instalar um novo kernel. (tenha certeza porque, caso não seja, a instalação irá graciosamente e silenciosamente instalar o kernel no diretório root /boot…)
    Os benefícios em termos de segurança são, no entanto, discutíveis.

    A maneira correta de proceder (qualquer que seja o sistema init) é quase certamente… não montá-lo durante a inicialização… já que nunca é realmente necessário ;-P
    Verifique a entrada associada em seu fstab e simplesmente adicione um parâmetro noauto , isso pode parecer :LABEL=LTUX_BOOT /boot ext4 noauto,noatime 0 2

    Se você definitivamente deseja montá-lo (para desmontar mais tarde), você pode se beneficiar do recurso x-systemd.idle-timeout do sistema de montagem. Adicionar algo parecido noauto,x-systemd.automount,x-systemd.idle-timeout=1sà entrada /boot do seu fstab teria seu sistema de arquivos desmontado automaticamente após 1 segundo de tempo ocioso.

    • 16
  3. Philip Couling
    2022-04-06T05:58:47+08:002022-04-06T05:58:47+08:00

    Agora que penso nisso, você está perguntando isso do ponto de vista específico de uma máquina virtual bastião. Estes normalmente são sem estado com muito pouco instalado.

    Se você estiver remotamente preocupado com os danos que um hacker pode causar usando /boot, a maioria desses danos entrará em vigor quando a VM for reiniciada.

    Se você quisesse uma visão extremista disso, você poderia destruir completamente sua partição de inicialização e após a inicialização. Afinal, é uma VM. Para "reiniciar" ou até mesmo aplicar atualizações de segurança, basta ativar uma nova VM e derrubar a antiga. Então não há "nada" que um hacker possa fazer para interferir na sequência de inicialização da VM.

    Conforme declarado em minha outra resposta, não há motivo real para manter /boote /boot/efimontar, exceto para aplicar atualizações de segurança.

    • 8
  4. Best Answer
    Austin Hemmelgarn
    2022-04-06T09:25:35+08:002022-04-06T09:25:35+08:00

    Testando isso, nenhum problema parece aparecer; pode ter algum efeito colateral que estou perdendo?

    Não, não realmente, exceto que algumas ferramentas podem realmente precisar dele montado que você pode não ter pensado (por exemplo, o GRUB precisará dele montado sempre que for atualizado, não apenas para atualizações do kernel).

    Os sistemas provavelmente serão baseados no Debian Linux (outro cenário, no Redhat). Ambos são systemd. Qual é a maneira correta de desmontar /boot em um sistema systemd após a reinicialização? Para testar, apenas sudo umount /boot.

    Como apontado em outro lugar, apenas não monte em primeiro lugar. Basta adicionar noautoas opções na /etc/fstabentrada para ele.

    Estou me debatendo se vou usar BIOS ou UEFI. Como serão VMs, é uma questão de escolha. UEFI parece ser uma escolha mais sensata quanto mais moderna. Mas não tenho certeza em relação aos benefícios de segurança, se houver. Pelo contrário, por ser mais complicado, mais chances de vulnerabilidades talvez.

    Se você usa UEFI você pode, teoricamente, evitar a necessidade de um carregador de inicialização, mas fazer isso com o Debian (e a maioria das outras distribuições Linux além do Gentoo) é extremamente complicado.

    O UEFI também é geralmente necessário para o Secure Boot, o que parece que você provavelmente deseja, embora seja difícil acertar em uma VM.

    Fora isso, não há muito benefício de uma forma ou de outra, porque você não pode auditar o código envolvido em nenhum dos casos (o que significa que você não pode raciocinar corretamente sobre uma opção ser mais segura que a outra).

    No caso de UEFI, e a partição efi? Ele é montado dentro de /boot por padrão, embora eu ache que /efi possa ser usado (não tentei), para separá-los e manuseá-los de forma mais transparente, do lado do administrador. /boot/efi ou /efi também pode ser desmontado após a inicialização sem efeitos colaterais?

    Os mesmos comentários que para /boot. Ele pode ser montado em qualquer lugar, mas a convenção indica que /boot/efié o ponto de montagem esperado.

    Há duas razões para isso:

    • Isso facilita a escrita de políticas de segurança para sistemas de controle de acesso obrigatório orientados por caminho (como AppArmor), porque eles podem ter apenas uma cláusula geral para tudo em /boot.
    • Mantém as coisas organizadas onde deveriam estar. As coisas envolvidas na inicialização do sistema são colocadas em /boot, como tem sido na maioria dos sistemas do tipo UNIX por muito tempo.

    Como um aparte, isso na verdade não fornece uma melhoria significativa na segurança em relação à dificuldade geral envolvida em fazê-lo corretamente.

    A maneira normal de proteger /booté garantir que não seja gravável por ninguém além do usuário root, ou se você estiver se sentindo especialmente paranóico, não legível ou atravessável por qualquer pessoa além do root. Essa abordagem significa que qualquer pessoa que não tenha um EUID de 0 ou o recurso CAP_DAC_OVERRIDE não pode modificar nada em /boot, mas, notadamente, não requer nenhum tratamento especial para que as atualizações funcionem corretamente.

    Sua abordagem também significa que qualquer pessoa que não tenha um EUID de 0 ou o recurso CAP_DAC_OVERRIDE (alguém com esse recurso pode, por exemplo, reescrever /etc/fstabpara que /bootseja montado na inicialização e, em seguida, encontrar várias maneiras criativas de forçar um reinicialização do sistema, ou como outro exemplo poderia apenas escrever diretamente no dispositivo de bloco subjacente) não pode modificar nada em /boot, mas somente quando não há nada modificando legitimamente nada em /boot(porque a modificação legítima requer/bootpara ser montado). Ele também requer tratamento especial para garantir que atualizações do kernel, atualizações do carregador de inicialização e uma pequena seleção de outros tipos de atualizações (como atualizações de módulos do kernel de terceiros) funcionem corretamente. Observe que a montagem automática não funciona aqui, porque se você configurar a montagem automática, alguém precisará tentar acessar o diretório para montá-lo.

    Observe que sua abordagem não oferece proteção significativa contra um invasor dedicado, mas torna mais provável que você realmente quebre algo por acidente (por exemplo, mas executando atualizações sem ele montado).

    • 6
  5. telcoM
    2022-04-06T09:27:01+08:002022-04-06T09:27:01+08:00

    /booté normalmente usado pelo bootloader , geralmente pelo GRUB. No uso típico, /bootconterá quaisquer arquivos de configuração do carregador de inicialização que possam precisar de atualização nas atualizações do kernel e os arquivos kernel e initramfs para as versões do kernel instaladas. Se o bootloader requer alguns outros arquivos, eles também podem ser colocados em /boot.

    Como o bootloader precisa ser executado antes que o kernel do sistema operacional esteja presente, ele não pode confiar nos conceitos do kernel do Linux como "montar um sistema de arquivos". Em vez disso, quando o carregador de inicialização acessa um sistema de arquivos, ele deve fazê-lo usando suporte de firmware (partição de sistema EFI em sistemas UEFI) ou os próprios drivers do sistema de arquivos do carregador de inicialização. Esses drivers de nível de bootloader geralmente são simplificados e oferecem acesso somente de leitura, sem usar cache avançado ou qualquer outro método para aumentar o desempenho, pois seu único trabalho será carregar os poucos arquivos necessários para inicializar o kernel do sistema operacional.

    Você normalmente não pode transferir o estado do driver do sistema de arquivos do carregador de inicialização para o controle do kernel, e como o kernel normalmente tem drivers de sistema de arquivos de maior desempenho de qualquer maneira, você nem gostaria de fazê-lo.

    Uma vez que o bootloader tenha carregado com sucesso o kernel (e no caso do Linux, geralmente também o arquivo initramfs) na memória RAM e iniciado o kernel, o trabalho do sistema de /bootarquivos está essencialmente feito. Nem o kernel Linux nem o arquivo initramfs normalmente requerem algo mais do sistema de /bootarquivos. A única razão para montar /bootcomo parte da inicialização do sistema é tê-lo prontamente disponível caso atualizações do kernel sejam instaladas.

    E assim, a melhor maneira de "desmontar /bootapós a inicialização" é, na grande maioria dos casos, simplesmente comentar /etc/fstabou adicionar uma noautoopção de montagem, ou seja, não montá-la no momento da inicialização.

    Parece haver um conjunto de diretórios padrão para scripts a serem executados nas atualizações do kernel:

    • /etc/kernel/preinst.d/para scripts que devem ser executados antes de instalar um novo kernel
    • /etc/kernel/postinst.d/para scripts que devem ser executados após a instalação de um novo kernel
    • e /etc/kernel/prerm.d/e /etc/kernel/postrm.d/para scripts que devem ser executados antes e depois de remover um kernel instalado, respectivamente.

    Os scripts nesses diretórios serão executados na ordem usual de classificação US-ASCII por nome de arquivo. Se você colocar um script para montar /bootcomo /etc/kernel/preinst.d/000-mountboote /etc/kernel/prerm.d/000-mountboote outro script para desmontá-lo novamente como /etc/kernel/postinst.d/zzz-umountboote /etc/kernel/postrm.d/zzz-umountboot, você deverá obter exatamente a funcionalidade desejada, assumindo que os pacotes de kernel padrão de sua distribuição são construídos para chamar esses scripts nas fases apropriadas.

    A partição ESP do UEFI (geralmente montada como /boot/efi) é exatamente a mesma, mas para o firmware do sistema em vez do carregador de inicialização. Assim que o firmware tiver carregado com sucesso o *.efiarquivo do carregador de inicialização da partição ESP (e quaisquer arquivos suplementares que o carregador de inicialização possa ter lá), o trabalho principal do ESP será feito e não será necessário novamente até uma atualização do carregador de inicialização ou o próximo ciclo de inicialização .

    No entanto, a partição UEFI ESP pode ter uma função secundária: se o firmware UEFI suportar "cápsulas de atualização de firmware" (ou seja, uma maneira padronizada de agendar uma atualização de firmware do sistema a partir de um sistema operacional em execução), os arquivos de atualização de firmware precisariam ser gravados em o ESP antes de configurar o processo de atualização. O Linux tem ferramentas para usar este mecanismo: veja as man pages para comandos fwupdate, fwupdmgre/ou fwupdtool. Se esse mecanismo eventualmente substituir as ferramentas de atualização UEFI/BIOS específicas do fornecedor, você terá pelo menos duas condições em que o ESP deve ser montado:

    • ao instalar uma atualização do bootloader
    • ao instalar uma atualização de firmware UEFI

    Por enquanto, não parece haver um gancho padrão para adicionar scripts personalizados a esses eventos, diferentemente do caso das atualizações do kernel.

    • 4
  6. Rob Pearce
    2022-04-07T05:55:12+08:002022-04-07T05:55:12+08:00

    Desmontar /boot depois que o sistema operacional estiver ativo é certamente possível. Na verdade, é uma prática padrão em muitas distribuições Linux. O Gentoo gudie certamente assume isso e eu fiz isso em todas as instalações do Gentoo que já fiz (o que é MUITO).

    Se ele alcança o que você acha que obterá é uma questão completamente diferente.

    • 3

relate perguntas

  • Sistema intacto, grub quebrado

  • Use o suporte de watchdog do systemd para reiniciar o aplicativo

  • "pacman -Syu" 'provavelmente' quebrou meu sistema, porque a inicialização não foi montada

  • SSD clonado não inicializa e imprime linhas estranhas

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve