Uso de rpm e yum para instalação de aplicativos em ambiente de instalação grande

3

Nossa organização muito grande desenvolveu um padrão para hospedagem de aplicativos que determina que o aplicativo e todos os componentes nos quais ele se baseia devem residir em um volume de aplicativo dedicado, distinto do próprio sistema operacional. Por exemplo, se o aplicativo é escrito em Perl, exigimos que uma instância separada do Perl seja mantida dentro do volume do aplicativo.

O raciocínio por trás disso é que esses componentes que são invocados pelo sistema operacional e por um aplicativo podem e geralmente têm requisitos de versão conflitantes, e forçar o aplicativo a manter seus próprios recursos torna muito mais fácil corrigir o sistema operacional. Além disso, garante que os dados e logs do aplicativo não sejam armazenados nos locais onde estão as ferramentas baseadas no sistema operacional (isso é particularmente crítico em relação ao httpd, por exemplo).

Além disso, a menos que haja um motivo técnico válido e documentado, os processos do aplicativo devem ser executados como uma identidade de usuário não privilegiada e não como raiz. Temos soluções alternativas no Linux para que processos como servidores da web possam ser executados como um usuário sem privilégios e aceitar conexões encaminhadas das portas privilegiadas (80 e 443) para as portas sem privilégios que estão escutando.

Por questão de perspectiva, sou um profissional de segurança na organização Unix / Linux SA na minha empresa e trabalho em estreita colaboração com os especialistas de suporte técnico da plataforma para manter e aplicar os padrões que expus acima. Uma grande parte de minhas responsabilidades é examinar solicitações de acesso privilegiado via sudo, que são gerenciadas centralmente. Nosso Linux padrão é o Red Hat, mas o Ubuntu e o CentOS também estão sendo considerados para ambientes de nuvem.

O problema é que atualmente estamos sendo bombardeados com solicitações de equipes de aplicativos para permitir que eles (via sudo) instalem aplicativos Linux com rpm e yum, já que os fornecedores exigem isso e não são capazes de fornecer qualquer meio alternativo para instalar o aplicações. Isso entra em conflito com nossos padrões de várias maneiras:

  • As ferramentas rpm e yum devem ser executadas com privilégios de root. Isso significa que tudo o que eles fazem opera como root, portanto, a instalação resultante deve ser ajustada após o fato para permitir que ele seja executado como um usuário sem privilégios.

  • Os pacotes geralmente especificam que os componentes devem ser instalados no volume raiz, e não em um volume especificado. Onde a raiz da árvore de pacotes pode ser especificada, muitas vezes os fornecedores insistem que ela permaneça inalterada, porque eles apenas a testaram no ambiente preciso especificado nos pacotes.

  • Finalmente, o rpm e o yum extraem dependências de qualquer repositório disponível para o sistema e, embora exijamos que os aplicativos usem nosso repositório Satellite para qualquer coisa disponível da Red Hat, muitas vezes os fornecedores fornecem seus próprios repositórios que devem ser incluídos para o software funcionar.

A minha pergunta é como especificar ou restringir o uso do rpm e do yum em tal ambiente para garantir que os conflitos de pacotes não ocorram e que os patches de segurança do sistema possam ser aplicados com segurança, sem proibir o uso dessas ferramentas para o aplicativo software completamente (o que temos feito até agora e descobri que é um exercício de futilidade)?

    
por Mike McManus 18.07.2014 / 21:22

2 respostas

10

Antes de entrarmos em soluções, algumas palavras sobre os padrões de segurança da sua empresa. Simplificando, eles são muito difíceis de trabalhar e tão desatualizados que são quase irrelevantes.

É óbvio por que é difícil trabalhar com eles, então não vou falar mais sobre isso.

Quanto a estar desatualizado, é claro que eles não levam em conta as tecnologias modernas, como virtualização, recursos de Linux, containers, SELinux, etc., que ajudam a resolver os mesmos problemas de segurança em muito mais elegantes e utilizáveis maneiras.

