A prática não é criar um usuário e grupo por aplicativo, mas por serviço. Ou seja, programas que são executados por um usuário local não precisam ser instalados como um usuário diferente de root. É daemons , programas sendo executados em segundo plano e que executam solicitações provenientes da rede ou de outros meios de comunicação, que deve ser executado 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 desencadeado por um invasor) o dano que ele pode fazer é limitado: somente os arquivos de dados do daemon são afetados (a menos que o invasor tenha encontrado buraco raiz local, o que pode acontecer). Por exemplo, o daemon do banco de dados mysqld
é executado como um usuário dedicado e o grupo mysql:mysql
e os arquivos de dados do banco de dados ( /var/lib/mysql/*
) pertencem a 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 processo mysqld
não tem sobregravação de negócios /usr/sbin/mysqld
ou /etc/mysql/my.cnf
, portanto, esses arquivos não devem pertencer ao usuário mysql
ou ser graváveis pelo usuário mysql
ou pelo grupo mysql
. Se alguns arquivos precisarem ser legíveis somente pelo daemon e pelo administrador, eles devem ser de propriedade do usuário root e do grupo dedicado, e ter o modo 0640 ( rw-r-----
).
Uma categoria especial de executáveis que não podem ser de propriedade de root:root
sã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; então o executável deve ter o modo 4755 ( rwsr-xr-x
). Se o programa precisar com privilégios extras, mas não como root, o programa deve ser configurado como setgid, de modo que os privilégios extras passem por um grupo e não por um usuário. O executável tem então o modo 2755 ( rwxr-sr-x
). As razões são duplas:
- O executável não deve ter permissão para se modificar, de modo que, se um usuário conseguir explorar uma vulnerabilidade, poderá modificar os arquivos de dados usados pelo programa, mas não injetar um trojan horse 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 invocou o programa) para interagir com o usuário e com o usuário efetivo (o usuário que o programa está executando) para acessar seus arquivos de dados privados (a razão para isso). ter privilégios extras). Um programa setgid pode, além disso, separar os dados por usuário que são acessíveis apenas ao grupo (por exemplo, armazenando arquivos pertencentes ao usuário em um diretório acessível apenas para o root e o grupo do programa).