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.