Erstellen Sie ein Standard-Ausgangsverzeichnis für den vorhandenen Benutzer im Terminal


151

Wie mache ich das? Ich habe einen Benutzer ohne Home-Verzeichnis erstellt und möchte jetzt eines erstellen. Nicht nur ein Ordner namens new_user, ich möchte das Standard-Ausgangsverzeichnis mit all seinen Ordnern und versteckten Dateien usw.


Wenn sich der Benutzer anmeldet, werden diese Unterverzeichnisse (Dokumente, Downloads usw.) automatisch erstellt. Obwohl ich nach Möglichkeiten suche, sein Login über das Terminal zu "simulieren".
Alaa Ali

@Alaa su new_user: D
Radu Rădeanu

1
@ RaduRădeanu ja das habe ich schon probiert, auch probiert sudo -i -u new_useraber es funktioniert nicht. Ich denke, wir müssen "ein X-Login simulieren" ... ich weiß nicht, wie das geht.
Alaa Ali

2
Durch das Anmelden werden die Unterverzeichnisse in home nicht erstellt.
Jo Rijo

Antworten:


231

Verwenden Sie Folgendes (als root oder mit sudo, wenn nicht root):

mkhomedir_helper username

Damit dies funktioniert, /home/usernamedarf der Ordner nicht existieren.

Für X-bezogene Ordner (Desktop, Downloads usw.) müssen Sie sich in einer Grafikumgebung anmelden. Sie werden automatisch generiert, wenn Sie sich zum ersten Mal anmelden.


1
Einfach und nützlich. Auf diese Weise können Sie auch sicher sein, dass das neu erstellte Home-Verzeichnis mit Ihren Systemrichtlinien übereinstimmt, ohne diese jemals zu kennen oder manuell zu basteln.
Gerlos

Dies ist die richtige Antwort, zumindest hat es bei mir unter Ubuntu 14.04.2 LTS funktioniert.
Christian Wilkie

1
Ich musste zuerst meinen Benutzernamen in / etc / passwd haben, bevor dies für mich funktionierte.
User79878

3
Einfach .. funktioniert einfach (tm). Sollte die akzeptierte Antwort sein
Newtopian

Vergessen Sie nicht, die Berechtigungen des Verzeichnisses mit zu überprüfen ls -l /home. Ich stellte fest, dass das neue Verzeichnis von allen anderen Benutzern gelesen werden kann, und entfernte diese Berechtigungen mit chmod go-r-x /home/username.
Don Kirkby

33

Die Unterverzeichnisse (Dokumente, Downloads usw.) werden automatisch erstellt, wenn sich der Benutzer zum ersten Mal über GNOME anmeldet, sofern das Basisverzeichnis mit den richtigen Berechtigungen erstellt wurde. Hier ist eine Demonstration:

alaa @ aa-lu: ~ $ sudo useradd testinguser
 alaa @ aa-lu: ~ $ sudo passwd testinguser
Geben Sie ein neues UNIX-Passwort ein:
Geben Sie das neue UNIX-Passwort erneut ein:
passwd: Passwort erfolgreich aktualisiert
alaa @ aa-lu: ~ $ sudo ls -l / home
insgesamt 20
drwxr-xr-x 55 alaa alaa 4096 Aug 22 22:00 alaa
drwx ------ 2 wurzel wurzel 16384 Jun 5 09:46 lost + found
alaa @ aa-lu: ~ $ sudo mkdir / home / testinguser
 alaa @ aa-lu: ~ $ sudo chown testinguser: testinguser / home / testinguser
 alaa @ aa-lu: ~ $ ls -l / home
insgesamt 24
drwxr-xr-x 55 alaa alaa 4096 Aug 22 22:00 alaa
drwx ------ 2 wurzel wurzel 16384 Jun 5 09:46 lost + found
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:03 testinguser
alaa @ aa-lu: ~ $ ls -l / home / testinguser /
insgesamt 0
alaa @ aa-lu: ~ $

