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.
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.