Linux-Benutzer klonen (Benutzer kopieren, basierend auf einem anderen)


13

Wie kann ich einen neuen Systembenutzer erstellen, eine exakte Kopie eines anderen (mit denselben Gruppen, Berechtigungen, Privilegien und Einstellungen), aber mit unterschiedlichen Benutzernamen, Passwörtern und Heimatverzeichnissen?


Linux hat keinen kanonischen Weg, Sie müssen ein Skript schreiben ...
PersianGulf

2
Kein Unterschied einmal Befehl, Skript oder Howto :) Die Frage ist, wie es geht :)
Sfisioza

Also antworte ich dir ...
PersianGulf

Antworten:


9

Dieses Skript wird es tun:

#!/bin/bash
SRC=$1
DEST=$2

SRC_GROUPS=$(id -Gn ${SRC} | sed "s/${SRC} //g" | sed "s/ ${SRC}//g" | sed "s/ /,/g")
SRC_SHELL=$(awk -F : -v name=${SRC} '(name == $1) { print $7 }' /etc/passwd)

useradd --groups ${SRC_GROUPS} --shell ${SRC_SHELL} --create-home ${DEST}
passwd ${DEST}

Es werden die Gruppen des Quellbenutzers (ohne die Gruppe, die mit deren Login identisch ist) und die Shell abgerufen. Anschließend wird ein neuer Benutzer mit derselben Shell und denselben sekundären Gruppen erstellt.

Usage: clone-user src_user_name new_user_name

Es gibt keine Fehlerprüfung, es ist nur ein schnelles und unsauberes Klonskript.


1
Ja, interessant, aber schnell und schmutzig: Schlägt fehl, wenn ein Anmeldename ein Präfix oder Suffix eines Gruppennamens ist. ZB Login ist john, ist eine der Gruppen johnny. SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"john,group1ny,group3
Folgendes

Vielen Dank, dass Sie dieses Skript erstellt haben. Ich schlage vor, SRC_GROUPS als solches zu ändern. Dadurch SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') wird der genaue Name der Benutzergruppe im Gegensatz zu einer Teilzeichenfolgenübereinstimmung ordnungsgemäß entfernt. Ex. Wenn die ID eines Benutzers "pi" ist und ein Benutzer Gruppen wie "pi", "gpio", "spi" usw. hat, wird nur "pi" entfernt, und die anderen Teilzeichenfolgen stimmen nicht überein.
Phil

5
  • Bearbeiten Sie / etc / passwd und duplizieren Sie die Zeile des Benutzers, von dem Sie eine exakte Kopie möchten. Ändern Sie den Anmeldenamen, den tatsächlichen Namen und das Basisverzeichnis.
  • Bearbeiten Sie / etc / shadow und duplizieren Sie erneut die Zeile des ursprünglichen Benutzers. Ändern Sie den Anmeldenamen.
  • Führen Sie schließlich aus, passwd newuserum das Kennwort zu ändern.

Beachten Sie, dass beide Benutzer in Bezug auf das System dieselbe UID haben, sodass einer in das Ausgangsverzeichnis des anderen wechseln und nach Belieben ändern kann.


Dies ist mit ziemlicher Sicherheit der einfachste Weg. Es könnte jedoch eine gute Idee sein, die UID auch zu ändern, wenn Sie nicht beabsichtigen, dass sie tatsächlich derselbe Benutzer sind ...
Wildcard

1
@Wildcard, aber dann wäre es kein Klon, es wäre ein neuer Benutzer und diese Aufgabe kann mit einem einfachen erledigt werden useradd. Nun, da ich darüber nachdenke, können Sie es anders herum machen, einen neuen Benutzer mit erstellen useraddund dann UID und GID ändern, um den ersten zu klonen.
YoMismo

3

Für Linux Mint 18 Mate

Basierend auf dem Skript von Mike Anderson habe ich ein Skript erstellt, in dem Fragen zum neuen Benutzer, zum alten Benutzer und zum neuen Kennwort gestellt werden. Anschließend kopiere ich das Ausgangsverzeichnis des alten Benutzers und ersetze alle Instanzen des Namens des alten Benutzers im neuen Ausgangsverzeichnis durch das neue Name des Benutzers.

Der Hauptunterschied in meinem Skript bezüglich der useradd-Zeile besteht darin, dass das passwd in Linux Mint 18 fehlschlägt und durch chpasswd ersetzt wird. Damit das Passwort funktioniert, musste ich eine neue Zeile erstellen: echo $ newuser: $ newpassword | chpasswd.

Ein weiterer Unterschied ist, dass ich --create-home nicht zum Laufen bringen konnte, also habe ich stattdessen einfach mkdir in einer neuen Zeile verwendet.

Achten Sie darauf, ob Sie ein riesiges Benutzerverzeichnis haben.

Nehmen Sie, was Sie brauchen, und verlassen Sie den Rest. Sie sind für jeden Code verantwortlich, den Sie kopieren - machen Sie Backups!

#!/bin/bash

# clone a user
# usage:
# if you named this as below then
# change to the directory and run this command
# sudo bash clone-user.sh

