O linux pode funcionar sem um shell? [fechadas]

5

Estou trabalhando em uma equipe que acaba de concluir a construção de um sistema protótipo para controlar máquinas (vários programas c ++ com algum IPC, rede e E / S de dispositivo em execução no servidor Ubuntu 16.04). Tudo é iniciado e gerenciado pelo systemd na inicialização e é praticamente auto-regulável, sem necessidade real de intervenção do usuário.

Agora, queremos tentar proteger o sistema de pessoas que tentam inspecionar, copiar ou roubar nosso sistema (elas poderão acessar os computadores se realmente quiserem). Uma das maneiras que estávamos pensando em fazer isso é remover o shell / terminal do linux, já que ele não é necessário e dificultará a navegação dos hackers no sistema. Somos principalmente programadores de aplicativos com um nível moderado de experiência na administração de sistemas Linux, então temos as seguintes questões:

  1. Em primeiro lugar, se é realmente possível fazer. Para esclarecer, queremos remover qualquer terminal que permita aos usuários executar comandos como cd, cat, ls, apt-get, scp .

  2. Se for possível, então é aconselhável e aumentará a segurança do sistema. Existem outras vantagens ou desvantagens em fazer isso? Existem alternativas?

  3. Como pode ser alcançado?

por Andrew Murtagh 22.12.2017 / 12:03

3 respostas

3

Embora a desativação do shell possa limitar a superfície de ataque, seria muito mais fácil limitar o acesso de leitura em / usr / bin. Para limitar o acesso do shell aos usuários, configurar os shell de login para / sbin / nologin funciona. Se a ideia é limitar o que você pode fazer no terminal, então:

  • Use o efistub com inicialização segura.

Este já deve ser o caso do Ubuntu.

  • Desative o shell de recuperação no initram.

Isso envolve extrair o initram editando o script init e removendo a chamada do shell na função de resgate.

  • Desativar ttys no sistema.

Porque você está usando apenas systemd

systemctl disable [email protected]

Você não terá como interagir com o sistema. Você pode usar um segundo sistema habilitado com inicialização segura que permita a manutenção remota ou local ou você terá que extrair o disco rígido e fazer modificações em outro sistema com o chroot.

Isso não impede a criação de pttys, o que significa que o SSH ainda funcionará.

    
por 22.12.2017 / 16:09
2

Bem, tecnicamente o Linux é apenas o kernel, ele não precisa de um shell para nada. Mas, para fazer qualquer coisa útil, você precisa de algo em execução no espaço do usuário. Se você conseguisse integrar tudo o que precisava em um processo, poderia soltá-lo no lugar de /sbin/init e não haver nenhum outro processo de espaço de usuário no sistema.

Na prática, você pode querer o equivalente a udev e outro encanamento, possivelmente um cliente DHCP. (A configuração estática do IPv4 pode ser definida na linha de comando do kernel.)

Com a inicialização tradicional do estilo sysvinit, tudo dependia de scripts de shell (aqueles em /etc/init.d/ , com links de /etc/rc*.d ), portanto, usar isso já está certo. Mas um dos pontos do systemd é que ele não depende do shell como muito, para que possa ser factível, se todos os serviços que você estiver executando tiverem arquivos unitários systemd (em vez de init.d scripts) e não usarem scripts shell para mais nada.

Em um sistema Ubuntu (17.10) eu tenho, pelo menos console-setup , keyboard-setup e Postfix parecem ter scripts de shell em seus arquivos unitários. Os dois primeiros não são provavelmente importantes, já que você não está logando em um console sem um shell, mas pode haver outros que precisam dele ...

Se um sistema sem shell fosse realmente desejado, eu provavelmente começaria do zero ou de algo mais simples do que um sistema completo como o Ubuntu. Seria uma experiência interessante remover /bin/sh e ver até onde o sistema fica, no entanto.

Você mencionou a segurança como uma motivação para isso. Sem um shell, qualquer código de shell que se baseia em iniciar um shell falharia, o que poderia impedir invasores mais simples. Mas, em princípio, quando chegamos ao ponto em que o atacante pode executar código arbitrário, não há nada que os impeça de fazer o que eles querem manualmente, sem um shell, ou apenas carregando um shell no sistema e executando-o. É apenas uma questão de quanto tempo seus atacantes estão preparados para usar.

Uma desvantagem óbvia de um sistema sem shell seria que configurá-lo seria mais difícil, já que você não poderia simplesmente efetuar login para iniciar um editor ou reiniciar os serviços. Você precisaria inicializar o sistema a partir de um "disco de recuperação" ou reconstruí-lo completamente para fazer alterações.

Observe que desabilitar as formas usuais de efetuar login no sistema ( getty s em consoles virtuais, SSH, etc.) não ajuda muito a impedir invasores. Eles são mais propensos a explorar bugs em qualquer serviço que você esteja executando, do que perguntar bem se o seu sistema permitiria que eles fizessem login.

    
por 24.12.2017 / 21:05
1

Minha primeira escolha seria desabilitar o ttys na tela e desabilitar / restringir o ssh, então não haverá basicamente nada para se logar: link

Outra possibilidade seria desabilitar o login do (s) usuário (s): Desativar o shell do usuário por motivos de segurança

    
por 22.12.2017 / 12:51