Qual é o objetivo do usuário 'ninguém'?

93

Depois de ler Listar todos os usuários humanos , notei que há uma conta de usuário chamada 'ninguém' no meu sistema Ubuntu.

Também notei que posso fazer login nesta conta no terminal usando o seguinte comando e minha senha:

sudo su nobody

su ninguém

Isso não me importa, mas quero saber qual é o objetivo deste usuário? Ele é criado por padrão em uma nova instalação do Ubuntu ou é criado instalando um pacote específico?

Radu Rădeanu
fonte
8
Observe que, ao fazer login usando sua senha, você está usando a senha para a etapa sudo, não para a conta ninguém (e a razão pela qual isso funciona é porque o superusuário pode processar com qualquer pessoa sem precisar digitar sua senha (embora mencionado abaixo, eu acredito que, pelo menos em RH-derivados, se shell de ninguém é definido como / sbin / nologin, você ainda não seria capaz de fazer logon no mesmo usando superusuário (aka root)
Foon
Esse é o caso por padrão agora (18.04 +?). sudo su nobodyreturn Esta conta não está disponível no momento. porque o shell para o usuário nobody está definido como/usr/sbin/nologin ( getent passwd nobody).
Pablo A
@arnold - por favor, veja o meu comentário sobre a resposta que eu acredito que você está fazendo alusão. É uma resposta bastante ruim, pois não raciocina nem cita fontes. Além disso, vai contra tudo o que sei sobre a conta ninguém e como o NFS funciona: com root_squashele mapeará a raiz para ninguém em sistemas remotos. Isso é mais ou menos exatamente o oposto do que essa resposta indica
vidarlo

Respostas:

85

Está lá para executar coisas que não precisam de permissões especiais. Geralmente, é reservado para serviços vulneráveis ​​(httpd, etc), para que, se forem invadidos, tenham um dano mínimo no restante do sistema.

Compare isso com a execução de algo como um usuário real, se esse serviço fosse comprometido (servidores da Web são ocasionalmente explorados para executar código arbitrário), ele seria executado como esse usuário e teria acesso a tudo o que o usuário tivesse. Na maioria dos casos, isso é tão ruim quanto obter root.

Você pode ler um pouco mais sobre o usuário ninguem no Ubuntu Wiki:

Para responder aos seus acompanhamentos:

Por que não consigo acessar esta conta su nobody?

sudo grep nobody /etc/shadowmostrará que ninguém não tem uma senha e você não pode susem uma senha de conta. A maneira mais limpa é sudo su nobodyfazê-lo. Isso deixará você em uma shconcha bem desolada .

Você pode dar um exemplo específico quando é indicado o uso dessa conta?

Quando não são necessárias permissões para as operações de um programa. Isso é mais notável quando nunca haverá atividade em disco.

Um exemplo real disso é memcached(um cache / banco de dados / coisa na memória de valor-chave), sentado no meu computador e no meu servidor rodando na conta de ninguém. Por quê? Porque ele simplesmente não precisa de permissões e fornecer uma conta com acesso de gravação a arquivos seria apenas um risco desnecessário.

Oli
fonte
Apenas mais duas coisas, se você pode explicar: 1) por que não consigo acessar esta conta su nobodye 2) você pode dar um exemplo específico quando é indicado o uso dessa conta?
Radu Rădeanu
@ RaduRădeanu 1) Acho que é porque não tem uma senha definida e, quando você sué um usuário comum, deve fornecer a senha do usuário de destino. Tente sudo -ientão a su nobodypartir do shell raiz (que não exigirá uma senha).
um CVn 7/08/13
2
Network File Systemmapeia rootpara nobodyque a raiz local não possa acessar tudo como a raiz remota.
21413 Sylwester
1
@ RaduRădeanu Observe o histórico de edições. Quando testei o comando original (não o que está lá), este estava acabando em um shell de traço (/ bin / sh), mas não posso replicá-lo agora. Sua edição original foi boa. Não fui eu quem mudou.
Oli
1
Eu sempre pensei que nobodyé realmente / principalmente usado pelo NFS como estados linuxstandardbase .
dgonzalez
29

