Como posso criar um usuário que não seja de login?


110

Eu gostaria de criar um usuário e um grupo chamado subversion em um sistema RHEL 5. Eu olhei para a página man para useradd e eu acho que o comando seria apenas ser ...

useradd subversion

No entanto, não sei como evitar a criação de um diretório inicial. Além disso, não quero que seja um usuário que possa efetuar login no sistema.

O objetivo principal é apenas fornecer um proprietário para um repositório SVN.


Você realmente olhou para man page de useradd e não encontrou -M (não cria diretório HOME)?
inemanja

Respostas:


63

Você pode usar o -M switch (certifique-se de que é um capital) para garantir que nenhum diretório inicial seja criado:

useradd -M subversion

em seguida, bloqueie a conta para impedir o login:

usermod -L subversion

51
Esta não é uma resposta particularmente forte, o usuário criado por este meio ainda tem um shell. E você nem sequer avisou o OP que esse era o caso. Retrospectivamente, isso seria usermod -s /bin/false subversion, ou com --shell /bin/false para useradd
Lee Hambley

5
@beak a conta está bloqueada, ter uma shell é um ponto discutível.
John T

12
@beak na verdade, apenas o usuário root seria capaz de acessar a conta bloqueada, mas por que se preocupar se a pessoa já obteve acesso root? E definir o shell não faz muito quando um usuário pode executar su -s /bin/bash username e ignorar isso.
John T

9
obrigado por tomar o tempo para ter a discussão, você está claro, correto; mas me dói ver usuários não-login com shells definidos, me parece preguiçoso e, caso alguém não esteja familiarizado com o sistema, é bom que eles não possam acidentalmente fazer algo não intencional; hackers são uma raça diferente, se eles já têm um shell na máquina, eu acho que é basicamente o fim do jogo
Lee Hambley

7
Esses comentários cobriram exatamente as coisas que eu esperava aprender, obrigado @Beaks & amp; John T
Rixius

189

useradd -r subversion

por man useradd:

-r, --system create a system account

O sinalizador -r criará um usuário do sistema - um que não tenha uma senha, um diretório inicial e não consiga efetuar o login.


1
este comando irá até criar um grupo para o usuário chamado o mesmo. Então o usuário "subversion" estará no grupo "subversion". Ótimo para quando você mais tarde quiser fazer "sudo chown -R subversão: subversion / path / to / folder"
s3v1

40
com -r só ainda podemos logar. precisamos de -s / bin / false para desativar o shell do usuário.
c4il

6
@ c4il Mas o único que pode entrar neles é o root, certo? Quero dizer, eles não têm uma senha, então eu esperaria que apenas o root pudesse fazer login neles.
Camilo Martin

17

Outra solução para criar um usuário do sistema, usando adduser :

adduser --system --no-create-home --group yourusername

Você pode remover --group se você não precisa do grupo yourusername, e --no-create-home se você precisar de uma casa para esse usuário.

Como mencionado por py4on nos comentários, em alguns sistemas pode ser necessário usar o --disabled-login opção para, bem, desativar o login para este usuário. Parece ser o comportamento padrão no Debian, no entanto.

Tenha em atenção que o ID numérico do utilizador será de uma conta do sistema. Você pode consertar o uid usando o --uid opção, no entanto.

Finalmente, note que em alguns sistemas (por exemplo, o Fedora) adduser é um link simbólico para useradd, caso em que esta resposta não é válida.


3
Para endereçar "não quero que seja um usuário que possa fazer login", adicione o sinalizador --disabled-login também (antes yourusername )
py4on

@ py4on: Embora esta opção esteja documentada na manpage, ela parece ser o padrão pelo menos no Debian.
Skippy le Grand Gourou

13

A resposta mais clara para a pergunta original é executar o comando:

adduser subversion --shell=/bin/false

E se você não quiser o diretório home:

adduser subversion --shell=/bin/false --no-create-home

ou, se você quiser um usuário do sistema ainda mais bloqueado (normalmente isso não irá criar um diretório home - foi relatado que ele ainda irá criar um diretório home no linux mint como por comentário abaixo)

adduser subversion --system --group

Todos esses comandos criarão um grupo com o mesmo nome do usuário


No Mint, o último comando definitivamente cria um diretório home: Creating home directory '/home/nodejs' ...
jcollum

9

A forma mais segura de fazer isso seria usar adduser igual a:

$ adduser -r -s /bin/nologin subversion

NOTA: Certifique-se de incluir -s /sbin/nologin para desabilitar qualquer shell de login de ser disponibilizado para a conta.

Confirmação da configuração

$ grep subversion /etc/passwd /etc/shadow
/etc/passwd:subversion:x:496:496::/home/subversion:/bin/nologin
/etc/shadow:subversion:!!:17232::::::

No entanto, não há diretório:

$ ll /home | grep subversion
$

Confirme se a conta é utilizável de outra forma:

$ sudo -u subversion whoami
subversion

$ sudo -u subversion date
Tue Mar  7 08:58:57 EST 2017

Remoção

Se você precisar remover esta conta:

$ userdel subversion -r
userdel: subversion mail spool (/var/spool/mail/subversion) not found
userdel: subversion home directory (/home/subversion) not found
$

E confirme:

$ grep rtim-hc-user /etc/passwd /etc/shadow
$

adduser não reconhece a opção -r. Eu acho que você quis dizer useradd.
felwithe

@felwithe não, toda resposta que eu escrevo sempre testo antes de postar. Eu verifiquei e esse switch mostra em um sistema CentOS 6.x.
slm

Aqui está um pastebin do resultado . Eu estou no Ubuntu 16 LTS. Eu não sei qual versão do adduser está instalada, mas nunca imaginei que mudaria muito ao longo do tempo ou de sistema para sistema. Eu tentei com um sinalizador --system, que criou um homedir para o usuário (eu não queria um). Finalmente eu fiz isso com useradd ao invés de adduser e funcionou como planejado. Então eu assumi que você tinha digitado como adduser quando deveria ser useradd.
felwithe

@felwithe sim eu não estava duvidando de você, apenas deixando você saber que eu tentei 8-). Eu sou um mod no site Unix e Linux e esses cmds são notoriamente diferentes distribuições b / w. O OP menciona o RHEL na questão, por isso respondi assim, mas eles não o identificaram como específico, o que é parte da confusão sobre este Q & amp; O IMO.
slm

1

Em uma máquina do CentOS 7

  • se o usuário não existir:
    useradd testuser --shell=/sbin/nologin

  • se você quiser modificar um usuário existente:
    usermod testuser --shell=/sbin/nologin

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.