Estou executando um sistema desktop Ubuntu 12.04. Até agora, instalei apenas alguns programas (tenho direitos sudo).
Quando eu checo a lista de usuários no sistema, vejo uma lista longa, como mais de 20 usuários - quando esses usuários foram criados (por exemplo, daemon, sys, sync, jogos, pulso, etc.)? Como eles estão relacionados aos novos programas que estão sendo instalados?
Se eu executar um programa no meu sistema, ele deverá ser executado com o meu UID. Mas, ao fazer um ps , vejo muitos outros programas sendo executados com UID diferentes (como root, daemon, avahi, syslog, colord etc.) - como esses programas foram iniciados com UIDs diferentes?
Respostas:
As contas de usuário são usadas não apenas para usuários humanos reais, mas também para executar serviços do sistema e, às vezes, como proprietários de arquivos do sistema. Isso é feito porque a separação entre os recursos dos usuários humanos (processos, arquivos etc.) e a separação entre os recursos dos serviços do sistema requer os mesmos mecanismos.
Os programas que você executa normalmente são executados com seu ID do usuário. Apenas os daemons do sistema são executados sob sua própria conta. O arquivo de configuração que indica quando executar o daemon também indica qual usuário deve ser executado ou o daemon muda para uma conta não privilegiada após o início. Alguns daemons requerem privilégios administrativos totais, portanto, eles são executados na conta raiz . Muitos daemons precisam apenas acessar um dispositivo de hardware específico ou arquivos específicos; portanto, eles são executados em uma conta de usuário dedicada. Isso é feito por segurança: dessa forma, mesmo se houver um bug ou configuração incorreta em um desses serviços, não poderá levar a um ataque completo ao sistema, porque o invasor ficará limitado ao que esse serviço pode fazer e não será. capaz de sobrescrever arquivos, espionar processos, etc.
No Ubuntu, os IDs de usuário no intervalo de 0 a 99 são criados na instalação do sistema. 0 é raiz; muitos no intervalo de 1 a 99 existem apenas por razões históricas e são mantidos apenas para compatibilidade com versões anteriores de algumas instalações locais que os usam (algumas entradas extras não prejudicam). Os IDs de usuário no intervalo de 100 a 1999 são criados e removidos dinamicamente quando serviços que precisam de um ID de usuário dedicado são instalados ou removidos. O intervalo de 1000 em diante é para usuários humanos ou qualquer outra conta criada pelo administrador do sistema. O mesmo vale para grupos.
fonte
Presumo que você encontre esta lista de usuários verificando
/etc/passwd
? Isso é totalmente normal - 'usuários' servem para transportar um conjunto de permissões, úteis para bloquear não apenas 'usuários reais', mas também programas para determinadas áreas do sistema e rastrear o que eles mudaram (mesmo conceito com grupos).Inseri um dos meus
/etc/passwd
arquivos Raspberry Pi abaixo para sua referência; você notará o usuáriontop
na parte inferior deste arquivo, criado pelo programantop
(monitoramento de rede). Da mesma formasshd
,gnats
relatórios de erros etc.fonte
dpkg --get-selections | grep -v deinstall
-lo e compará-lo com a sua lista de arquivos / etc / passwd, se quiser. Quanto à sua pergunta: "... como esses programas são executados com diff UID", você pode tentar isso sozinho. Escreva um script bash aleatóriotest_file
que contenha algo inócuo (echo "Test"
). Entãosudo chmod 755 test_file
(para que seja legível e executável por qualquer pessoa e legível, gravável e executável pelo proprietário), osudo chown nobody
que o atribuirá ao usuárionobody
. Então execute. O 'programa'test_file
acabou de rodar com o UIDnobody
.nobody
UID, mas foi executado com o seu UID; você precisaria torná-lo um arquivo SUID para fazer isso, mas o bit SUID será descartado se o arquivo for executado com um intérprete.dpkg
bit ainda é útil (espero), desconsidere a parte de executá- lo como você mesmo! Quer ir com SUID ou o login como um usuário diferente para que isso faz sentidoNos 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:
root
,bin
, edaemon
; eadm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
, enobody
Outras contas de usuários que são mencionados aqui -
pulse
,avahi
,colord
eDebian-exim
(para escolher um de arquivo de senhas do py4on) - levar-nos a sua pergunta seguinte.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 é executadogetent
para verificar se a conta do usuário já existe euseradd
se não existe. Em teoria, ele seria excluído pelopostrm
script de mantenedor do pacote , em execuçãouserdel
.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.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:
rc
o script/etc/init.d
usa uma ferramenta auxiliar comostart-stop-daemon
e sua--chuid
opção.run
chamadas de scriptsetuidgid
,s6-setuidgid
,chpst
, ourunuid
com o nome da conta do usuário. Existem exemplos disso em /unix//a/179798/5132 que definem anagios
conta do usuário.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 .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
fonte
No Linux, quando instalamos um serviço, ele cria um usuário com seu nome de serviço ou semelhante ao que não pode acessar outros arquivos.
fonte