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?
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?
Antworten:
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.
john
, ist eine der Gruppen johnny
. SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"
john,group1ny,group3
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.
passwd newuser
um 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.
useradd
. Nun, da ich darüber nachdenke, können Sie es anders herum machen, einen neuen Benutzer mit erstellen useradd
und dann UID und GID ändern, um den ersten zu klonen.
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
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.
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
:
/etc/suduers
und geben Sie Ihren Benutzer an.scp
auf dein Ziel.HINWEIS: Verwenden Sie kein Skript und verwenden Sie die obigen Hinweise Schritt für Schritt. Auch das kannst du nach oben einfügen.
Versuchen Sie diesen Befehl
useradd -N -g gid -G gid2,gid3 -m