O diretório inicial não está sendo criado


80

Estou tentando entender a administração do sistema no Ubuntu. Então, como exemplo, eu crio um usuário fictício usando

sudo useradd -d /home/linda linda

e passwdpara criar a senha. Verifico se uma entrada foi feita usandocat /etc/passwd

linda:x:1004:1004::/home/linda:/bin/sh

No entanto, quando su - lindaeu recebo

No directory, logging in with HOME=/

e, de fato, nenhum diretório inicial foi criado. o que estou perdendo?

Obrigado.

Respostas:


87

man useradd afirma:

useradd is a low level utility for adding users. On Debian,
administrators should usually use adduser(8) instead.

Note o low level utility

Para adicionar um usuário, use em seu adduserlugar. É um utilitário de mais alto nível.


Além disso, olhando para a -dopção:

   -d, --home HOME_DIR
       The new user will be created using HOME_DIR as the value for the
       user's login directory. The default is to append the LOGIN name to
       BASE_DIR and use that as the login directory name. The directory
       HOME_DIR does not have to exist but will not be created if it is
       missing.

The directory will not be created if it is missing.

Geralmente mantenha-se afastado useradd, use-o adduser.


2
Na defesa do OP, quando li "On Debian", pensei que isso significasse no Debian, em vez de nas distribuições do Ubuntu. Estou ciente de que o Ubuntu é construído no Debian, mas pensei que estava sendo feita uma distinção.
Keith Bennett

1
Eu usei, addusermas ainda assim o diretório inicial criado contém apenas um arquivo examples.desktope nada mais. Como faço para o Ubuntu criar as pastas padrão Desktop, Downloads e assim por diante? (Estou logado via ssh)
mcExchange

Oi, desculpe a resposta tardia e apenas adivinhar, mas acho que essas pastas são criadas automaticamente no primeiro login da GUI. Pensei que as pessoas ainda pudessem pousar aqui;)
derHugo 6/17

addusertambém não criará o diretório se alguém tiver alterado CREATE_HOME em /etc/login.defs para "no". Você pode substituir isso pela -mbandeira.
Noumenon

31

você pode corrigir isso simplesmente criando o diretório home.

mkdir /home/linda
chown linda:linda /home/linda

tente fazer login novamente e isso deve funcionar.


13

De acordo com man useradd, a -d /home/lindaopção não criará o diretório /home/linda, se estiver ausente. Então, você precisa criá-lo manualmente. Para fazer isso, execute os seguintes comandos no terminal:

sudo -i                            #to get root privileges
mkdir /home/linda                  #to create the directory /home/linda
cp -rT /etc/skel /home/linda         #to populate /home/linda with default files and folders
chown -R linda:linda /home/linda   #to change the owner of /home/linda to user linda

Consulte também: Como criar a pasta base do usuário após a criação da conta?


7

Veja /etc/defaults/useraddse você deseja alterar os padrões. Usar:

useradd -m -d /home/joe -s /bin/bash.


"De acordo com o man useradd, a opção -d / home / linda não criará o diretório / home / linda" então não, isso não é uma solução.
astrojuanlu

De acordo com a página de manual useradd, é para isso que serve a bandeira -m: -m, --create-home Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the -k option) will be copied to the home directory. useradd will create the home directory unless CREATE_HOME in /etc/login.defs is set to no.@astrojuanlu
Myles

5

Você também pode modificar /etc/pam.d/common-sessionpara fazer com que o diretório inicial de um usuário seja criado no primeiro login. Adicione a seguinte linha a esse arquivo.

...
session required pam_mkhomedir.so

Isso é particularmente útil se o seu sistema estiver em uma rede na qual os usuários são gerenciados externamente à sua máquina, por LDAP, por exemplo.


5

Use em -mvez de -d, para que o diretório seja criado para você:

sudo useradd -m linda

Além disso, se lindafor um usuário normal, convém que ele use /bin/bashcomo padrão shell:

sudo useradd -m linda -s /bin/bash


3

Adicione a entrada abaixo /etc/login.defse salve:

CREATE_HOME yes

Agora, tente criar contas de usuário. Isso criará o diretório inicial.


Funcionou para mim. Eu precisava ter um script básico que adicione / gerencie usuários remotamente em diferentes tipos de Linux. Após essa alteração, meu código produz os mesmos resultados em todos os servidores. Obrigado.
Sdkks

1

Use adduser.

DESCRIPTION

 adduser  and  addgroup  add users and groups to the system according to
   command    line    options    and    configuration    information    in
   /etc/adduser.conf.   They  are  friendlier  front ends to the low level
   tools like useradd, groupadd and usermod programs, by default  choosing
   Debian  policy conformant UID and GID values, creating a home directory
   with skeletal configuration, running a custom script,  and  other  fea
   tures.  adduser and addgroup can be run in one of five modes:

useraddvocê precisa adicionar todas as opções. Incluindo permissões e outras coisas. adduserfaz isso com base em padrões saudáveis ​​(e também adiciona o diretório home por si só).

Se você precisar usar o adduser, provavelmente precisará da opção -b junto com a opção -d!


1

Se /home/lindanão estiver presente antes de você adicionar linda como usuário, você também precisará adicionar --create-home.

sudo useradd --create-home linda

1

A razão mais provável pela qual você não criou o diretório inicial é porque não possui o CREATE_HOME yesin /etc/login.defs.

Você pode corrigir isso seguindo o que o @OmPS ou o @Radu Rădeanu sugeriram.

Mas existem muitas maneiras de superar esse problema no futuro usando um dos comandos abaixo:

  • Resultado de sudo adduser linda

    Adding user 'linda'
    Adding new group 'linda' (1001) ...
    Adding new user 'linda' (1001) with group 'linda' ...
    Creating home directory '/home/linda' ...
    Copying files from '/etc/skel' ...
    ****Password confirmation****
    ****Name prompt****

    Os padrões para adduser são escolhidos /etc/adduser.confse a --homeopção não for especificada. Observe que ele também copia o /etc/skelconteúdo.

  • Use adduser com --home

    sudo adduser --home /home/linda

O mesmo que a opção anterior, exceto que você pode desejar isso se o diretório inicial do usuário for diferente do nome de usuário que você atribuiu.

  • Especifique o diretório base para o useraddcomando:

    sudo useradd -b /home
  • Use login.defs: modifique /etc/login.defse adicione a linha abaixo antes de fazer sudo useradd:

    CREATE_HOME   yes

Nota: se o fizer man login.defs, atualmente diz

Muitas das funcionalidades que costumavam ser fornecidas pelo conjunto de senhas shadow agora são tratadas pelo PAM. Portanto, o /etc/login.defs não é mais usado pelo passwd (1) ou menos pelo login (1) e su (1). Por favor, consulte os arquivos de configuração do PAM correspondentes.

  • Use o módulo PAM pam_mkhomedir: da man pam_mkhomedirpágina, adicione a linha abaixo para /etc/pam.d/login:

    session  required  pam_mkhomedir.so skel=/etc/skel
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.