Crear directorio de inicio predeterminado para el usuario existente en la terminal

151

¿Cómo hago esto? Creé un usuario sin un directorio de inicio y ahora quiero crear uno. No solo una carpeta llamada new_user, quiero el directorio de inicio predeterminado con todas sus carpetas y archivos ocultos, etc.

Jo Rijo
fuente
Cuando el usuario inicia sesión, esos subdirectorios (Documentos, Descargas, etc.) se crearán automáticamente. Aunque estoy buscando formas de "simular" su inicio de sesión a través del terminal.
Alaa Ali
@Alaa su new_user: D
Radu Rădeanu
1
@ RaduRădeanu, sí, ya lo intenté, también lo intenté sudo -i -u new_userpero no funciona. Creo que necesitamos "simular un inicio de sesión X" ... no sé cómo hacerlo.
Alaa Ali
2
iniciar sesión no crea los subdirectorios en el hogar.
Jo Rijo

Respuestas:

231

Use lo siguiente (como root, o con sudo si no es root):

mkhomedir_helper username

Para que esto funcione, la carpeta /home/usernameno debe existir.

Para las carpetas relacionadas con X (escritorio, descargas, etc.), deberá iniciar sesión en un entorno gráfico; se generarán automáticamente la primera vez que inicie sesión.

kavadias
fuente
1
Simple y útil De esta manera, también puede estar seguro de que el directorio de inicio creado recientemente cumple con las políticas de su sistema, sin siquiera saberlo o realizar ajustes manuales.
gerlos
Esta es la respuesta correcta, al menos funcionó para mí en Ubuntu 14.04.2 LTS.
Christian Wilkie
1
Tenía que tener mi nombre de usuario en / etc / passwd primero antes de que esto funcionara para mí.
user79878
3
Simple ... simplemente funciona (tm). Debería ser la respuesta aceptada
Newtopian
No olvide verificar los permisos del directorio con ls -l /home. Descubrí que todos los demás usuarios podían leer el nuevo directorio, así que eliminé esos permisos con chmod go-r-x /home/username.
Don Kirkby
33

Los subdirectorios (Documentos, Descargas, etc.) se crean automáticamente cuando el usuario inicia sesión por primera vez a través de GNOME, siempre que el directorio de inicio se cree con los permisos correctos. Aquí hay una demostración:

alaa @ aa-lu: ~ $ sudo useradd testinguser
 alaa @ aa-lu: ~ $ sudo passwd testinguser
Ingrese la nueva contraseña UNIX:
Vuelva a escribir la nueva contraseña UNIX:
passwd: contraseña actualizada con éxito
alaa @ aa-lu: ~ $ sudo ls -l / home
total 20
drwxr-xr-x 55 alaa alaa 4096 22 de agosto 22:00 alaa
drwx ------ 2 raíz raíz 16384 5 de junio 09:46 perdido + encontrado
alaa @ aa-lu: ~ $ sudo mkdir / home / testinguser
 alaa @ aa-lu: ~ $ sudo chown testinguser: testinguser / home / testinguser
 alaa @ aa-lu: ~ $ ls -l / home
total 24
drwxr-xr-x 55 alaa alaa 4096 22 de agosto 22:00 alaa
drwx ------ 2 raíz raíz 16384 5 de junio 09:46 perdido + encontrado
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:03 testinguser
alaa @ aa-lu: ~ $ ls -l / home / testinguser /
total 0
alaa @ aa-lu: ~ $

Puede verificar que el directorio de inicio del usuario esté configurado correctamente al ingresar la entrada /etc/passwd. Debería, de forma predeterminada, ver el directorio de inicio establecido en /home/testinguser:

alaa @ aa-lu: ~ $ grep testinguser / etc / passwd
testinguser: x: 1001: 1001 :: / home / testinguser : / bin / sh

