Qual é a diferença entre usuário e conta de serviço?

15

Gostaria de saber a diferença entre usuário e conta de serviço.

Eu sei que, por exemplo, Jenkinsinstalado no ubuntu não é um usuário, mas uma conta de serviço .

  1. O que é uso da conta de serviço?
  2. Quando precisamos deles?
  3. Como posso criar uma conta de serviço?
Rudziankoŭ
fonte

Respostas:

17

As contas de usuário são usadas por usuários reais, as contas de serviço são usadas pelos serviços do sistema, como servidores da Web, agentes de transporte de correio, bancos de dados etc. Por convenção, e somente por convenção, as contas de serviço têm IDs de usuário na faixa baixa, por exemplo, <1000 ou mais . Exceto pelo UID 0, as contas de serviço não têm privilégios especiais. As contas de serviço podem - e geralmente possuem - recursos específicos, até arquivos especiais de dispositivos, mas não têm privilégios de superusuário.

As contas de serviço podem ser criadas como contas de usuário comuns (por exemplo, usando useradd). No entanto, as contas de serviço geralmente são criadas e configuradas pelo gerenciador de pacotes na instalação do software de serviço. Portanto, mesmo como administrador, você raramente deve se preocupar diretamente com a criação de contas de serviço.

Por uma boa razão: Ao contrário das contas de usuário, as contas de serviço geralmente não possuem um shell de login "adequado", ou seja, têm /usr/sbin/nologincomo shell de login (ou, antigamente /bin/false). Além disso, as contas de serviço normalmente são bloqueadas, ou seja, não é possível fazer o login (para tradicional /etc/passwde /etc/shadowisso pode ser alcançado configurando o hash da senha com valores arbitrários como *ou x). Isso serve para proteger as contas de serviço contra abusos ( defesa em profundidade ).

Ter contas de serviço individuais para cada serviço tem dois objetivos principais: é uma medida de segurança para reduzir o impacto em caso de um incidente com um serviço ( compartimentalização ) e simplifica a administração, pois fica mais fácil rastrear quais recursos pertencem a qual serviço . Veja esta ou esta resposta em perguntas relacionadas para obter mais detalhes.

contra-modo
fonte
4

Originalmente, os usuários pretendiam corresponder a um ser humano usando o sistema, daí o nome. Cada processo é executado como um usuário específico e cada arquivo pertence a um usuário específico. Um usuário especial, chamado root, é usado para coisas que não pertencem a nenhum usuário humano específico, ou seja, o próprio sistema operacional. Como o root corresponde ao próprio sistema operacional, ele possui todos os privilégios.

Logo as pessoas descobriram que era conveniente criar vários usuários do sistema, sem grandes privilégios. Isso permite isolar os vários serviços executados em uma máquina, para que não pisem nos dedos uns dos outros. Uma conta de serviço (ou "conta do sistema", esses dois termos são sinônimos) é aquela que corresponde a um serviço em execução no sistema, e não a alguém que esteja usando o sistema. Você geralmente tem uma conta de serviço para cada tarefa em execução no sistema que possui seu próprio conjunto de privilégios (por exemplo, seus próprios arquivos, suas próprias portas de rede, etc.).