Sie können überprüfen, ob das Basisverzeichnis des Benutzers korrekt eingestellt ist, indem Sie den Eintrag in einchecken /etc/passwd. Standardmäßig sollte das Basisverzeichnis wie folgt eingestellt sein /home/testinguser:

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

Wenn das Ausgangsverzeichnis dort nicht angezeigt wird /home/testinguser, müssen Sie den Befehl ausführen sudo usermod -d /home/testinguser testinguser, um es zu aktualisieren. Sie sollten diesen Befehl jedoch nicht verwenden müssen, da er standardmäßig festgelegt werden sollte ( siehe useraddHilfeseiten).

Ich habe mich dann von meinem Konto abgemeldet und mich wieder mit angemeldet testinguser, und hier sind die Unterverzeichnisse, die automatisch erstellt wurden:

alaa @ aa-lu: ~ $ ls -l / home / testinguser /
insgesamt 36
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Desktop
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Dokumente
drwxr-xr-x 2 Testbenutzer Testbenutzer 4096 23. August 10:05 Downloads
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Musik
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:07 Bilder
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Öffentlich
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Vorlagen
drwxr-xr-x 2 testinguser testinguser 4096 23. August 10:05 Videos

Ich musste den Inhalt von nicht kopieren /etc/skel.

Können Sie nach Möglichkeit die folgenden Schritte ausführen, um einen neuen Benutzer zu erstellen? Sobald Sie fertig sind, können Sie diesen neuen Benutzer durch entfernen sudo deluser testinguser && sudo rm -r /home/testinguser.

Wenn all dies bei Ihnen nicht funktioniert hat, dann ist es vermutlich ein Fehler.


In einigen Situationen useraddwird das Standard- Ausgangsverzeichnis für den neuen Benutzer bei Verwendung nicht automatisch auf festgelegt /home/username. Also, zuerst musst du dir sicher sein.
Radu Rădeanu

Können Sie mir ein Beispiel für diese Situationen geben =)? Aus den Manpages von useradd: "useradd verwendet das Basisverzeichnis, das durch die Variable HOME in /etc/default/useraddoder /homestandardmäßig angegeben wird". Die Variable HOME in /etc/default/useraddist standardmäßig nicht definiert, daher wird useradd immer verwendet /home. Wie auch immer, ich bearbeite meine Antwort und verschiebe das Teil, um es zu überprüfen /etc/passwd.
Alaa Ali

Ein Beispiel hier . Ein weiteres Beispiel: Sie löschen einen Benutzer, aber Sie haben seine Verzeichnisse und Dateien nicht gelöscht. und dann fügen Sie erneut einen Benutzer mit demselben Namen hinzu. Und es gibt viele, und es gibt keine Fehler :)
Radu Rădeanu

Wenn Sie nicht /bin/shin der Benutzerzeile /etc/passwdhaben, müssen Sie eine Shell für diesen Benutzer hinzufügen, zum Beispiel die Standard-Shell mitusermod -s /bin/sh testuser
rubo77

Nicht alle Systeme haben GNOME, und es ist ein schlechter Rat, jemanden vorzuschlagen, der einen Benutzer entfernt und wieder hinzufügt, nur um ein Basisverzeichnis zu erstellen.
Ntwrkguru

12

UPDATE: Die Lösung ist kaputt und funktioniert auch bei mir nicht.

Wenn Sie das Basisverzeichnis des Benutzers erstellen möchten, falls es nicht vorhanden ist, führen Sie den useraddBefehl mit dem -mFlag aus. Dadurch werden alle Dateien aus dem /etc/skelVerzeichnis kopiert .

useradd -m username

Möglicherweise müssen Sie Einstellungen für Ihr System konfigurieren. Nach der Manpage:

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

und zeigt weiter an:

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
Dies scheint zu versuchen, einen neuen Benutzer zu erstellen, da mir mitgeteilt wird, dass der Benutzer 'new-user' bereits vorhanden ist.
Jo Rijo