Si no ve el directorio de inicio /home/testinguserallí, deberá ejecutar el comando sudo usermod -d /home/testinguser testinguserpara actualizarlo, aunque no es necesario que use este comando porque debe estar configurado de manera predeterminada (de acuerdo con useraddlas páginas de manual).

Luego salí de mi cuenta y volví a iniciar sesión testinguser, y aquí están los subdirectorios creados automáticamente:

alaa @ aa-lu: ~ $ ls -l / home / testinguser /
total 36
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:05 Escritorio
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:05 Documentos
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:05 Descargas
drwxr-xr-x 2 testinguser testinguseruser 4096 23 de agosto 10:05 Música
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:07 Imágenes
drwxr-xr-x 2 testinguser testinguseruser 4096 23 de agosto 10:05 Público
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:05 Plantillas
drwxr-xr-x 2 testinguser testinguser 4096 23 de agosto 10:05 Videos

No necesitaba copiar el contenido de /etc/skel.

Si es posible, ¿puede intentar seguir estos pasos y crear otro usuario nuevo? Una vez que haya terminado, puede eliminar a este nuevo usuario sudo deluser testinguser && sudo rm -r /home/testinguser.

Si todo esto no funcionó contigo, entonces supongo que es un error.

Alaa Ali
fuente
En alguna situación cuando la usa useradd, el directorio de inicio predeterminado para el nuevo usuario no se establece automáticamente en /home/username. Entonces, primero debes estar seguro de eso.
Radu Rădeanu
¿Me puede dar un ejemplo de estas situaciones =)? Desde las páginas de manual de useradd: "useradd usará el directorio base especificado por la variable HOME en /etc/default/useradd, o /homepor defecto". La variable HOME en /etc/default/useraddno está definida de manera predeterminada, por lo que useradd siempre la usará /home. De todos modos, editaré mi respuesta y moveré la parte para verificar /etc/passwd.
Alaa Ali el
Un ejemplo aquí . Otro ejemplo: eliminó un usuario, pero no eliminó sus directorios y archivos; y luego agrega nuevamente un usuario con el mismo nombre. Y hay muchos, y no hay errores :)
Radu Rădeanu
Si no tiene /bin/shen la línea de usuario /etc/passwd, debe agregar un shell para ese usuario, por ejemplo, el shell predeterminado conusermod -s /bin/sh testuser
rubo77
No todos los sistemas tienen GNOME y sugerir que alguien elimine y vuelva a agregar un usuario simplemente para crear un directorio de inicio es un mal consejo.
ntwrkguru
12

ACTUALIZACIÓN: La solución está rota y no funciona para mí también.

Si desea crear el directorio de inicio del usuario si no existe, ejecute el useraddcomando con el -mindicador. Esto copiará todos los archivos del /etc/skeldirectorio.

useradd -m username

Es posible que deba configurar los ajustes de su sistema. Según la página del manual:

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

    By default, if this option is not specified and CREATE_HOME is not enabled, no
    home directories are created.

y además indica:

CONFIGURATION

   The following configuration variables in /etc/login.defs change the behavior
   of this tool:

   CREATE_HOME (boolean)
       Indicate if a home directory should be created by default for new users.
artesano
fuente
8
Esto parece intentar crear un nuevo usuario, porque me dice que "el usuario 'nuevo-usuario' ya existe".
Jo Rijo
También probé la -mbandera al crear un nuevo usuario de todos modos, y no funcionó; solo copia los archivos de esqueleto.
Alaa Ali el
@Jo: Y cómo es esto incorrecto, porque según la publicación inicial, el usuario ya existe.
crafter
3
Esta respuesta no resuelve el problema. La copia /etc/skelno crea los subdirectorios en el directorio de inicio. Además, useradd -mse usa al crear un nuevo usuario, no cuando el usuario ya está agregado.
Alaa Ali el
Actualicé la publicación, así que establezca CREATE_HOME en yes en el archivo de configuración login.defs.
crafter
5

