Por que alguns pacotes requerem que seu próprio usuário rode?

6

Por que no SVN, Apache e muitos outros programas, o administrador precisa criar um novo usuário apenas para o servidor usar?

    
por Yosef 19.06.2011 / 23:53

2 respostas

9

Se eu entendi sua pergunta corretamente, você está perguntando por que um usuário svn deve ser criado para svn, e um usuário www-data criado para o apache, etc. Correto?

A razão é para segurança. O conceito básico em jogo é chamado de "isolamento" e é uma prática comum. A principal idéia básica é que, se cada serviço for executado como seu próprio usuário, se houver alguma falha ou bug de segurança descoberto no programa, a falha só será explorada na medida permitida por esse usuário.

Por exemplo, suponha que alguém tenha descoberto como invadir o SVN e excluir todos os seus arquivos. (Isso não é uma falha real de segurança, e provavelmente nunca será, mas apenas suponha, por razões de argumentação) ... Se você rodasse o serviço SVN como o usuário 'root', então este hacker teórico poderia começar a deletar todos dos seus arquivos. Se, por outro lado, o SVN exigir seu próprio usuário, esse hacker teórico só poderá excluir os arquivos pertencentes ao usuário do SVN.

Espero que isso resolva sua pergunta ... se não, por favor, esclareça, e tentarei novamente.

EDIT: Para responder ao seu comentário ...

Normalmente, é sempre possível executar qualquer programa como root. Mas geralmente é desaconselhável fazê-lo, exceto quando for realmente necessário. Uma abordagem muito comum para esse tipo de coisa é executar todos os programas com a menor quantidade de permissão necessária. Isso também pode ajudar a evitar que um bug em um programa cause inadvertidamente problemas com outros programas (outra razão para o isolamento de segurança, que eu não mencionei anteriormente).

No entanto, há momentos em que um programa deve ser executado como root, porque ele simplesmente não pode fazer o que precisa fazer de outra maneira. Algumas tarefas comuns que exigem privilégios de root e, portanto, seriam justificativas para não serem executadas como um usuário separado:

  • Acessando o banco de dados de senha do sistema
  • Vinculação a (escuta) de uma porta TCP privilegiada (por exemplo, portas 1-1023)
  • Interagindo com o sistema de arquivos ou certos dispositivos de hardware em um nível baixo

Mesmo dentro dessas (e outras) categorias, muitas vezes há maneiras de contornar a necessidade de executar como root. Por exemplo, muitos programas de rede (Apache, por exemplo) serão iniciados como o usuário root, então ligam-se à porta 80, e então mudam os usuários para www-data para o resto de sua execução. Assim, mesmo quando há casos específicos que exigem acesso root, muitas vezes são tomadas medidas para contornar esse requisito para que o processo possa ser executado como um usuário com menos privilégios.

    
por 20.06.2011 / 00:03
4

Como os autores desses programas optam por usar bancos de dados de usuários separados, em vez de usar o banco de dados de senhas do sistema.

Um motivo pelo qual isso às vezes é feito é se o programa precisa ter acesso à versão em texto puro da senha, talvez porque esteja implementando um protocolo de rede que exige isso, já que não há como acessar as senhas em texto simples do sistema. usuários como eles são mantidos apenas em forma de hash.

Isso é verdade, por exemplo, com o apache e, por extensão, para o svn quando ele está usando a autenticação básica HTTP, já que a autenticação HTTP básica requer acesso às senhas de texto simples.

    
por 19.06.2011 / 23:57