Quando esses usuários foram criados?
Nos casos mencionados, eles foram criados na instalação do sistema. Essas contas de usuário são convencionais, algumas datando de décadas atrás. Eles também são padronizados. A base padrão do Linux os divide em:
- a necessária utilizador padrão contas,
root
, bin
, e daemon
; e
- o opcional contas de usuário padrão
adm
, lp
, sync
, shutdown
, halt
, mail
, news
, uucp
, operator
, man
, enobody
Outras contas de usuários que são mencionados aqui - pulse
, avahi
, colord
e Debian-exim
(para escolher um de arquivo de senhas do py4on) - levar-nos a sua pergunta seguinte.
Como eles estão relacionados aos novos programas que estão sendo instalados?
As contas de usuário não padrão são criadas e destruídas pelos "scripts de manutenção" para vários pacotes, à medida que esses pacotes são instalados e eliminados. Uma conta de usuário será criada pelo chamado postinst
script mantenedor do pacote , que é executado getent
para verificar se a conta do usuário já existe e useradd
se não existe. Em teoria, ele seria excluído pelo postrm
script de mantenedor do pacote , em execução userdel
.
Na prática, as contas de usuário para pacotes não são excluídas. O wiki do Fedora (qv) explica que isso seria difícil. Veja o bug Debian # 646175 para um exemplo dessa lógica em ação, na qual é decidido simplesmente não excluir a rabbitmq
conta do usuário quando o pacote for eliminado, para resolver um problema com um daemon que continua sendo executado sob a égide dessa conta.
Como esses programas foram iniciados com diferentes UIDs?
No Unix e Linux, um processo em execução sob a égide do superusuário pode alterar sua conta de usuário para outra coisa e continuar executando o mesmo programa, mas o inverso não é permitido. (É necessário usar o mecanismo set-UID.)
O sistema de gerenciamento daemon é executado como superusuário. Seus dados de configuração especificam que daemons específicos são executados sob a égide de contas de usuário específicas:
- Com o Sistema 5,
rc
o script /etc/init.d
usa uma ferramenta auxiliar como start-stop-daemon
e sua --chuid
opção.
- Com um gerente de serviço daemontools família, as
run
chamadas de script setuidgid
, s6-setuidgid
, chpst
, ou runuid
com o nome da conta do usuário. Existem exemplos disso em /unix//a/179798/5132 que definem a nagios
conta do usuário.
- Com o iniciante, há uma
setuid
estrofe em um arquivo de trabalho, que especifica a conta do usuário. Isso não é particularmente refinado e, às vezes, se deseja o que é descrito em /superuser//a/723333/38062 .
- Com systemd, há uma
User=
configuração no arquivo da unidade de serviço, que especifica a conta do usuário.
Quando o sistema de gerenciamento de daemon gera um processo para ser daemon, esses mecanismos eliminam os privilégios de superusuário, para que o processo daemon continue sendo executado sob a égide da conta de usuário sem privilégios.
Há uma explicação bastante longa por que um bom gerenciamento de daemon é feito dessa maneira. Mas você não perguntou o porquê; somente quando, como e de onde. Pr Um resumo muito breve, portanto:
Os sistemas operacionais Unix e Linux isolam processos em execução sob a égide de diferentes contas de usuários. Historicamente, se alguém pudesse assumir o controle de um daemon que funcionava como superusuário, poderia fazer o que quisesse. Um daemon que é executado sob a égide de uma conta sem privilégios, por outro lado, pode acessar apenas arquivos, diretórios, dispositivos e processos que essa conta sem privilégios pode. Um sistema de programas daemon desconfiados mutuamente, todos funcionando sob a égide de diferentes contas de usuário e incapazes de acessar / controlar arquivos / diretórios / processos / dispositivos (internos, confiáveis) uns dos outros, portanto, é muito mais difícil de decifrar.
Leitura adicional