programa precisa ser executado como root por qualquer usuário e pode ser localizado em qualquer lugar

4

Eu tenho um programa chamado foo que precisa de privilégios de root quando é executado. O foo precisa ser capaz de ser executado por qualquer usuário e pode estar localizado em qualquer caminho. A razão pela qual este programa pode estar em qualquer caminho é porque nossa empresa está desenvolvendo o programa foo e cada usuário pode ter uma versão pessoal do programa em algum diretório pessoal enquanto trabalha nele.

Minha pergunta é: qual é a maneira mais segura de lidar com isso? Eu tenho pesquisado o arquivo sudoers e tenho basicamente 2 ideias.

  1. Lista todos os caminhos nos quais o programa pode estar no arquivo sudoers. Isso é problemático porque requer a edição freqüente da lista de sudoers e também representa um risco de segurança, já que os usuários não-root terão sua cópia individual do foo e poderão copiar algum programa do sistema pelo foo e usá-lo como root.

  2. Escreva um script chamado start_foo que executa alguma validação de entrada no programa passado, como tamanho e nome, e então inicia o passado em foo. start_foo poderia viver em /usr/bin e pertencer a root, mas executável por qualquer pessoa. Esta opção ainda inclui a falha de segurança de poder escrever sobre o programa foo dos usuários com outra raiz que requer o programa, mas esperamos que a verificação de tamanho detecte alguns casos maliciosos.

Existe uma maneira "canônica" de resolver esse problema que não encontrei ou pensei? Se não qual das soluções acima ou possivelmente outra é a melhor maneira de lidar com o problema?

    
por user3376127 03.03.2014 / 21:41

1 resposta

0

Com uma ressalva, o "caminho certo" para permitir que um programa tenha privilégios de root e seja executado por qualquer usuário, é usar setuid e setgid flags passados para chmod . Este tutorial explica o processo. Você deve ser root para aplicar os sinalizadores setuid ou setgid e o programa deve ser de propriedade de root.

A ressalva é que é extremamente inseguro permitir que um usuário execute um programa com privilégios de root. Qualquer exploração no código do programa pode permitir que um usuário comum obtenha privilégios de root. Muitas explorações do Linux ao longo dos anos exploraram um binário binário setuid para obter um escalonamento de privilégios.

Apenas para fins informativos e educativos, veja como você faz isso:

chown root /usr/bin/myprogram
chmod u+s /usr/bin/myprogram

Mas, como os outros disseram acima, não faça isso!

    
por 11.05.2015 / 02:56

Tags