Ich habe das -mFlag auch getestet, als ich einen neuen Benutzer erstellt habe, und es hat nicht funktioniert. Es werden nur die Gerüstdateien kopiert.
Alaa Ali

@Jo: Und wie ist das falsch, weil laut erstem Beitrag der User schon existiert.
Crafter

3
Diese Antwort löst das Problem nicht. Beim Kopieren werden /etc/skelkeine Unterverzeichnisse im Basisverzeichnis erstellt. Wird useradd -mauch beim Erstellen eines neuen Benutzers verwendet, nicht wenn der Benutzer bereits hinzugefügt wurde.
Alaa Ali

Ich habe den Beitrag aktualisiert, also setze CREATE_HOME in der Konfigurationsdatei login.defs auf yes.
Crafter

5

Wenn Sie den neuen Benutzer mit dem adduserBefehl erstellt haben, müssen Sie kein Basisverzeichnis für den neuen Benutzer erstellen. Ein Ausgangsverzeichnis mit dem Namen des Benutzers im /homeVerzeichnis mit den folgenden Unterverzeichnissen: Desktop, Downloads, Dokumente, Musik, Bilder, Videos (und andere) für den neuen Benutzer wird automatisch erstellt.

Wenn Sie den neuen Benutzer mit dem useraddBefehl erstellt haben, führen Sie die folgenden Befehle im Terminal aus:

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

/etc/passwdDatei als root bearbeiten (dies ist der wichtigste Schritt). Suchen Sie die Zeile mit dem Namen des neuen Benutzers und legen Sie das Standard-Ausgangsverzeichnis für ihn wie folgt fest:

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

In dieser Zeile können Sie auch einen echten Namen für den neuen Benutzer hinzufügen oder die Standard-Shell festlegen. Etwas wie das:

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

Seien Sie vorsichtig, nehmen Sie keine weiteren Änderungen vor.

Führen Sie nach dem Speichern der Datei vor dem Verlassen des Root-Kontos die folgenden Befehle aus:

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

Danach wird der Basisordner für den neuen Benutzer nach der ersten Anmeldung automatisch ausgefüllt.

Siehe auch: So legen Sie den Benutzer-Basisordner nach der Kontoerstellung an


Soweit ich mich erinnere, wird der Basisordner nicht automatisch erstellt. Sie müssen ihn manuell erstellen und den Eintrag des Benutzers in aktualisieren /etc/passwd(sofern er noch nicht vorhanden ist). Sobald sich der Benutzer anmeldet, wird der Basisordner automatisch mit diesen Unterverzeichnissen gefüllt. Dies alles wird jedoch erledigt, indem jemand einen Benutzer hinzufügt adduser, der anstelle von verwendet useradd.
Alaa Ali

@Alaa Ich habe gerade vor ein paar Tagen getestet und folgendes verwendet adduser: Der Home-Ordner wird automatisch erstellt. Tatsächlich wird der Basisordner nach der ersten Anmeldung automatisch ausgefüllt.
Radu Rădeanu

Dies scheint nichts zu bewirken. Vielleicht probiere ich das Bash-Skript aus der anderen Frage aus, aber konnte ich nicht einfach einen Ordner in / home / namens new_user erstellen und dann den Inhalt von / etc / skel dorthin kopieren? ist es das, was dieses Bash-Skript macht?
Jo Rijo

@JoRijo Ich habe meine Antwort bearbeitet.
Radu Rădeanu

@ RaduRădeanu meinst du nicht cp /etc/skel/* /home/new_username? Gibt es auch einen Grund, warum Sie zwei aufeinanderfolgende chownBefehle verwenden?
Alaa Ali

3

Alles, was Sie wirklich brauchen, ist der Home-Ordner, damit es funktioniert. Als Wurzel

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

Wenn Sie sich zum ersten Mal anmelden, sollten alle erforderlichen Dateien erstellt werden. Dies sind anscheinend die folgenden:

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.