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 é mysqld
executado como um usuário e grupo dedicado mysql:mysql
e 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 mysqld
processo não possui substituição comercial /usr/sbin/mysqld
ou /etc/mysql/my.cnf
, portanto, esses arquivos não devem pertencer ao mysql
usuário ou ser graváveis pelo mysql
usuário ou pelo mysql
grupo. 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: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; 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).