echo "============="
echo "this script will create a new user"
echo "based on an existing user's data"
echo 
echo "You will be shown a list of users who can currently log on"
echo "Remember which user you would like to clone."
echo "You will be asked for the new user's name, their password"
echo "and the old user to clone".
echo "============="
echo 

echo -n "New user's name: "
read newuser

echo -n "New user's password: "
read newpassword

echo 

echo "Current users you can clone:"
echo "----"
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd
echo 

echo -n "Old user to clone: "
read olduser

echo 
echo "You have selected: "
echo "----"
echo "new user: $newuser"
echo "new user password: $newpassword"
echo "old user: $olduser"
echo 

olduser_GROUPS=$(id -Gn ${olduser} | sed "s/${olduser} //g" | sed "s/ ${olduser}//g" | sed "s/ /,/g")
olduser_SHELL=$(awk -F : -v name=${olduser} '(name == $1) { print $7 }' /etc/passwd)

echo "old user groups: "
echo "----"
echo $olduser_GROUPS
echo "olduser shell: "
echo $olduser_SHELL
read -rsp $'Press any key to continue or ctrl-c to exit...\n' -n1 key

useradd --groups $olduser_GROUPS --shell $olduser_SHELL $newuser

echo $newuser:$newpassword | chpasswd

read -rsp $'ready to make home direcoty -- ctrl-c to exit...\n' -n1 key

mkdir /home/$newuser
chown -R $newuser:$newuser /home/$newuser

echo 
echo "Script should be done now."
echo 
echo "Do you see your new users name below?"
echo 
awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' /etc/passwd

echo 
echo "We are now going to copy the old user's home folder to the new user"
echo "then change ownership to the new user"
echo 
read -rsp $'Ready to copy home folder --- or ctrl-c to exit...\n' -n1 key

rsync -aPv /home/$olduser/. /home/$newuser/
chown -R --from=$olduser $newuser:$newuser /home/$newuser

echo 
echo "Now we are going to change the names of files and folders to the new user"
echo 

grep -rlI $olduser /home/$newuser/ . | sudo xargs sed -i 's/$olduser/$newuser/g'

echo 
echo "Done now."
echo 
read -rsp $'Press any key to exit...\n' -n1 key
echo 
echo 

Vielen Dank an alle auf der Welt, die mir mit diesem Skript geholfen haben. John in Oregon


Vorschläge: Überprüfen Sie, ob die Berechtigungen korrekt sind. Ich habe versucht, das erste Mal ohne sudo zu laufen. Das Skript ist ziemlich weit fortgeschritten. Allso wäre hilfreich , grep Bashrc / .zshrc etc für „/ home / $ Altnutzer“ und warnen oder Angebot mit $ HOME zu ersetzen , wenn gefunden, wird es sehr verwirrend , wenn Verweise auf den alten Home - Verzeichnis des Benutzers bleiben
Mike

Vielen Dank, dass Sie dies erstellt haben. Ich schlage vor, olduser_GROUPS als solches zu ändern. Dadurch olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')wird der genaue Name der Benutzergruppe im Gegensatz zu einer teilweisen Zeichenfolgenübereinstimmung ordnungsgemäß entfernt. Ex. Wenn die ID eines Benutzers "pi" ist und ein Benutzer Gruppen wie "pi", "gpio", "spi" usw. hat, wird nur "pi" entfernt, und die anderen Teilzeichenfolgen stimmen nicht überein.
Phil

1

Wie Sie wissen, werden Unix-Benutzer nicht als UIDs bezeichnet. Beispiel: Mohsen, bekannt als 1001, oder Group Mohsen, bekannt als 1001.
Sie müssen ein Skript schreiben und Schritt für Schritt die folgenden Schritte ausführen :

  1. Finden Sie UID und GID des angegebenen Benutzers
  2. Finden Sie sein Home-Verzeichnis.
  3. Finde Gruppen, zu denen der Benutzer gehört.
  4. Lesen Sie /etc/suduersund geben Sie Ihren Benutzer an.
  5. Es ist sehr wichtig, dass Sie zwischen versteckten Dateien, Link-Dateien, Garbage-Dateien und Dateien, die sich auf Ihren nativen Computer beziehen, unterscheiden.
  6. Laut vorheriger Nummer komprimiere sein Heimatverzeichnis.
  7. Verschieben Sie ein Meta-Verzeichnis in eine Kiste gemäß anderen Spezifikationen, z. B. Konfigurationen usw.
  8. scp auf dein Ziel.
  9. Natürlich hat das Dekomprimieren und Verwenden des Home-Verzeichnisses selbst ein großes Konzept.

HINWEIS: Verwenden Sie kein Skript und verwenden Sie die obigen Hinweise Schritt für Schritt. Auch das kannst du nach oben einfügen.


-2

Versuchen Sie diesen Befehl

useradd -N -g gid -G gid2,gid3 -m

1
Es ist keine Antwort. Poster möchte Benutzer klonen.
PersianGulf

Dieser Code wurde ohne Link und Beschreibung gestohlen!
kyb
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.