Frage Erstellen Sie Home-Verzeichnisse nach dem Erstellen von Benutzern


Ich habe einige Benutzer erstellt mit:

$ useradd john

und ich habe vergessen, den Parameter anzugeben -m um das Home-Verzeichnis zu erstellen und die Skelettdateien für jeden Benutzer zu kopieren. jetzt möchte ich das tun, und ich möchte nicht alle Benutzer neu erstellen (es muss einen einfacheren Weg geben). Gibt es eine Möglichkeit, die Benutzerverzeichnisse zu erstellen und die Gerüstdateien zu kopieren?

Ich dachte darüber nach, die Verzeichnisse zu erstellen, sie dem entsprechenden Benutzer zuzuordnen, alle Skelettdateien zu kopieren und sie dem entsprechenden Benutzer zuzuordnen. aber wenn es einen Befehl wie useradd -m Das erstellt den Benutzer nicht erneut, sondern erstellt die Verzeichnisse, es wäre besser.


57
2017-09-09 14:33


Ursprung


Ist dies bei einer großen Benutzerliste passiert? - David Rickman
Ich hatte ungefähr 10 Benutzer mit diesem Problem. - cd1
Ich kann nicht anders, als zu fühlen, dass Rahul die beste Antwort auf deine Frage hat. Vielleicht solltest du deine angenommene Antwort noch einmal überprüfen? - jww


Antworten:


Das hört sich vielleicht nach einer dummen Idee an, aber wenn die Benutzer nichts tun, können Sie Folgendes tun:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

Bearbeiten Sie dann /tmp/users.list, um nur die gewünschten Benutzer zu enthalten. Dann mach:


for i in `cat /tmp/users.list`
do
    userdel $i
    useradd -m $i
done

Viele redhatbasierte Distributionen erstellen jedoch bei der ersten Anmeldung ein neues Home-Verzeichnis, vorausgesetzt, es ist in / etc / passwd angegeben, wo das Verzeichnis sein sollte.

Um das zu testen, tun Sie ein "su -" und sehen Sie, ob es "das Richtige" tut. Wenn nicht, wird das obige Skript ganz gut funktionieren, denke ich.


15
2017-09-09 15:02



Ja, es hat funktioniert, obwohl es neue UIDs und GIDs erstellt hat (aber das war kein Problem). aber ich habe vergessen, die Passwörter von / etc / shadow zu sichern, jetzt müssen die Benutzer ihre Passwörter erneut setzen = - cd1
Wenn er sie kürzlich erstellt hat, könnte er folgendes tun: cat / etc / passwd | egrep '^ \: [0-9] {4} \:' | cut -f 1 -d:> /tmp/users.list Das sollte nur UID von gültigen Benutzern und nicht Systembenutzer erfassen. - David Rickman
Was ist mit Passwörtern, bleiben sie gleich? Ich fürchte nicht! - math
for i in $(awk -F: '{print $1 }' /etc/passwd) - Rahul Patil
warum benutze grep oder schneide mit katze und mit rohr, warum nicht direkt auf diese weise? Schnitt -f 1 -d: </ etc / passwd> passwtmp - c4f4t0r


Auch Sie können verwenden mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]

85
2018-05-17 03:59



Dies ist die einzige Antwort, die die Frage ohne ein 10-Zeilen-Skript tatsächlich beantwortet. - Brendan Byrd
Einfach. Vielen Dank! - mawaldne
Dies und die Pam Antwort sind die besten hier, danke. Verwende niemals diese Dateien mit der Hand, wenn du es vermeiden kannst. - h4unt3r
dka @ dev-04: / $ / sbin / mkhomedir_helper dka dka @ dev-04: / $ cd bash: cd: / home / dka: Keine solche Datei oder Verzeichnis - BigDong


Sie müssen das Benutzerverzeichnis manuell erstellen. Dies erfordert drei Schritte:

  1. Erstellen Sie ein Verzeichnis gemäß /etc/passwdNormalerweise gibt es bereits einen Eintrag / home / login.
  2. Kopiere Anfangsdateien von / etc / skel
  3. Und schließlich die richtigen Berechtigungen festlegen:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: Ich vermisse immer die -m Option für useradd auch. Zumindest Debian-basierte Systeme sollten eine haben adduser Befehl, den ich über useradd empfehlen. Wenn du verpasst hast -m Option könnte es auch eine Überlegung wert sein deluser und dann den Benutzer mit den richtigen Optionen neu erstellen.

Bearbeiten: Hinzugefügt -r zum Kopieren von Verzeichnissen.


15
2018-05-12 16:14



