Creare la home directory predefinita per l'utente esistente nel terminale


151

Come faccio a fare questo? Ho creato un utente senza una home directory e ora voglio crearne uno. Non solo una cartella chiamata new_user, voglio la home directory predefinita con tutte le sue cartelle e file nascosti, ecc.


Quando l'utente accede, tali sottodirectory (Documenti, Download, ecc ...) verranno create automaticamente. Anche se sto cercando modi per "simulare" il suo accesso attraverso il terminale.
Alaa Ali,

@Alaa su new_user: D
Radu Rădeanu,

1
@ RaduRădeanu sì, l'ho già provato, anche provato sudo -i -u new_userma non funziona. Penso che dobbiamo "simulare un accesso X" ... non so come farlo.
Alaa Ali,

2
l'accesso non crea le sottodirectory in home.
Jo Rijo,

Risposte:


231

Utilizzare quanto segue (come root o con sudo se non root):

mkhomedir_helper username

Perché ciò funzioni, la cartella /home/usernamenon deve esistere.

Per le cartelle relative a X (desktop, download, ecc.), Dovrai accedere in un ambiente grafico; verranno generati automaticamente al primo accesso.


1
Semplice e utile. In questo modo puoi anche essere sicuro che la home directory appena creata sia conforme ai tuoi criteri di sistema, senza mai conoscerli o armeggiare manualmente.
gerlos,

Questa è la risposta corretta, almeno ha funzionato per me su Ubuntu 14.04.2 LTS.
Christian Wilkie,

1
Ho dovuto avere il mio nome utente in / etc / passwd prima che funzionasse per me.
user79878,

3
Semplice .. funziona e basta (tm). Dovrebbe essere la risposta accettata
Newtopian

Non dimenticare di controllare le autorizzazioni della directory con ls -l /home. Ho scoperto che la nuova directory era leggibile da tutti gli altri utenti, quindi ho rimosso quelle autorizzazioni con chmod go-r-x /home/username.
Don Kirkby,

33

Le sottodirectory (Documenti, Download, ecc ...) vengono create automaticamente quando l'utente accede per la prima volta tramite GNOME, a condizione che la home directory venga creata con le autorizzazioni corrette. Ecco una dimostrazione:

alaa @ aa-lu: ~ $ sudo useradd testinguser
 alaa @ aa-lu: ~ $ sudo passwd testinguser
Inserisci la nuova password UNIX:
Digitare nuovamente la nuova password UNIX:
passwd: password aggiornata correttamente
alaa @ aa-lu: ~ $ sudo ls -l / home
totale 20
drwxr-xr-x 55 alaa alaa 4096 ago 22 22:00 alaa
drwx ------ 2 radice radice 16384 5 giugno 09:46 perso + trovato
alaa @ aa-lu: ~ $ sudo mkdir / home / testinguser
 alaa @ aa-lu: ~ $ sudo chown testinguser: testinguser / home / testinguser
 alaa @ aa-lu: ~ $ ls -l / home
totale 24
drwxr-xr-x 55 alaa alaa 4096 ago 22 22:00 alaa
drwx ------ 2 radice radice 16384 5 giugno 09:46 perso + trovato
drwxr-xr-x 2 testinguser testinguser 4096 ago 23 10:03 testinguser
alaa @ aa-lu: ~ $ ls -l / home / testinguser /
totale 0
Alaa @ aa-lu: ~ $

È possibile verificare che la home directory dell'utente sia impostata correttamente controllando la voce in /etc/passwd. Per impostazione predefinita, dovresti vedere la home directory impostata su /home/testinguser:

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

Se non vedi la home directory /home/testinguserlì, dovrai eseguire il comando sudo usermod -d /home/testinguser testinguserper aggiornarlo, anche se non dovresti usare questo comando perché dovrebbe essere impostato di default (secondo useraddle manpage di).

Ho quindi effettuato il logout dal mio account e ho effettuato nuovamente l'accesso con testinguser, ed ecco le sottodirectory create automaticamente:

alaa @ aa-lu: ~ $ ls -l / home / testinguser /
totale 36
drwxr-xr-x 2 testinguser testinguser 4096 ago 23 10:05 Desktop
drwxr-xr-x 2 testinguser testinguser 4096 ago 23 10:05 Documenti
drwxr-xr-x 2 testinguser testinguser 4096 ago 23 10:05 Download
drwxr-xr-x 2 testinguser testinguser 4096 ago 23 10:05 Musica
drwxr-xr-x 2 testinguser testinguser 4096 agosto 23 10:07 Immagini
drwxr-xr-x 2 testing user testinguser 4096 ago 23 10:05 Pubblico
drwxr-xr-x 2 testinguser testing user 4096 agosto 23 10:05 Modelli
drwxr-xr-x 2 testinguser testinguseruser 4096 23 agosto 10:05 Video

Non ho avuto bisogno di copiare il contenuto di /etc/skel.

Se possibile, puoi provare a seguire questi passaggi, creando un altro nuovo utente? Una volta terminato, puoi rimuovere questo nuovo utente entro sudo deluser testinguser && sudo rm -r /home/testinguser.