Si creó el nuevo usuario con el addusercomando, no necesita crear un directorio de inicio para el nuevo usuario. Se /homecreará automáticamente un directorio de inicio con el nombre del usuario en el directorio, con los siguientes subdirectorios: Escritorio, Descargas, Documentos, Música, Imágenes, Videos (y otros), para el nuevo usuario.

Si creó el nuevo usuario con el useraddcomando, ejecute los siguientes comandos en la terminal:

sudo -i     #enter your user password when you are asked
gedit /etc/passwd

para editar el /etc/passwdarchivo como root (este es el paso más importante). Busque la línea con el nombre del nuevo usuario y configure el directorio de inicio predeterminado para él de la siguiente manera:

new_username:x:1001:1001::/home/new_username:/bin/sh

En esta línea también puede agregar un nombre real para el nuevo usuario o establecer el shell predeterminado. Algo como esto:

new_username:x:1001:1001:Real New Username,,,:/home/new_username:/bin/bash

Tenga cuidado, no haga ningún otro cambio.

Después de guardar el archivo, antes de salir de la cuenta raíz, ejecute los siguientes comandos:

mkdir /home/new_username                                #to create the directory /home/new_username
cp -r /etc/skel/. /home/new_username                    #to copy skeleton files to /home/new_username
chown -R new_username:new_username /home/new_username   #to change the owner of /home/new_username to the new user

Después de todo esto, la carpeta de inicio para el nuevo usuario se completará automáticamente después del primer inicio de sesión.

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
Por lo que recuerdo, la carpeta de inicio no se crea automáticamente, debe crearla manualmente y actualizar la entrada del usuario /etc/passwd(si aún no está allí). Una vez que el usuario inicia sesión, la carpeta de inicio se completará automáticamente con esos subdirectorios. Sin embargo, todo esto se soluciona si alguien agrega un usuario usando adduser, en lugar de useradd.
Alaa Ali
@Alaa Lo probé hace unos días y lo usé adduser: la carpeta de inicio se crea automáticamente. Y, de hecho, la carpeta de inicio se completará automáticamente después del primer inicio de sesión.
Radu Rădeanu
esto parece no hacer nada. Tal vez intente el script bash de la otra pregunta, pero ¿no podría simplemente crear una carpeta en / home / llamada new_user, y luego copiar el contenido de / etc / skel? ¿Es eso lo que hace ese bash-script?
Jo Rijo
@JoRijo Edité mi respuesta.
Radu Rădeanu
@ RaduRădeanu no quieres decir cp /etc/skel/* /home/new_username? Además, ¿hay alguna razón por la que usa dos chowncomandos consecutivos ?
Alaa Ali el
3

Todo lo que necesitas realmente es la carpeta de inicio para que funcione. Como root,

cd /home
cd mkdir username
chown username username
chgrp username username

Iniciar sesión por primera vez debería crear todos los archivos necesarios, que parecen ser esos:

drwxr-xr-x 16 fotanus fotanus 4096 Jun  4 17:46 .
drwxr-xr-x  9 root    root    4096 Jun  4 17:43 ..
drwx------ 11 fotanus fotanus 4096 Jun  4 17:46 .cache
drwx------ 13 fotanus fotanus 4096 Jun  4 17:46 .config
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Desktop
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Documents
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Downloads
drwx------  3 fotanus fotanus 4096 Jun  4 17:46 .gconf
drwxrwxr-x  2 fotanus fotanus 4096 Jun  4 17:46 .gstreamer-0.10
-rw-------  1 fotanus fotanus  334 Jun  4 17:45 .ICEauthority
drwxr-xr-x  3 fotanus fotanus 4096 Jun  4 17:45 .local
drwx------  4 fotanus fotanus 4096 Jun  4 17:45 .mozilla
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Music
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Pictures
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Public
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Templates
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Videos
-rw-------  1 fotanus fotanus   55 Jun  4 17:45 .Xauthority
-rw-------  1 fotanus fotanus  711 Jun  4 17:45 .xsession-errors
fotanus
fuente