Desativar 'apt-get', 'yum' para instalar binários setuid quando executado via sudo

1

Suponha que você possa instalar algo em um sistema, porque você tem sudo de direitos para fazer isso, mas só tem sudo direitos para o instalador. Nesse caso, é bastante fácil criar um pacote que instale um binário pertencente à raiz que tenha o bit setuid configurado durante a instalação. , e tem que executar binário qualquer comando que você alimenta, como root. Isso torna inseguro permitir acesso limitado de sudo para qualquer usuário a um pacote que possa alterar arbitrariamente as permissões de alteração. A outra falha de segurança óbvia (IMO) é que um pacote pode atualizar o arquivo /etc/sudoers e conceder ao usuário todos os tipos de direitos adicionais.

Até onde eu sei, apt-get nem yum tem uma opção que você pode definir, ou verificar como elas são invocadas, que causa o que está instalado nos locais normais, padrão, mas de forma limitada (por exemplo não sobregravar arquivos já disponíveis ou não definir bits setuid).

Eu perdi algo e a instalação com essas restrições existe? Está disponível em outros instaladores? Ou existem outras soluções conhecidas que tornariam essas restrições ineficazes (e implementando-as uma perda de tempo)?

    
por Anthon 31.05.2015 / 14:21

2 respostas

1

Isso provavelmente é possível com uma política do SELinux (e provavelmente não é possível sem o SELinux ou outro módulo de segurança que possa confinar o root), mas é inútil.

Como você observou, um pacote pode declarar que instala /etc/sudoers . Mesmo se você fizer uma regra ad hoc para impedir isso de alguma forma, o pacote pode soltar um arquivo em /etc/sudoers.d . Ou pode soltar um arquivo em /etc/profile.d , para ser lido na próxima vez em que qualquer usuário efetuar login. Ou pode adicionar um serviço iniciado por root no momento da inicialização. A lista continua e continua; é incontrolável, e mesmo se você capturasse os casos problemáticos, você teria evitado a instalação de tantos pacotes que você poderia não incomodar (por exemplo, esse recurso não permitiria a maioria das atualizações de segurança). Outra coisa que o pacote poderia fazer é instalar um programa que você seria enganado em usar mais tarde (por exemplo, se você proibir o acesso de gravação a /bin , poderia instalar /usr/local/bin/ls ) e que injeta um backdoor por sua conta da próxima vez que você invocar o programa. Para evitar que uma instalação de pacote iniba uma possível falha de segurança, você precisa restringir a instalação a pacotes confiáveis ou garantir que nunca use os pacotes instalados.

Basicamente, se você não confiar em um usuário, não poderá permitir que ele instale pacotes arbitrários em seu sistema. Deixe-os instalar o software em seu diretório pessoal se precisarem de algo que não esteja na distribuição.

Se você deseja conceder a um usuário não confiável a capacidade de instalar mais pacotes (de uma lista predefinida de fontes aprovadas como seguras) ou atualizar pacotes existentes no sistema principal, isso pode ser seguro, mas é necessário tomar precauções , em particular, para desabilitar a interação durante a instalação. Veja É seguro para o meu usuário ssh receber o sudo sem senha para 'apt-get update' e 'apt-get upgrade'? para algumas idéias sobre apt-get upgrade .

Em versões recentes do Linux (kernel ≥ 3.8), qualquer usuário pode iniciar um namespace de usuário no qual eles têm o ID de usuário 0 Isso basicamente permite que um usuário instale sua própria distribuição em seu próprio diretório.

    
por 01.06.2015 / 00:08
1

Se um usuário puder criar qualquer pacote e enviá-lo para um repositório de confiança do instalador, não sei de nenhuma maneira de proteger o sistema da maneira que você está procurando (pelo menos não com apt-get ) . Os scripts do mantenedor em um pacote são executados como root (seja em apt , yum ou dnf type systems), portanto, instalar um pacote efetivamente fornece ao autor do pacote root acesso a esse sistema.

Talvez com algo como o SELinux você possa criar uma política que forneça aos usuários acesso suficiente para instalar pacotes em determinados locais, mas sem causar nenhum dano (por exemplo, não toque em /etc/sudoers , /sbin , /usr/sbin etc, e, claro, a configuração do gerenciador de pacotes), mas duvido que você possa pegar tudo. (Eu não sei o suficiente sobre o SELinux para ter certeza.)

Se você pode controlar o que entra nos repositórios, então está OK. Se alguém puder fazer upload de qualquer coisa para o repositório, exigir assinaturas não vai realmente ajudar muito, pelo menos com apt-get : assinaturas incompatíveis causam apenas avisos e prompts, que podem ser substituídos, e eu não acho que haja uma maneira de configurar apt-get para que não permita uma substituição.

    
por 31.05.2015 / 20:20