Hat das getan: usernameh = myusername; mkdir / home / $ username; cp / etc / skel / * /etc/skel/.* / home / $ username; chown -R $ usernameh: $ usernameh / home / $ username; chmod -R 755 / home / $ username; - Aki
Persönlich mag ich das 755 chmod nicht, weil es Benutzern erlaubt, zu Hause von anderen Benutzern auszuspionieren. Ich denke, jeder Benutzer sollte anderen den Zugriff explizit gewähren. Wie public_html braucht zumindest x Bit gesetzt, würde ich empfehlen chmod 0711 an jedem Haus, public_html und ähnliche Verzeichnisse als Standard. - math
Verwenden Sie auch cp -r für skel, da sonst Verzeichnisse (.ssh) nicht kopiert werden. - Aki
Auf meinem System (Arch Linux auf ARM) cp -r /etc/skel/.* rekrutiere dich zurück in / etc / und kopiere alle Daten von hier (/etc/skel/.* entspricht / etc / skel / .. erwarte ich). Die Lösung von superuser.com/a/61619/22153 scheint zu funktionieren: cp -r / etc / skel / home / user (/ home / user darf nicht existieren, bevor der Befehl ausgeführt wird) - zpon
Ich schätze du schälst Globbing aus * mit . (Punkt). So .. Ist abgestimmt. Habe ich recht? Viele Shells deaktivieren dies standardmäßig aufgrund eines solchen Verhaltens. Welche Shell verwendest du? - math


mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Das sollte den Trick machen, glaube ich


12
2017-09-09 14:49



es sagt: usermod: no changes. und das Verzeichnis wird nicht erstellt. es funktioniert auch nicht mit dem -m Möglichkeit. - cd1
In Ordung. Ich habe herausgefunden, warum das nicht funktioniert, useradd hat nur $ HOME_DIR in / home gesetzt, wenn Sie nicht anders angegeben haben. Es scheint jetzt, es stattdessen automatisch in / home / $ USER zu setzen. Eine günstige Möglichkeit wäre Usermod -d / home / john2 -m john und dann usermod -d / home / john -m. - David Rickman
Vergiss es auch nicht. - David Rickman
Nun, zumindest hast du etwas Neues gelernt. - David Rickman
Sie haben vergessen, den Inhalt von / etc / skel / + chown recursive für diese neuen Dateien zu kopieren. usermod würde nicht funktionieren, da hier das Verzeichnis registriert, aber nicht erstellt wurde, usermod wird nichts tun. - Aki


Sie können etwas wie verwenden pam_mkhomedir um zu verhindern, dass dies in der Zukunft zu einem Problem für irgendjemanden wird. pam_mkhomedir ist ein PAM-Modul, das automatisch das Home-Verzeichnis eines Benutzers bei der Anmeldung erstellt, wenn es nicht existiert, und füllt es mit Dateien aus / etc / skel (oder dem von Ihnen angegebenen skel-Verzeichnis).

Dies ist auch ein gut skalierbarer Ansatz, da es dieses Problem weiterhin lösen wird, wenn Sie Ihr Benutzer-Repository in Zukunft auf einen Verzeichnisdienst wie LDAP umstellen.


9
2018-05-12 16:29





In meinem Fall war das Home-Volume beschädigt, und ich entschied mich, es einfach von Grund auf neu zu erstellen, da nicht viele Daten involviert waren, aber ich die Login-Informationen der Benutzer behalten wollte, so dass ich die Home-Verzeichnisse manuell mit diesem Script neu erstellte:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done

4
2017-10-08 16:45





Wenn Sie bearbeiten /etc/login.defs enthalten

CREATE_HOME yes

Dann werden Home-Verzeichnisse automatisch für zukünftige Benutzer erstellt, es sei denn, Sie teilen dies dem System mit nicht um es zu tun.

Eine weitere Option ist die Verwendung von PAM für Anmeldungen und die automatische Erstellung des Homedirs bei der ersten Anmeldung mit dem Modul pam_mkhomedir.


2
2017-12-12 08:28





Melden Sie sich mit dem Benutzer John an und schreiben Sie aus einer Shell:

xdg-user-dirs-update

Das ist es! Verwenden Sie nicht Sudo oder Su, Sie benötigen keinen Root-Zugriff, um einige zu erstellen Verzeichnisse. Von einem root-Konto aus können Sie Folgendes verwenden:

sudo -u john xdg-user-dirs-update

Auf diese Weise werden Sie den Befehl als John ausführen, das kann nützlich sein, wenn Sie den Fehler mit mehr als einem Benutzer gemacht haben.


0
2018-02-07 19:44





Mein erster Schritt nach einem useradd ist zu su - <user>.

Erzeugt die Home-Verzeichnisse, kopiert Skelette, etc - zumindest auf der CentOS 4-Box mache ich das am häufigsten.


-1
2017-09-09 14:35





Dies ist genau das, was mkhomedir_helper $USERNAME Befehl tut es.


-1
2018-06-18 08:43



Es wird kein Wert hinzugefügt, indem wiederholt wird, was eine andere Antwort bereits vor zwei Jahren erklärt hat. - kasperd


Sie könnten einfach / etc / passwd bearbeiten. Das zweite bis letzte Feld ist das Home-Verzeichnis des Benutzers.

greeblesnort:x:1000:1000:greeblesnort,,,:/home/greeblesnort:/bin/bash

-2
2017-09-09 19:19



Sie Benutzer wurden bereits erstellt. Die Home-Verzeichnisse wurden nicht erstellt, da er einen Switch vergessen hat. - David Rickman
Ich wollte nicht das Home-Verzeichnis des Benutzers ändern, ich wollte das Verzeichnis erstellen und die Skeleton-Dateien mit den entsprechenden Berechtigungen dorthin kopieren nach dem Der Benutzer wurde hinzugefügt. - cd1