A título de exemplo, vincular o httpd a uma porta alta e redirecionar o tráfego para ele com iptables, em vez de simplesmente deixá-lo vincular e descartar privilégios, como faz por padrão, faz fronteira com a paranóia e não lhe dá praticamente nada. Isso também complica o uso do SELinux com o httpd, já que esse tipo de configuração não foi planejado com o design da política httpd SELinux.

Da mesma forma, apenas exigir que os pacotes empilhem em /opt ou /usr/local você não ganha nada, já que o RPM já mantém a separação que você precisa independentemente de onde os pacotes são instalados (a menos que o pacote seja quebrado, o que pode ser o caso com pacotes de fornecedores de terceiros, mas isso se recusaria a instalar) e perderia a conformidade com os padrões, possivelmente tornando inúteis as políticas relevantes do SELinux e criando um pesadelo de manutenção. As Coleções de Software da Red Hat são projetadas nessa linha e, embora tenha alguns problemas de usabilidade, construir seus próprios pacotes por esse design pode ser uma medida provisória enquanto você trabalha com os problemas reais.

O maior problema que vejo, porém, é manter um tipo de servidor "grande ferro", ou servidores, no qual todos os aplicativos são executados lado a lado. Isso por si só apresenta seus próprios problemas de segurança, que provavelmente é a origem dessas "práticas de segurança". A virtualização é bastante madura neste momento e simplesmente separa os aplicativos em suas próprias VMs, por exemplo, com o KVM no RHEL 6 ou RHEL 7 , será elimine a necessidade da maioria dessas "práticas de segurança".

Nessa linha, como você quase certamente tem um grande número de aplicativos, criando uma nuvem privada com o OpenStack provavelmente será sua melhor aposta a curto e médio prazo. Eles usariam os hosts do RHEL 7 e rodariam o RHEL 7, 6 e talvez até 5 convidados, já que você provavelmente tem muitos dos que ainda estão vivos e funcionando. Também lhe daria uma plataforma para experimentar com segurança novos aplicativos e sistemas operacionais, além de alocar recursos mais facilmente por unidade de negócios, departamento, etc.

Se a virtualização for muito pesada para algumas coisas, mova-a para contêineres (por exemplo, LXC / Docker no RHEL 7 ). Eles são muito mais leves e podem ser removidos para praticamente nada além do próprio pacote de aplicativos e isolados com seus próprios namespaces de sistema de arquivos, rede e uid / gid, eliminando-os de qualquer outro contêiner, exceto por meio do que você abrir no respectivos firewalls. A adição do SELinux a máquinas virtuais KVM ou contêineres do Linux fornece uma segunda camada de proteção e pode ser ativada com um clique.

Além disso, sua empresa está cheia de desenvolvedores que o amarão para sempre se você começar a oferecer o OpenStack e / ou o Docker.

Em suma, é hora de avaliar as distribuições modernas do Linux e os recursos que elas fornecem e reavaliar todas as práticas de segurança à luz desses recursos.

Com relação ao licenciamento, a Red Hat agora oferece licenças de virtualização ilimitadas, permitindo que você execute VMs / contêineres RHEL ilimitados e, claro, há também o CentOS que substituirá o RHEL em 99,9% do tempo. Então não há desculpas lá.

    
por 19.07.2014 / 09:56
0

A resposta mais genérica para a sua pergunta é "não". Durante a instalação, o yum / rpm precisa gravar nos locais das pastas privilegiadas de root

Normalmente, todos os pacotes binários são compilados para serem usados no nível do sistema. É possível usar mock / pseudo shells para criar tipos de ambientes chroot & instalar softwares em seu espaço de casa.

Como mencionado por Mark, a implementação de RPMs será a solução adequada para o cenário atual.

Há poucas referências para dar uma olhada

link link link

    
por 19.07.2014 / 09:21