Não existe uma definição formal de conta humana vs sistema / serviço. O kernel não se importa (exceto conceder muitos privilégios ao usuário com UID 0). A maioria dos comandos de administração também não se importa. Algumas diferenças típicas são:

  • Um usuário humano tem um nome real como "John Doe", enquanto um usuário do sistema tem um nome descritivo como "Nasal daemon" ou nenhum.
  • Um usuário humano possui um shell de login real (por exemplo, /bin/shou /bin/bashou /bin/csh. Alguns usuários do sistema têm um shell (quase sempre /bin/sh), outros não, dependendo de como eles devem ser usados ​​(por exemplo, su foorequerfoo um shell).
  • Um usuário humano geralmente possui uma senha - mas nem sempre é o caso, por exemplo, um usuário remoto apenas pode ter uma chave SSH. Observe que nos unices modernos, a senha não está, /etc/passwdmas em algum outro arquivo, como/etc/shadow .
  • O diretório inicial de um usuário humano geralmente está abaixo /home(ou em algum local específico do site), enquanto o diretório inicial de um usuário do sistema geralmente não está abaixo /homee pode não existir (mas há exceções).
  • A maioria dos sites designa um intervalo de IDs de usuário para usuários do sistema e um intervalo separado para usuários humanos. Reservar 100–65533 ou 500–65533 ou 1000–65533 é típico e a maioria das distribuições é configurada para começar a alocar IDs de usuário reais de 500 ou 1000.

Nos sites em que as contas são compartilhadas em várias máquinas, normalmente existe um servidor central que contém listas de usuários, acessíveis via NIS ou LDAP . A passwdentrada em /etc/nsswitch.confespecifica onde encontrar informações do usuário. É comum ter usuários do sistema no local/etc/passwd e reais do banco de dados em toda a rede, mas às vezes existem usuários do sistema no banco de dados em toda a rede (para impor UIDs consistentes, o que facilita a replicação de servidor e dados), e às vezes existem usuários humanos no arquivo local (para permitir que eles efetuem login, mesmo quando a rede estiver hospedada).

Uma conta acessível ao ser humano disfarçada de usuário do sistema normalmente não teria um nome real, mas teria um shell de login e um conjunto de senhas ou uma chave SSH, além de ter um ID de usuário no intervalo do sistema. De fato, seria melhor disfarçar o uso de uma conta real do sistema cuja remoção faria com que algum serviço parasse de funcionar. Mas você não pode ter regras rígidas para detectar possíveis ataques: por definição, os invasores não seguem regras.

Contas de serviço e contas humanas são gerenciadas pelos mesmos comandos e registradas nos mesmos arquivos. Os comandos de criação de conta podem ter opções para definir padrões razoáveis ​​para usuários humanos versus serviços, por exemplo, para escolher um ID de usuário no intervalo adequado e solicitar uma senha para um humano e desativar a autenticação de senha para um serviço. Por exemplo, adduservsadduser --system ou useraddvs useradd -rno Linux.

Gilles 'SO- parar de ser mau'
fonte
3
    1. uma conta de serviço, também conhecida como conta técnica, é projetada para ser usada apenas por um serviço / aplicativo, não por um usuário comum.
    1. Os desenvolvedores de aplicativos e serviços desejam que essas contas restrinjam os direitos e privilégios dos processos associados, em vez de executá-los como raiz. Os serviços iniciados por init, systemdou similares, que são executados como raiz, fazem o downgrade rápido para a conta de serviço para limitar os riscos. Dependendo do sistema operacional usado, as contas de aplicativos podem receber mais privilégios do que as contas regulares, por exemplo, o direito de se conectar a uma porta TCP privilegiada ou, pelo contrário, seus privilégios reduzidos em comparação com um usuário comum, por exemplo, negar os processos de serviço a serem executados. ligar fork/ exec. Nesse caso, não há necessidade de fazer o downgrade dos serviços para a conta de serviço, eles podem ser iniciados com ela.
    1. Você não precisa, mas apenas criar uma conta sem uma senha utilizável e com um shell que não funcione (por exemplo /bin/false) e não será utilizável por um usuário comum, ou seja, não haverá como fazer login local ou remotamente (por exemplo, até ssh) usando o nome da conta. Como a maioria das limitações, usar a conta root ou sudopermitir superá-la.
jlliagre
fonte
1

Uma conta de serviço pode não ter a capacidade de usar um shell, por exemplo. É usado para executar serviços (daemon) com escopo e privilégios restritos. Minha opinião é que você pode criá-lo como um usuário comum, apenas tomando cuidado com os direitos e a participação no grupo. No entanto, na maioria das vezes você não faz isso porque os programas os criam automaticamente durante a instalação. Dê uma olhada/etc/passwd root:x:0:0:root:/root:/bin/bash

0 é o UID, caracteriza a hierarquia da conta no espaço do usuário, a raiz está acima de todos, então você tem a associação :rootao grupo, o diretório inicial, /rootfinalmente o shell usado pela conta/bin/bash para ' login' no sistema.

Você pode usar /usr/sbin/nologinpara uma conta para a qual não deseja privilégios de login.

Kuruwan
fonte