Directorio de inicio no creado

80

Estoy tratando de entender la administración del sistema en Ubuntu. Entonces, como ejemplo, creo un usuario ficticio usando

sudo useradd -d /home/linda linda

y passwdpara crear la contraseña. Compruebo que se ha realizado una entrada utilizandocat /etc/passwd

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

Sin embargo, cuando su - lindayo consigo

No directory, logging in with HOME=/

y de hecho, no se ha creado un directorio de inicio. ¿Qué me estoy perdiendo?

Gracias.

tchakravarty
fuente

Respuestas:

87

man useradd estados:

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

Nota la low level utility

Para agregar un usuario, use adduseren su lugar. Es una utilidad de más alto nivel.


Además, mirando la -dopción:

   -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.

En general, manténgase alejado de useradd, use adduseren su lugar.

gniourf_gniourf
fuente
2
En defensa del OP, cuando leí "En Debian", pensé que significaba en Debian en lugar de las distribuciones de Ubuntu. Soy consciente de que Ubuntu se basa en Debian, pero pensé que se estaba haciendo una distinción.
Keith Bennett
1
Utilicé adduserpero aún el directorio de inicio creado solo contiene un archivo examples.desktopy nada más. ¿Cómo puedo hacer que Ubuntu cree las carpetas predeterminadas Escritorio, Descargas, etc.? (Estoy conectado vía ssh)
mcExchange
Hola, perdón por la respuesta tardía y solo adivino, pero creo que esas carpetas se crean automáticamente en el primer inicio de sesión de GUI. Solo pensé que la gente podría aterrizar aquí;)
derHugo
addusertampoco creará el directorio si alguien ha cambiado CREATE_HOME en /etc/login.defs a "no". Puede anular esto con la -mbandera.
Noumenon
31

puedes arreglar esto simplemente creando el directorio de inicio.

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

intente iniciar sesión nuevamente y esto debería funcionar.

OmPS
fuente
13

De acuerdo con man useradd, la -d /home/lindaopción no creará el directorio /home/linda, si esto falta. Entonces, tienes que crearlo manualmente. Para hacer esto, ejecute los siguientes comandos en la 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 también: ¿Cómo crear la carpeta de inicio del usuario después de la creación de la cuenta?

Radu Rădeanu
fuente
7

Mire /etc/defaults/useraddsi desea cambiar los valores predeterminados. Utilizar:

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

cabeza de frijol
fuente
"De acuerdo con man useradd, la opción -d / home / linda no creará el directorio / home / linda", así que no, esto no es una solución.
astrojuanlu
Según la página de manual de useradd, para eso está la bandera -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

También puede modificar /etc/pam.d/common-sessionpara que se cree el directorio de inicio de un usuario en el primer inicio de sesión. Agregue la siguiente línea a ese archivo.

...
session required pam_mkhomedir.so

Esto es particularmente útil si su sistema está en una red donde los usuarios son administrados externamente a su máquina, por ejemplo, LDAP.

KevinC
fuente
5

Use en -mlugar de -d, por lo que el directorio se creará para usted:

sudo useradd -m linda

Además, si lindaes un usuario normal, es posible que desee que lo use /bin/bashpor defecto shell:

sudo useradd -m linda -s /bin/bash

p1100i
fuente
3

Agregue la entrada a continuación /etc/login.defsy guarde:

CREATE_HOME yes

Ahora, intente crear cuentas de usuario. Creará el directorio de inicio.

kavin
fuente
Funcionó para mi. Necesitaba tener un script básico que agregara / administrara usuarios de forma remota en diferentes versiones de Linux. Después de este cambio, mi código produce los mismos resultados en todos los servidores. Gracias.
sdkks
1

Utilizar 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:

useraddtienes que agregar todas las opciones tú mismo. Incluyendo permisos y algunas otras cosas. adduserhace esto basado en valores predeterminados sanos (y también agrega el directorio de inicio por sí mismo).

Si necesita usar adduser, probablemente necesite la opción -b junto con la opción -d.

Rinzwind
fuente
1

Si /home/lindano está presente antes de agregar linda como usuario, también debería agregar --create-home.

sudo useradd --create-home linda
Abel Tom
fuente
1

La razón más probable por la que usted no tiene el directorio principal creado es porque no tiene la CREATE_HOME yesen /etc/login.defs.

Puede solucionar esto siguiendo lo que @OmPS o @Radu Rădeanu habían sugerido.

Pero hay muchas maneras de superar este problema en el futuro utilizando uno de los siguientes comandos:

  • 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****

    Los valores predeterminados para adduser se eligen /etc/adduser.confsi --homeno se especifica la opción. Tenga en cuenta que también copia los /etc/skelcontenidos.

  • Use adduser con --home

    sudo adduser --home /home/linda

Igual que la opción anterior, excepto que es posible que desee esto si el directorio de inicio de los usuarios es diferente al nombre de usuario que asignó.

  • Especifique el directorio base para useraddordenar:

    sudo useradd -b /home
  • Use login.defs: modifique /etc/login.defsy agregue la siguiente línea antes de hacer sudo useradd:

    CREATE_HOME   yes

Nota: si lo haces man login.defs, actualmente dice

PAM maneja gran parte de la funcionalidad que solía proporcionar el conjunto de contraseñas shadow. Por lo tanto, / etc / login.defs ya no es utilizado por passwd (1), o menos utilizado por login (1), y su (1). En su lugar, consulte los archivos de configuración PAM correspondientes.

  • Utilice el módulo PAM pam_mkhomedir: desde la man pam_mkhomedirpágina, agregue la siguiente línea a /etc/pam.d/login:

    session  required  pam_mkhomedir.so skel=/etc/skel
randominstanceOfLivingThing
fuente