Em muitas variantes do Unix, "ninguém" é o nome convencional de uma conta de usuário que não possui arquivos, não possui grupos privilegiados e não possui habilidades, exceto aquelas que qualquer outro usuário possui.

É comum executar daemons como ninguém, especialmente servidores, a fim de limitar os danos que poderiam ser causados ​​por um usuário mal-intencionado que ganhou o controle deles. No entanto, a utilidade dessa técnica é reduzida se mais de um daemon for executado assim, pois o controle de um daemon forneceria o controle de todos eles. O motivo é que os processos pertencentes a ninguém têm a capacidade de enviar sinais um ao outro e até de depurar um ao outro, permitindo que eles leiam ou modifiquem a memória um do outro.

Informações retiradas de http://en.wikipedia.org/wiki/Nobody_(username) .

Paulius Šukys
fonte
-1: nobodyé estritamente para NFS e não deve ser usado por outros serviços e, certamente, não por administradores de sistema. Obrigado.
sarnold
22

O usuário ninguém está reservado apenas para NFS.

As respostas acima estão bastante erradas, porque elas assumem que esse nobodyé um ID de usuário anônimo / convidado "genérico".

No modelo de controle de acesso UNIX / Linux, não existem IDs de usuário no estilo anônimo / convidado e estas são más sugestões:

  • comum executar daemons como nobody, especialmente servidores, para limitar os danos que poderiam ser causados ​​por um usuário mal-intencionado que ganhou o controle deles. ", devido ao seguinte: " No entanto, a utilidade dessa técnica é reduzida se mais de um daemon é executado desta maneira, porque ganhar o controle de um daemon forneceria o controle de todos ".
  • " Um exemplo real disso é memcached(um cache / banco de dados / coisa na memória de valor-chave), sentado no meu computador e no meu servidor executando sob a nobodyconta. Por quê? Porque simplesmente não precisa de permissões e para conceder uma conta que tivesse acesso de gravação a arquivos seria apenas um risco desnecessário " .

O nobodynome de usuário com o ID de usuário 65534 foi criado e reservado para uma finalidade específica e deve ser usado apenas para essa finalidade: como um espaço reservado para usuários "não mapeados" e IDs de usuário nas exportações da árvore NFS.

Ou seja, a menos que o mapeamento de usuário / ID esteja configurado para exportação de árvore NFS, todos os arquivos na exportação parecerão pertencentes a nobody. O objetivo disso é impedir que todos os usuários no sistema de importação acessem esses arquivos (a menos que tenham "outras" permissões), pois nenhum deles (exceto root) pode ser / se tornar nobody.

Portanto, é uma péssima idéia usá-lo nobodypara qualquer outra finalidade, porque sua finalidade é ser um nome de usuário / ID de usuário para arquivos que não devem estar acessíveis a ninguém.

A entrada do Wiki também está muito errada.

A prática do UNIX / Linux é criar uma nova conta para cada "aplicativo" ou área de aplicativo que precise de um domínio de controle de acesso separado e nunca reutilizar nobodyfora do NFS .

