Jak mogę utworzyć nowego użytkownika systemu, dokładną kopię innego użytkownika (mającego te same grupy, uprawnienia, uprawnienia i ustawienia), ale z inną nazwą użytkownika, hasłem i katalogiem domowym?
Jak mogę utworzyć nowego użytkownika systemu, dokładną kopię innego użytkownika (mającego te same grupy, uprawnienia, uprawnienia i ustawienia), ale z inną nazwą użytkownika, hasłem i katalogiem domowym?
Odpowiedzi:
Ten skrypt to zrobi:
#!/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}
Pobiera źródłowe grupy użytkowników (nie licząc grupy, która jest taka sama jak ich login) i powłokę, a następnie tworzy nowego użytkownika z tą samą powłoką i grupami pomocniczymi.
Usage: clone-user src_user_name new_user_name
Nie ma sprawdzania błędów, to tylko szybki i brudny skrypt klonowania.
johnjedna z grup johnny. Oto, co się dzieje: SRC=john ; echo "$SRC group1 johnny group3" | sed "s/ ${SRC}//g" | sed "s/ /,/g"Wyjście:john,group1ny,group3
SRC_GROUPS=$(id -Gn ${SRC} | sed "s/ /,/g" | sed -r 's/\<'${SRC}'\>\b,?//g') która odpowiednio usunie dokładną nazwę grupy użytkowników, a nie częściowe dopasowanie ciągu. Dawny. Jeśli identyfikator użytkownika to „pi”, a użytkownik ma grupy, w tym „pi, gpio, spi itp.”, Usunie tylko „pi”, a nie inne częściowe ciągi pasujące.
passwd newuseraby zmodyfikować hasło.Należy pamiętać, że pod względem systemowym obaj użytkownicy są tym samym (tym samym UID), więc można wejść do katalogu domowego drugiego użytkownika i dowolnie modyfikować.
useradd. Teraz, gdy o tym myślę, możesz to zrobić na odwrót, utworzyć nowego użytkownika za pomocą, useradda następnie zmodyfikować UID i GID, aby sklonować pierwszego.
Dla systemu Linux Mint 18 Mate
Opierając się na skrypcie Mike'a Andersona, stworzyłem taki, który zadaje pytania o nowego użytkownika, starego użytkownika, nowe hasło, a następnie kopiuje katalog domowy starego użytkownika i zastępuje wszystkie wystąpienia nazwy starego użytkownika w nowym katalogu domowym nowym nazwa użytkownika.
Główną różnicą w moim skrypcie dotyczącą linii useradd jest to, że passwd nie działa w Linux Mint 18, zastąpiony przez chpasswd. Aby hasło działało, musiałem utworzyć nową linię: echo $ newuser: $ newpassword | chpasswd.
Kolejna różnica polega na tym, że nie mogłem zmusić --create-home do pracy, więc zamiast tego użyłem mkdir w nowej linii.
Uważaj, jeśli masz ogromny katalog domowy starego użytkownika.
Weź to, czego potrzebujesz, a resztę zostaw. Jesteś odpowiedzialny za każdy skopiowany kod - rób kopie zapasowe!
#!/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
Dziękujemy wszystkim na świecie, którzy pomogli mi z tym skryptem. John w Oregonie
olduser_GROUPS=$(id -Gn ${olduser} | sed "s/ /,/g" | sed -r 's/\<'${olduser}'\>\b,?//g')która odpowiednio usunie dokładną nazwę grupy użytkowników, a nie częściowe dopasowanie ciągu. Dawny. Jeśli identyfikator użytkownika to „pi”, a użytkownik ma grupy, w tym „pi, gpio, spi itp.”, Usunie tylko „pi”, a nie inne częściowe ciągi pasujące.
Jak wiadomo, użytkownicy uniksowi jako identyfikatory UID nie mają nazwy, Na przykład: mohsen znany jako 1001 lub grupowy mohsen znany jako 1001.
Musisz napisać skrypt i wykonać krok po kroku następujące kroki:
/etc/suduersi stan swojego użytkownika.scp na twoim celu.UWAGA: Nie używaj skryptu i używaj powyższych notatek krok po kroku. Nawet możesz wstawić powyżej.
Wypróbuj to polecenie
useradd -N -g gid -G gid2,gid3 -m