Por que é recomendável criar um grupo e um usuário para alguns aplicativos?


11

Na maioria das vezes, ao instalar um programa a partir da fonte, é recomendável criar um novo usuário e um novo grupo e dar /usr/local/<myapp>ao usuário e ao grupo criados recentemente.

  • Por que essa prática é considerada uma boa prática?

  • O que isso melhora?

Exemplo: usuário mysql / grupo mysql para o servidor de banco de dados MySQL.

Respostas:


11

A prática não é criar um usuário e grupo por aplicativo, mas por serviço. Ou seja, os programas executados por um usuário local não precisam ser instalados como um usuário que não seja root. São daemons , programas em execução em segundo plano e que executam solicitações vindas da rede ou de outros meios de comunicação, que devem ser executados como um usuário dedicado.

O daemon é executado como um usuário dedicado, de modo que, se ele se comportar mal (devido a um bug, provavelmente acionado por um invasor), o dano que ele pode causar é limitado: apenas os arquivos de dados do daemon são afetados (a menos que o invasor tenha conseguido encontrar um buraco na raiz local) , o que pode acontecer). Por exemplo, o daemon do banco de dados é mysqldexecutado como um usuário e grupo dedicado mysql:mysqle os arquivos de dados do banco de dados ( /var/lib/mysql/*) pertencem mysql:mysql.

Observe que o executável do daemon e outros dados estáticos e arquivos de configuração que são usados, mas não devem ser modificados pelo daemon, não devem pertencer ao usuário dedicado; eles devem pertencer a root:root, como a maioria dos arquivos de programa e configuração. O mysqldprocesso não possui substituição comercial /usr/sbin/mysqldou /etc/mysql/my.cnf, portanto, esses arquivos não devem pertencer ao mysqlusuário ou ser graváveis ​​pelo mysqlusuário ou pelo mysqlgrupo. Se alguns arquivos precisarem ser legíveis apenas pelo daemon e pelo administrador, eles deverão pertencer à raiz do usuário e ao grupo dedicado e ter o modo 0640 ( rw-r-----).

Uma categoria especial de executáveis ​​que não podem pertencer a eles root:rootsão programas que são chamados por um usuário, mas precisam ser executados com privilégios extras. Esses executáveis ​​devem ser setuid root se precisarem ser executados (pelo menos em parte) como root; o executável deve ter o modo 4755 ( rwsr-xr-x). Se o programa precisar de privilégios extras, mas não como raiz, o programa deverá ser configurado como setgid, para que os privilégios extras venham através de um grupo e não de um usuário. O executável possui o modo 2755 ( rwxr-sr-x). Os motivos são duplos:

  • O executável não deve se modificar, para que, se um usuário conseguir explorar uma vulnerabilidade, ele possa modificar os arquivos de dados usados ​​pelo programa, mas não injetar um cavalo de Troia no executável para atacar outros usuários executando o programa. .
  • O arquivo de dados do executável pertence ao grupo. Um programa setuid teria que alternar entre o usuário real (o usuário que chamou o programa) para interagir com o usuário e com o usuário efetivo (o usuário no qual o programa está sendo executado) para acessar seus arquivos de dados privados (a razão para isso). ter privilégios extras). Um programa setgid também pode segregar dados por usuário que são acessíveis apenas ao grupo (por exemplo, armazenando arquivos pertencentes ao usuário em um diretório que é acessível apenas para a raiz e o grupo do programa).

3

Não são aplicativos em geral, mas daemons para que serve. O motivo é que o daemon pode ser executado como um usuário sem privilégios, em vez de root, para que, se houver uma vulnerabilidade de segurança e for comprometido, o dano que puder ser causado contenha apenas as áreas às quais o usuário tem acesso.


1

O motivo pelo qual é considerada uma boa prática é impedir que outros usuários do sistema substituam dados e arquivos de configuração para um aplicativo específico.

Como exemplo mysql/ mysqlsendo o proprietário do armazenamento para mysql qualquer arquivos de banco de dados impede não usando a API do aplicativo de corromper os bancos de dados. Além disso, o usuário mysqlgeralmente não possui um shell real, para que ninguém possa fazer login como esse usuário.


Você perdeu um ponto crítico, que é o usuário e o grupo em que o aplicativo está sendo executado, e os arquivos estáticos e executáveis ​​devem ser de propriedade da raiz.
Gilles 'SO- stop be evil'

@ Gilles Eles podem ser de propriedade do root e a maioria dos aplicativos instalados via distribuições, mas eles não precisam ser e não precisam ser. Por uma questão de fato, /usr/bin/até de propriedade do daemon/daemonUbuntu
Karlson

1
atnão é um daemon. É configurado daemonpara que ele possa se comunicar com o atddaemon através de arquivos particulares.
Gilles 'SO- stop be evil'

1

Criar um novo grupo / usuário para um novo daemon instalado melhora a segurança. Quando o processo do servidor é executado sob esse usuário, ele é restrito aos direitos de acesso desse usuário. Em comparação: quando é executado como root, ele pode fazer tudo.

Essa diferença é importante caso o seu daemon esteja configurado incorretamente e / ou contenha um bug relacionado à segurança.

Não sei ao certo o que você quer dizer com a segunda parte da sua pergunta, ou seja, a parte sobre /usr/localpropriedade. Em geral, não faz sentido que o mesmo usuário Xsob o qual um daemon seja executado por razões de segurança também possua o diretório com os binários (porque, nesse caso, poderia alterá-los no caso de uma exploração). Mas o diretório com os arquivos de dados nos quais o daemon trabalha deve estar acessível X- a maneira mais fácil de configurar isso é tornar Xo proprietário dos diretórios / arquivos de dados.

A execução de um daemon sob seu próprio usuário especial é apenas uma técnica de segurança; outras incluem algum tipo de 'chrooting' ou uso do sistema de controle de acesso obrigatório (MAC) (por exemplo, SELinux).


1

Esta é uma consideração de segurança. Limita o dano que pode ser causado por alguém que invade um aplicativo daemon. O aplicativo do usuário geralmente pertence a um ID do usuário padrão, como root.

Se o servidor da Web, o servidor de email e o banco de dados forem executados como o mesmo usuário, será mais fácil comprometê-los. Se qualquer um deles tiver um erro ou configuração incorreta que permita o acesso ao sistema, esse acesso poderá ser usado para acessar todos os três aplicativos.

Se todos eles tiverem contas separadas, conforme recomendado, é provável que apenas o aplicativo comprometido esteja acessível. Embora os detalhes de configuração pública do outro possam ser lidos, é improvável que sejam feitas alterações.

Muitos daemons permitem que os usuários carreguem e baixem arquivos e, de outra forma, fazem coisas que você não gostaria que eles pudessem fazer nas configurações de outros daemons. Se cada aplicativo tiver seu próprio ID de usuário e grupo, é mais simples proteger os daemons.

Ter um grupo específico do daemon torna mais simples conceder com segurança ao daemon acesso seguro somente leitura a arquivos e diretórios. Se o arquivo ou diretório pertencer a um usuário diferente, mas pertencer ao grupo daemons, geralmente ele será acessível somente para leitura. As permissões de acesso podem ser facilmente verificadas e corrigidas com ferramentas como a localização.


Você perdeu um ponto crítico, que é o usuário e o grupo em que o aplicativo está sendo executado, e os arquivos estáticos e executáveis ​​devem ser de propriedade da raiz.
Gilles 'SO- stop be evil'

@ Gilles: anotado e editado de acordo.
BillThor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.