PeterG
fonte
Essa resposta não cita as fontes, e explicitamente contradiz várias das outras respostas, o que fazer citar fontes. A recompensa atual indica que essa resposta é particularmente boa, caso em que deve citar algumas fontes ou, na lista, ter algum raciocínio.
vidarlo
@ mook765 Essa parte está bem. O parágrafo sobre NFS, no entanto, eu não entendo. Por exemplo, com root_squashon, rooté mapeado para o usuário nobody; portanto, os arquivos com proprietário nobodynão fazem absolutamente nenhum sentido. Além disso, a afirmação de que os arquivos pertencentes a ninguém devem estar inacessíveis a ninguém faz pouco sentido, pois as permissões de arquivos são separadas da propriedade no UNIX. Eu não estou dizendo que tudo na resposta está errado, apenas que elementos dela fazem pouco ou nenhum sentido para mim :)
vidarlo
1
@vidarlo, esta resposta não está sugerindo que você defina os arquivos de propriedade nobody. Está dizendo a você que o nobodyNFS deve usar no mapeamento de permissões, e esse é o ponto mais importante para mim. Como NFS usa nobodyé menos interessante do que o fato de que ele não usar nobody. Obrigado.
sarnold
@sarnold a resposta ainda está completamente errada neste assunto na minha opinião. Se um usuário lê a resposta e man exports, ele pode estar muito confuso.
vidarlo
17

O nobodyusuário é criado por padrão em uma nova instalação (marcada no Ubuntu Desktop 13.04).

Em muitas variantes * nix, nobodyé o nome convencional de uma conta de usuário que não possui arquivos, não possui grupos privilegiados e não possui habilidades, exceto aquelas que qualquer outro usuário possui (o nobodyusuário e o grupo não têm nenhuma entrada no /etc/sudoersarquivo) .

É comum executar daemons como nobody, especialmente servidores, para limitar os danos que poderiam ser causados ​​por um usuário mal-intencionado que ganhou o controle deles. No entanto, a utilidade dessa técnica é reduzida se mais de um daemon for executado assim, pois o controle de um daemon forneceria o controle de todos eles. A razão é que os nobodyprocessos proprietários têm a capacidade de enviar sinais um para o outro e até depurar um ao outro, permitindo que eles leiam ou modifiquem a memória um do outro.

Fonte : Wikipedia - Ninguém (nome de usuário)


Os nobodyprocessos proprietários são capazes de enviar sinais uns aos outros e até rastrear um ao outro no Linux, o que significa que um processo de propriedade de ninguém pode ler e gravar a memória de outro processo de propriedade de ninguém.

Esta é uma entrada de amostra do nobodyusuário no /etc/passwdarquivo:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Como você pode perceber, o nobodyusuário tem /bin/shcomo um shell de login e /nonexistentcomo diretório inicial. Como o nome sugere, o /nonexistentdiretório não existe, por padrão.

Se você é paranóico, pode definir nobodyo shell padrão como /usr/sbin/nologine assim, negar o login do ssh para o nobodyusuário.

Fonte : LinuxG.net - O usuário Linux e Unix Ninguém

Alaa Ali
fonte
Esta resposta merece um +1 se o parágrafo incorreto da Wikipedia for removido. Obrigado.
sarnold
3

ninguém é uma conta especial de usuário e grupo. Por ser um nome de usuário real (e nome do grupo) e pode ser usado por processos e até usuários, não é literalmente ninguém . Por exemplo, algumas configurações do Apache não possuem ninguém como usuário / grupo que possui os arquivos e diretórios do site. O problema ocorre quando vários processos podem usar o usuário ninguém, como diretórios NFS e o servidor da web.

jeffmcneill
fonte
0

Correção menor para ' O usuário ninguém está reservado apenas para NFS. ' responda. O nobodyusuário também é usado para contêineres sem privilégios com montagens de ligação no momento.

Isso é obtido no systemd-nspawn, especificamente na opção --bind mount:

Observe que quando essa opção é usada em combinação com --private-users, os pontos de montagem resultantes pertencem ao usuário ninguém. Isso ocorre porque a montagem e seus arquivos e diretórios continuam pertencendo aos usuários e grupos de hosts relevantes, que não existem no contêiner, e, portanto, aparecem sob o curinga UID 65534 (ninguém). Se essas montagens de ligação forem criadas, é recomendável torná-las somente leitura, usando --bind-ro =.

systemd-nspawn

ykuksenko
fonte