Se tutto ciò non ha funzionato con te, allora suppongo sia un bug.


In alcune situazioni quando si utilizza useradd, la home directory predefinita per il nuovo utente non è impostata automaticamente su /home/username. Quindi, per prima cosa devi esserne sicuro.
Radu Rădeanu,

Puoi darmi un esempio di queste situazioni =)? Dalle pagine man di useradd: "useradd utilizzerà la directory di base specificata dalla variabile HOME in /etc/default/useradd, o /homedi default". La variabile HOME in /etc/default/useraddnon è definita per impostazione predefinita, quindi useradd utilizzerà sempre /home. Ad ogni modo, modificherò la mia risposta e sposterò la parte per controllare /etc/passwd.
Alaa Ali,

Un esempio qui . Un altro esempio: elimini un utente, ma non hai eliminato le sue directory e i suoi file; e quindi aggiungi nuovamente un utente con lo stesso nome. E ce ne sono molti e non ci sono bug :)
Radu Rădeanu,

Se non hai /bin/shnella linea utente /etc/passwddevi aggiungere una shell per quell'utente, ad esempio la shell predefinita conusermod -s /bin/sh testuser
rubo77

Non tutti i sistemi hanno GNOME e suggerire a qualcuno di rimuovere e aggiungere nuovamente un utente semplicemente per creare una home directory è un cattivo consiglio.
ntwrkguru,

12

AGGIORNAMENTO: La soluzione è rotta e non funziona anche per me.

Se si desidera creare la home directory dell'utente se non esiste, eseguire il useraddcomando con il -mflag. Questo copierà tutti i file dalla /etc/skeldirectory.

useradd -m username

Potrebbe essere necessario configurare le impostazioni per il tuo sistema. Secondo la pagina man:

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

e indica inoltre:

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.

8
questo sembra tentare di creare un nuovo utente, perché mi dice che "l'utente" nuovo utente "esiste già".
Jo Rijo,

Ho anche testato la -mbandiera durante la creazione di un nuovo utente e non ha funzionato; copia solo i file di scheletro.
Alaa Ali,

@Jo: E come è errato, perché secondo il post iniziale, l'utente esiste già.
Crafter,

3
Questa risposta non risolve il problema. La copia /etc/skelnon crea le sottodirectory nella home directory. Inoltre, useradd -mviene utilizzato durante la creazione di un nuovo utente, non quando l'utente è già stato aggiunto.
Alaa Ali,

Ho aggiornato il post, quindi imposta CREATE_HOME su yes nel file di configurazione login.defs.
Crafter,

5

Se hai creato il nuovo utente con addusercomando, non è necessario creare una home directory per il nuovo utente. /homeVerrà creata automaticamente una home directory denominata con il nome dell'utente nella directory, con le seguenti sottodirectory: Desktop, Download, Documenti, Musica, Immagini, Video (e altri), per il nuovo utente.

Se hai creato il nuovo utente con useraddcomando, esegui i seguenti comandi nel terminale:

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

per modificare il /etc/passwdfile come root (questo è il passaggio più importante). Trova la riga con il nome del nuovo utente e imposta la home directory predefinita per lui in questo modo:

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

A questa riga è anche possibile aggiungere un nome reale per il nuovo utente o impostare la shell predefinita. Qualcosa come questo:

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

Fai attenzione, non apportare altre modifiche.

Dopo aver salvato il file, prima di uscire dall'account root, eseguire i seguenti comandi:

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

Dopo tutto ciò, la cartella principale per il nuovo utente verrà automaticamente popolata dopo il primo accesso.

Vedi anche: Come rendere la cartella home dell'utente dopo la creazione dell'account?


Per quanto ricordo, la cartella home non viene creata automaticamente, devi crearla manualmente e aggiornare la voce dell'utente /etc/passwd(se non è già presente). Una volta effettuato l'accesso, la cartella principale verrà automaticamente popolata con quelle sottodirectory. Tuttavia, tutto questo è curato da qualcuno che utilizza un utente adduser, anziché useradd.
Alaa Ali,

@Alaa Ho appena provato qualche giorno fa e l'ho usato adduser: la cartella home viene creata automaticamente. E infatti, la cartella principale verrà automaticamente popolata dopo il primo accesso.
Radu Rădeanu,

questo sembra non fare nulla. Forse proverò lo script bash dall'altra domanda, ma non potrei semplicemente creare una cartella in / home / chiamata new_user, e quindi copiare il contenuto di / etc / skel su di esso? è quello che fa quel bash-script?
Jo Rijo,

@JoRijo Ho modificato la mia risposta.
Radu Rădeanu,

@ RaduRădeanu non intendi cp /etc/skel/* /home/new_username? Inoltre, c'è un motivo per cui usi due chowncomandi consecutivi ?
Alaa Ali,

3

Tutto ciò che serve davvero è la cartella home per farlo funzionare. Come radice,

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

L'accesso con la prima volta dovrebbe creare tutti i file necessari, che sembrano essere quelli:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.