Klonuj użytkownika Linuksa (kopiuj użytkownika na podstawie innego)
14
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?
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.
Tak, ciekawe, ale szybkie i brudne: nie powiedzie się, jeśli nazwa logowania jest przedrostkiem lub przyrostkiem dowolnej nazwy grupy. Np. Login to 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
Stéphane Gourichon
Dziękujemy za utworzenie tego skryptu. Sugeruję zmianę SRC_GROUPS jako taką, 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.
Phil
5
Edytuj plik / etc / passwd i zduplikuj wiersz użytkownika, którego chcesz dokładną kopię. Zmodyfikuj nazwę logowania, prawdziwą nazwę i katalog domowy.
Edytuj / etc / shadow i ponownie zduplikuj linię pierwotnego użytkownika. Zmodyfikuj nazwę logowania.
Na koniec uruchom, 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ć.
To prawie na pewno najprostszy sposób. Jednak dobrym pomysłem może być również modyfikacja UID, jeśli nie masz zamiaru być tym samym użytkownikiem ...
Wildcard,
1
@Wildcard, ale wtedy nie byłby to klon, byłby to nowy użytkownik i zadanie to można wykonać w prosty sposób 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.
YoMismo,
3
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
Sugestie: sprawdź poprawność uprawnień, za pierwszym razem próbowałem uruchomić program bez sudo, skrypt jest dość daleko. Pomocne byłoby także grep .bashrc / .zshrc itp. Dla „/ home / $ olduser” i ostrzeżenie lub zaoferowanie zamiany na $ HOME, jeśli zostanie znalezione, to bardzo mylące, gdy pozostają odniesienia do katalogu domowego starego użytkownika
Mike
Dziękujemy za utworzenie tego. Sugeruję zmianę olduser_GROUPS jako taką, 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.
Phil
1
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:
Znajdź identyfikator użytkownika i identyfikator użytkownika
Znajdź swój katalog domowy.
Znajdź grupy, których użytkownik jest ich członkiem.
Przeczytaj /etc/suduersi stan swojego użytkownika.
Bardzo ważne jest, abyś rozróżniał ukryte pliki, pliki łączy, pliki śmieci i pliki związane z twoim rodzimym komputerem.
Według poprzedniego numeru skompresuj jego domowy reż.
Utwórz meta katalog zgodnie z innymi specyfikacjami, takimi jak konfiguracje i tak dalej.
scp na twoim celu.
Oczywiście sama dekompresja i korzystanie z domowego katalogu ma dużą koncepcję.
UWAGA: Nie używaj skryptu i używaj powyższych notatek krok po kroku. Nawet możesz wstawić powyżej.
Odpowiedzi:
Ten skrypt to zrobi:
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.
Nie ma sprawdzania błędów, to tylko szybki i brudny skrypt klonowania.
źródło
john
jedna z grupjohnny
. 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 newuser
aby 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ć.
źródło
useradd
. Teraz, gdy o tym myślę, możesz to zrobić na odwrót, utworzyć nowego użytkownika za pomocą,useradd
a 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!
Dziękujemy wszystkim na świecie, którzy pomogli mi z tym skryptem. John w Oregonie
źródło
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/suduers
i 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.
źródło
Wypróbuj to polecenie
źródło